Code前端首页关于Code前端联系我们

从统计到概率,初学者可以使用Python来实验机器学习的基础知识

terry 2年前 (2023-09-27) 阅读数 61 #数据结构与算法

要学习统计,首先了解概率问题很重要。概率涉及很多公式和理论,很容易被忽视,但它在工作和日常生活中发挥着重要作用。在讨论描述性统计中的一些基本概念之前,我们现在将探讨统计与概率之间的关系。

要求:

与之前的博客类似,本文不要求读者具备统计知识,但至少需要对Python有基本的了解。考虑到读者对循环和列表了解不多,下面简单介绍一下。

概率是多少?

在最基本的层面上,概率回答了这个问题:“某件事发生的概率是多少?”为了计算某件事发生的概率,我们还需要考虑所有其他可能发生的事件。 。

概率问题的一个典型例子是抛硬币。在扔硬币的过程中,只会有两种结果:

1。正面朝上

2. 反面朝上

这两个结果是样本空间,即所有可能结果的集合。为了计算事件发生的概率,我们计算事件发生的次数(例如抛硬币正面朝上)并将其除以总尝试次数。因此,概率告诉我们,抛硬币正面或反面的几率是 1/2。通过观察可能发生的事件,概率提供了一个预测某事发生频率的框架。

然而,虽然结果看起来很明显,但如果我们真的尝试抛一些硬币,我们很可能会得到非常高或非常低的正面概率。假设抛硬币不公平,该怎么办?收集数据!我们可以使用统计方法根据现实世界的观察来计算概率,并将其与理想概率进行比较。

从统计到概率

我们可以通过抛硬币10次并数出正面的数量来获得数据。让我们考虑一下这个 10 次抛硬币实验,以及硬币在数据点中正面朝上的次数。也许头的数量不是“理想的”五个,但不用担心,因为一次只尝试一个数据点。

如果我们进行多次试验,我们预计所有试验中正面朝上的平均概率会接近 50%。以下代码模拟 10、100、1000 和 1,000,000 次试验,然后计算正面的平均频率。下图总结了这个过程。函数

统计到概率,入门者能用Python试验的机器学习基础

import random
def coin_trial():
    heads = 0
    for i in range(100):
        if random.random() <= 0.5:
            heads +=1
    return heads

def simulate(n):
   trials = []
   for i in range(n):
       trials.append(coin_trial())
   return(sum(trials)/n)

simulate(10)
>> 5.4

simulate(100)
>>> 4.83

simulate(1000)
>>> 5.055

simulate(1000000)
>>> 4.999781复制代码

coin_Trial 描述了 10 次抛硬币的模拟。它使用random()函数生成0到1之间的随机浮点数,如果浮点数低于0.5,则增加头数。然后,模拟根据需要多次重复试验,并在所有试验后返回平均正面数。

抛硬币模拟的结果很有趣。首先,模拟数据显示平均人数接近概率估计。其次,随着试验次数的增加,平均值变得更接近期望的结果。当进行10次模拟时,存在轻微误差,但当试验次数达到1,000,000时,误差几乎消失。随着试验次数的增加,与预期平均值的偏差会减小。听起来有点熟?

当然,我们可以自己掷硬币,但是通过用Python代码模拟这个过程可以节省大量时间。随着我们获得更多数据,现实世界(结果)开始与理想世界(期望)重叠。因此,只要有足够的数据,统计数据就可以让我们根据现实世界的观察来估计概率。概率提供理论,而统计学提供使用数据检验理论的工具。因此,统计样本的数值特征,尤其是平均值和标准差,可以替代理论。

您可能会问,“如果我可以计算理论概率,为什么我要使用代理?”抛硬币是一个非常简单的例子,但是一些比较有趣的概率问题却不是那么容易计算的。 。随着时间的推移,人们生病的可能性有多大?当您开车时,关键的汽车部件发生故障的可能性有多大?

没有简单的方法来计算概率,所以我们必须依赖数据和统计。给定更多数据,我们的结果可以更有信心计算结果反映了这些重要事件的真实概率。

Umpomo 我是一名侍酒师。在购买之前,我想了解更好的葡萄酒。我已经拥有大量数据,因此我们将使用统计数据来指导我们的决策。

数据与分布

在解决“哪种酒更好”这个问题之前,我们需要考虑数据的性质。直觉上,我们希望通过评分来选择更好的葡萄酒,但问题是:分数通常分布在一个范围内。那么我们如何比较不同类型葡萄酒的得分并确定一种葡萄酒是否优于另一种呢?

如果有正态分布(也称为高斯分布),这是概率和统计领域中非常重要的现象。正态分布如下所示:

统计到概率,入门者能用Python试验的机器学习基础正态分布最重要的品质是其对称性和形状,以及广泛的普适性。我们一直在谈论分销,但分销到底是什么?我们可以直观地将概率分布视为任务中所有可能的事件及其相应的概率。例如,在“抛硬币”任务中,两个事件“正面”和“反面”以及对应的出现概率1/2可以形成一个分布。

在概率中,正态分布是所有事件及其对应概率的具体分布。 x 轴代表我们想要知道的事件的概率,y 轴是与每个事件相关的概率 - 从 0 到 1。我们这里不是讨论概率分布,而是了解正态分布是一个重要的概率分布。

在统计学中,正态分布是数据值的分布。这里,x 轴是数据值,y 轴是值的总和。下面是相同正态分布的两个图,但根据概率和统计进行标记:

统计到概率,入门者能用Python试验的机器学习基础

在概率正态分布中,最高点代表发生概率最大的事件。距离事件越远,发生的可能性越小,最终形成钟形。在统计正态分布中,最高点代表平均值。与概率的情况类似,距离平均值越远,频率下降的幅度越大。即两端的点与均值的偏差非常高,并且样本非常稀少。

如果您通过正态分布怀疑概率和统计之间存在另一种关系,那么您是对的!我们将在本文后面探讨这种重要的关系,但不用担心。

由于我们要利用质量得分的分布来比较不同的葡萄酒,因此我们需要设置一些条件来找到我们喜欢的葡萄酒。我们将收集有关葡萄酒的数据,然后分离出一些有趣的葡萄酒质量分数。

要检索数据,我们需要以下代码:

import csv
with open("wine-data.csv", "r", encoding="latin-1") as f:
    wines = list(csv.reader(f))复制代码

数据以表格格式显示如下。我们需要点列,因此我们将其提取到列表本身中。一位葡萄酒专家告诉我,匈牙利的托卡伊白葡萄酒非常棒,而一位朋友则建议从意大利的兰布鲁斯科红葡萄酒开始。我们可以用数据来比较这些酒!

如果您不记得数据是什么样的,这里有一个简短的表格供您参考并刷新您的理解。

统计到概率,入门者能用Python试验的机器学习基础

# Extract the Tokaji scores
tokaji = []
non_tokaji = []
for wine in wines:
    if points != '':
        points = wine[4]
    if wine[9] == "Tokaji":
        tokaji.append(float(points))
    else:
        non_tokaji.append(points)

# Extract the Lambrusco scores 
lambrusco = []
non_lambrusco = []
for wine in wines:
    if points != '':
        points = wine[4]
    if wine[9] == "Lambrusco":
        lambrusco.append(float(points))
    else:
        non_lambrusco.append(float(points))复制代码

如果我们将每组质量分数可视化为正态分布,我们可以立即根据它们的位置确定这两个分布是相等的,但我们很快就会遇到这种方法的问题,如下所示。由于数据量很大,我们假设分数呈正态分布。虽然这个假设在这里很好,但它很危险,我们将在稍后讨论。

统计到概率,入门者能用Python试验的机器学习基础

如果两个分数分布重叠太多,最好假设您的分数来自相同的分布,而不是来自不同的分布。在另一个极端,两个分布不重叠,可以安全地假设它们来自不同的分布。问题是某些情况具体重叠。例如,在我们如何判断分数是否来自不同分布的情况下,一个分布的极端高度可以与另一种分布的极端底部相交。

因此,我们再次期望正态分布能够提供答案并在统计和概率之间架起一座桥梁。

重温正态分布

正态分布对于概率和统计非常重要,原因有两个:中心极限定理和 3σ 准则。

中极限定理

在上一节中我们表明,如果重复抛硬币实验十次,正面的平均结果将接近 50%。随着试验次数的增加,即使个别试验本身并不完美,平均结果也接近正确概率。这个想法,或者数学上称为概念收敛,是中心极限定理的关键原理。

在抛硬币的例子中,每次尝试抛掷 10 次,我们将估计每次尝试正面朝上的数量为 5。这是一个估计,因为我们知道结果不会是完美的(即,我们不会得到 5)每次都是头)。如果我们进行多次估计,根据中心极限定理,这些估计的分布将看起来像正态分布,并且该分布的峰值或估计的期望将与真实值一致。我们观察到,在统计中,正态分布的顶点与平均值一致。因此,给定许多“实验”作为数据,中心极限定理指出,即使我们不知道真实概率,我们也可以根据数据估计分布的形状。

中心极限定理让我们知道多次试验的平均值将接近真实平均值,而3σ准则将告诉我们数据将在这个平均值周围分布多少。

3σ 规则

3σ 规则(也称为经验法则或 68-95-99.7 规则)是在距平均值一定距离处观察到的数据量的表达式。请注意,标准差(又名“西格玛”)是数据观测值与平均值之间的平均距离。

3σ 标准指出,给定正态分布,68% 的观测值将在平均值的一个标准差内,95% 将在两个标准差内,99.7% 将在三个标准差 Ing 内。这些值的推导涉及大量复杂的数学,因此超出了本文的范围。关键是要理解 3σ 准则使我们能够知道有多少数据处于与正态分布不同的区间。下图是3σ准则的总结。

统计到概率,入门者能用Python试验的机器学习基础我们将把这些概念与葡萄酒数据联系起来。假设,作为品酒师,我们想知道与普通葡萄酒相比,霞多丽和黑皮诺的受欢迎程度如何。我们收集了数千条葡萄酒评论,根据中心极限定理,这些评论的平均分应该与葡萄酒质量的“真实”表示一致(由评论者判断)。

虽然 3σ 标准描述了数据在已知值范围内的程度,但它还描述了极值的稀有性。任何偏离平均值三个标准差的值都应谨慎对待。通过3σ和Z分数标准,我们最终可以衡量霞多丽白葡萄酒、黑皮诺葡萄酒和普通葡萄酒之间的差异。

Z-score

Z-score 是一个简单的计算,可以回答以下问题:“给定一个数据点,它与平均值的标准差是多少?”这是 Z 分数方程式:

统计到概率,入门者能用Python试验的机器学习基础

Z 分数本身并不能提供太多信息。但与 Z 表相比,它非常有价值,Z 表列出了给出 Z 分数之前标准正态分布的累积概率。标准正态分布是均值为0、标准差为1的正态分布。虽然我们的正态分布不是标准的,但是Z分数可以让我们参考Z表。

累积概率(或概率分布函数)是到某一点为止所有值的概率之和。一个简单的例子就是平均值本身。均值恰好是正态分布的中间部分,因此我们知道从左到右到均值的所有可能值的总和为 50%。当您想要计算标准差之间的累积概率时,实际上会出现 3σ 标准的值。下图是累积概率的可视化。

统计到概率,入门者能用Python试验的机器学习基础

所有概率之和必须等于100%,因此我们使用Z表按照正态分布计算Z分数两边的概率。

统计到概率,入门者能用Python试验的机器学习基础超过某个 Z 分数的概率的计算对我们很有用。它使我们能够从“值与平均值有多远?”的问题升级。到“该值与同一观察平面的平均值有一定距离的可能性有多大?”因此,从 Z 分数和 Z 表概率结果将回答我们关于葡萄酒的问题。

import numpy as np
tokaji_avg = np.average(tokaji)
lambrusco_avg = np.average(lambrusco)

tokaji_std = np.std(tokaji)
lambrusco = np.std(lambrusco)

# Let's see what the results are
print("Tokaji: ", tokaji_avg, tokaji_std)
print("Lambrusco: ", lambrusco_avg, lambrusco_std)
>>> Tokaji:  90.9 2.65015722804
>>> Lambrusco:  84.4047619048 1.61922267961复制代码

朋友推荐的好像不太好!就本文而言,我们认为托卡伊白葡萄酒和兰布鲁斯科红葡萄酒的分数呈正态分布。因此,每种葡萄酒的平均分将代表质量方面的“真实”分数。我们将计算 Z 分数,看看托卡伊白葡萄酒的平均水平与兰布鲁斯科红葡萄酒的平均水平相差多少。

z = (tokaji_avg - lambrusco_avg) / lambrusco_std
>>> 4.0113309781438229

# We'll bring in scipy to do the calculation of probability from the Z-table
import scipy.stats as st
st.norm.cdf(z)
>>> 0.99996981130231266

# We need the probability from the right side, so we'll flip it!
1 - st.norm.cdf(z)
>>> 3.0188697687338895e-05复制代码

答案是差别很小。但是,这是什么意思?哪怕有一丝一毫的可能性,都需要详细的解释。

假设托卡伊白葡萄酒和兰布鲁斯科红葡萄酒在品质上没有差异。换句话说,这两种品质是同一件事。同样,由于葡萄酒之间的个体差异,这些葡萄酒的分数也会有一些差异。根据中心极限定理,如果我们将这两种葡萄酒的分数制作成直方图,就会产生服从正态分布的质量分数。

现在,我们可以使用一些数据来计算这两种葡萄酒的平均值和标准差。这些值可以用来检查它们是否具有相同的质量。我们将使用兰布鲁斯科红葡萄酒分数作为基础,并将其与托卡伊白葡萄酒的平均分数进行比较,但反之亦然。唯一的区别是 Z 分数为负。

Z 分数是 4.01!如果 Tokaj 和 Lambrusco 具有相同的质量,则根据 3σ 标准,99.7% 的数据应在 3 个标准差以内。在 Tokaj 和 Lambrusco 被认为具有相同质量的情况下,远离平均质量分数的概率非常非常小。这种情况的概率非常小,所以我们必须考虑相反的情况:如果托卡伊与兰布鲁斯科不同,就会产生不同的分数分布。

我们在这里仔细选择我们的措辞:我没有说“托卡伊比兰布鲁斯科更好”。因为我们计算出的这个概率虽然微观上很小,但并不为零。当然,托卡伊和兰布鲁斯科肯定不是来自同一个分布,但不能说其中一个比另一个更好或更差。

这种推理属于推论统计的范畴,本文仅做简单介绍。这篇文章介绍了很多概念,如果你觉得头晕的话,不妨回去慢慢看。

总结

我们从描述性统计开始,然后将它们与概率联系起来。基于概率,我们开发了一种方法来定量显示两组分数是否来自同一分布。这样,我们比较了别人推荐的两种葡萄酒,发现它们具有相同的不同质量分数分布的可能性。也就是说,一种酒比另一种更好。

统计不仅仅是统计学家的领域。作为一名数据科学家,对常用统计方法有直观的理解将帮助您建立自己的理论以及测试它们的能力。我们在这里几乎没有触及推论统计,但类似的想法将有助于指导我们对统计原理的理解。本文讨论了正态分布的优点,但统计学家也开发了非正态分布的技术。

作者:机器之心
来源:掘金

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门