ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Data-Science-For-Beginners 第 04 课:概率与统计入门——从随机变量到假设检验的完整实战指南

Data-Science-For-Beginners 第 04 课:概率与统计入门——从随机变量到假设检验的完整实战指南 Data-Science-For-Beginners 第 04 课概率与统计入门——从随机变量到假设检验的完整实战指南【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners本课是 Data-Science-For-Beginners 课程第 1 部分Introduction的第 4 课完整对应仓库中的英文原版与波斯语译文translations/fa/1-Introduction/04-stats-and-probability/README.md。文章以该课文档为主体骨架结合配套 Jupyter Notebooknotebook.ipynb与真实数据集data/SOCR_MLB.tsv、data/diabetes.tsv展开讲解。读完本文你将掌握概率与随机变量的核心概念、均值/方差/标准差/中位数/四分位数等描述统计量、正态分布与置信区间的计算以及用 SciPy 完成假设检验、用 NumPy 计算协方差与相关性分析的完整实操能力。本课速写笔记Sketchnote来源sketchnotes概率与随机变量概率Probability是介于 0 到 1 之间的一个数用来表示某个**事件Event**发生的可能性大小。在所有结果等可能的前提下概率被定义为导致该事件发生的有利结果数除以所有可能结果的总数。例如掷一颗骰子得到偶数的概率为 3/6 0.5。讨论事件时我们使用随机变量Random Variable。例如表示掷骰子结果的随机变量可以取 1 到 6 之间的值这个由 16 组成的集合称为样本空间Sample Space。我们可以谈论随机变量取某个特定值的概率比如 P(X3)1/6。根据样本空间的性质随机变量分为两类离散随机变量Discrete样本空间可数即存在一个个可以枚举的独立取值如骰子点数连续随机变量Continuous样本空间是实数区间 [a,b] 或整个实数集 ℝ例如公交车到达时间。在配套 notebook.ipynb 中课程用 Python 从均匀分布中抽取 30 个样本并计算均值与方差import numpy as np import pandas as pd import random import matplotlib.pyplot as plt sample [ random.randint(0,10) for _ in range(30) ] print(fSample: {sample}) print(fMean {np.mean(sample)}) print(fVariance {np.var(sample)})概率分布对于离散随机变量可以用函数 P(X) 描述每个事件发生的概率对样本空间 S 中的每个值s它给出一个 0 到 1 之间的数且所有 P(Xs) 之和等于 1。最著名的离散分布是均匀分布Uniform Distribution样本空间含 N 个元素每个元素概率均为 1/N。描述连续变量的概率分布则更复杂。以公交车到达时间为例对任意精确时刻t公交车恰好在该时刻到达的概率为 0我们只能谈论变量落在某个值区间内的概率例如 P(t₁ ≤ X t₂)。此时概率分布由概率密度函数Probability Density Functionp(x) 描述均匀分布的连续版本称为连续均匀分布Continuous Uniform定义在有限区间上X 落入长度为 l 的区间的概率与 l 成正比最大不超过 1。另一个重要的分布是正态分布Normal Distribution下文将详细讨论。均值、方差与标准差假设从随机变量 X 中抽取 n 个样本x₁, x₂, ..., xₙ。均值Mean或称算术平均传统上定义为 (x₁x₂...xₙ)/n。当样本量趋于无穷n→∞时得到的均值即分布的期望Expectation记作 E(x)。可以证明对取值为 {x₁, x₂, ..., xₙ}、对应概率为 p₁, p₂, ..., pₙ 的任意离散分布期望 E(X)x₁p₁x₂p₂...xₙpₙ。为了衡量数值的离散程度可以计算方差Varianceσ² Σ(xᵢ-μ)²/nμ 为序列均值其平方根 σ 称为标准差Standard Deviation。在 Notebook 中用 pandas 对真实数据data/SOCR_MLB.tsv计算这些统计量df pd.read_csv(data/SOCR_MLB.tsv, sep\t, headerNone, names[Name,Team,Role,Weight,Height,Age]) mean df[Height].mean() var df[Height].var() std df[Height].std() print(fMean {mean}\nVariance {var}\nStandard Deviation {std})众数、中位数与四分位数均值并不总能代表数据的典型值——当存在少量极端值离群点时均值会被明显拉偏。此时更好的指标是中位数Median一半数据点低于它、另一半高于它。为了理解数据分布还需要四分位数Quartiles第一四分位数 Q125% 的数据低于它第三四分位数 Q375% 的数据低于它。中位数与四分位数的关系可以用**箱线图Box Plot**直观展示由四分位数可进一步计算四分位距Inter-Quartile RangeIQRQ3-Q1以及离群值Outliers——落在边界 [Q1-1.5×IQR, Q31.5×IQR] 之外的值。对于取值有限的分布出现次数最多的值称为众数Mode常用于颜色等类别型数据。例如两组人分别强烈偏好红色与蓝色若把颜色编码成数字均值得出的平均偏好色会落在橙绿之间不代表任何一组的真实偏好而众数则是其中一种颜色——若两组人数相等则两个颜色都是众数此时样本称为多众数Multimodal。Notebook 中通过plt.boxplot和df.boxplot(columnHeight, byRole)分别绘制整体箱线图和按角色分组的箱线图直观对比不同位置球员的身高分布。现实世界数据以 MLB 棒球球员数据为例现实世界的数据严格来说并不是随机变量我们并未进行结果未知的实验但仍可套用同样的数学概念例如人的体重序列可视为从某个随机变量中抽取的样本序列。课程使用来自美国职业棒球大联盟MLB的球员身体数据取自 SOCR 数据集前 20 个体重值如下[180.0, 215.0, 210.0, 210.0, 188.0, 176.0, 209.0, 200.0, 231.0, 180.0, 188.0, 180.0, 185.0, 160.0, 180.0, 185.0, 197.0, 189.0, 185.0, 219.0]对应的体重箱线图如下展示均值、中位数与四分位数由于数据包含球员**角色Role**信息还可以按角色绘制箱线图此处以身高为例该图提示一垒手First Baseman的平均身高高于二垒手Second Baseman。下文将学习如何更正式地检验这一假设。处理现实数据时我们假设所有数据点都是从某个概率分布中抽取的样本。这一假设使我们能够应用机器学习技术、构建可用的预测模型。为观察数据分布形态可以绘制直方图HistogramX 轴为若干个体重区间即分箱 binsY 轴为该区间内样本出现的次数。从直方图可见所有值集中在某个平均体重附近离均值越远出现的频率越低——即球员体重大幅偏离均值的概率极低。方差则刻画了体重偏离均值的可能程度。如果取非棒球联盟人群的体重分布形态大概率相同但均值和方差会变化。因此若用棒球球员训练出的模型去预测大学生很可能得到错误结果因为底层分布不同。正态分布上述体重分布的形态非常典型许多现实测量都遵循这种分布只是均值和方差不同它被称为正态分布Normal Distribution在统计学中扮演核心角色。用正态分布是生成潜在棒球球员随机体重的正确方式已知平均体重mean和标准差std后可生成 1000 个体重样本samples np.random.normal(mean,std,1000)绘制生成样本的直方图会得到与真实数据非常相似的图形。增大样本数与分箱数后直方图更接近理想正态分布均值0、标准差1 的正态分布Notebook 中还演示了反面教材若用均匀分布np.random.rand生成体重样本直方图形状将明显不符合现实数据的分布形态由此强调真实世界多数测量近似正态分布不应使用均匀随机数生成器生成样本数据。置信区间讨论棒球球员体重时我们假定存在一个随机变量 W对应全体棒球球员体重的理想概率分布称为总体 Population我们手中的体重序列只是全体球员的一个子集称为样本Sample。一个有趣的问题是能否得知 W 分布的参数总体的均值与方差最直接的回答是计算样本的均值和方差。但随机样本未必能精确代表总体因此需要讨论置信区间Confidence Interval。置信区间是根据样本对总体真实均值做出的估计它在某个概率即置信水平 Level of Confidence下是准确的。设样本为 X₁, ..., Xₙ每次抽样得到的样本均值 μ 都不同因此 μ 可视为一个随机变量。置信水平为 p 的置信区间是一对值 (L_p, R_p)满足 P(L_p ≤ μ ≤ R_p) p。计算置信区间的详细推导超出本课范围核心思路是定义样本均值相对总体真实均值的分布——学生分布Student Distribution即 t 分布。趣闻学生分布以数学家 William Sealy Gosset 命名他以笔名Student发表论文。他当时在吉尼斯Guinness啤酒厂工作据传雇主不希望公众知道他们用统计检验来判定原材料质量。要以置信度 p 估计总体均值 μ需要取学生分布的 (1-p)/2 分位数 A可从数值表查出或用 Python、R 等统计软件的内置函数计算则 μ 的区间为 X ± A·D/√n其中 X 为样本均值D 为标准差。Notebook 中给出了完整的置信区间计算函数源自 StackOverflow 讨论import scipy.stats def mean_confidence_interval(data, confidence0.95): a 1.0 * np.array(data) n len(a) m, se np.mean(a), scipy.stats.sem(a) h se * scipy.stats.t.ppf((1 confidence) / 2., n-1) return m, h for p in [0.85, 0.9, 0.95]: m, h mean_confidence_interval(df[Weight].ffill(), p) print(fp{p:.2f}, mean {m:.2f} ± {h:.2f})对体重和身高计算置信区间的示例结果如下p 为置信水平p体重均值0.85201.73±0.940.90201.73±1.080.95201.73±1.28注意置信概率越高置信区间越宽。假设检验MLB 数据集中有不同球员角色可汇总如下Notebook 中用df.groupby(Role).agg(...)计算角色身高体重人数Catcher72.723684204.32894776Designated_Hitter74.222222220.88888918First_Baseman74.000000213.10909155Outfielder73.010309199.113402194Relief_Pitcher74.374603203.517460315Second_Baseman71.362069184.34482858Shortstop71.903846182.92307752Starting_Pitcher74.719457205.163636221Third_Baseman73.044444200.95555645观察可知一垒手平均身高高于二垒手因此我们可能想下结论一垒手比二垒手更高。由于我们并不确定这一事实是否真的成立这样的陈述被称为假设Hypothesis。然而这一结论并不总是显而易见的每个均值都伴随一个置信区间差异可能只是统计误差因此需要更正式的方法来检验假设。先分别计算一垒手与二垒手身高的置信区间置信水平一垒手二垒手0.8573.62..74.3871.04..71.690.9073.56..74.4470.99..71.730.9573.47..74.5370.92..71.81可以看到在任何置信水平下两个区间都不重叠这证实了一垒手高于二垒手的假设。更正式地说我们实际要解决的是两个概率分布是否相同或至少参数相同的问题。已知分布为正态时可应用学生 t 检验Student t-test计算一个t 值它在考虑方差的前提下刻画均值之差已证明 t 值服从学生分布据此可在给定置信水平 p 下确定阈值将 t 值与阈值比较以接受或拒绝假设。Python 中可用SciPy包其ttest_ind函数既计算 t 值也完成置信 p 值的反向查找from scipy.stats import ttest_ind tval, pval ttest_ind(df.loc[df[Role]First_Baseman,[Height]], df.loc[df[Role]Second_Baseman,[Height]], equal_varFalse) print(fT-value {tval[0]:.2f}\nP-value: {pval[0]})输出T-value 7.65 P-value: 9.137321189738925e-12注意课程文档中给出的示例代码在对比一垒手与指定打击者Designated_Hitter时得到 T-value 7.65、P-value ≈ 9.14e-12而 notebook.ipynb 中对一垒手与二垒手做同样的检验。无论如何p 值极低意味着有强证据支持一垒手更高的结论。ttest_ind返回的两个值含义如下Notebook 中明确解释p 值可视为两个分布均值相同的概率。本例中它非常小说明有强证据支持一垒手更高t 值t 检验使用的归一化均值差的中间量需要与给定置信水平下的阈值比较。除此之外还可能检验其他类型的假设例如证明给定样本服从某种分布本课假设身高服从正态分布但需要正式的统计验证证明样本均值等于某个预设值比较多个样本的均值如不同年龄段幸福水平的差异。大数定律与中心极限定理正态分布如此重要的原因之一是中心极限定理Central Limit Theorem设从均值 μ、方差 σ² 的任意分布中独立抽取 N 个样本 X₁, ..., Xₙ当 N 足够大N→∞时均值 ΣᵢXᵢ 服从正态分布其均值为 μ、方差为 σ²/N。另一种解读无论原始分布是什么只要计算任意随机变量值之和的均值最终都会得到正态分布。由中心极限定理还可推出当 N→∞ 时样本均值等于 μ 的概率趋近于 1这被称为大数定律Law of Large Numbers。Notebook 中利用中心极限定理手工构造正态随机数生成器——对均匀分布样本取平均即可得到近似正态的分布def normal_random(sample_size100): sample [random.uniform(0,1) for _ in range(sample_size)] return sum(sample)/sample_size sample [normal_random() for _ in range(100)] plt.hist(sample) plt.show()协方差与相关性数据科学的重要任务之一是发现数据之间的关系。我们说两条序列相关Correlate是指它们表现出同步行为要么同升同降要么一条上升时另一条下降即两条序列之间存在某种联系。相关性并不必然意味着因果有时两个变量共同依赖某个外部原因有时只是偶然相关。但强的数学相关是两个变量存在某种关联的良好信号。刻画两个随机变量关系的核心概念是协方差CovarianceCov(X,Y) E[(X-E(X))(Y-E(Y))]。计算两个变量相对其均值的偏差再相乘两个变量同向偏离时乘积恒为正累加成正协方差两个变量反向偏离一个低于均值、另一个高于均值时乘积恒为负累加成负协方差偏差相互独立时乘积近似抵消协方差趋近于 0。协方差的绝对值受实际数值量级影响难以直接说明相关强度。将其除以两个变量的标准差即可得到相关性Correlation其取值恒在 [-1,1]1 表示强正相关-1 表示强负相关0 表示无相关变量独立。示例计算棒球球员体重与身高的相关性print(np.corrcoef(weights,heights))得到如下相关矩阵Correlation Matrixarray([[1. , 0.52959196], [0.52959196, 1. ]])相关矩阵 C 可对任意 n 条输入序列 S₁, ..., Sₙ 计算Cᵢⱼ 是 Sᵢ 与 Sⱼ 的相关性对角线元素恒为 1即 Sᵢ 的自相关。本例中 0.53 表明体重与身高存在一定相关性也可绘制散点图直观观察Notebook 还用一个邪恶棒球公司按身高发薪水的玩具示例演示相关性的性质线性关系下相关性接近 1引入sin等非线性后相关性略降但仍较高再叠加随机噪声后相关性进一步降低。最后直接对含缺失值nan的Weight列计算np.corrcoef会得到nan必须先用ffill()填补缺失值才能计算——这充分说明了数据准备与清洗的重要性本课程第 08 课将深入讲解。实战挑战与课后作业 挑战使用 Notebook 中的示例代码检验以下假设一垒手比二垒手年龄更大一垒手比三垒手更高游击手Shortstop比二垒手更高。课后作业assignment.md——小型糖尿病研究使用来自 NCSU 统计系的小型糖尿病患者数据集data/diabetes.tsv在 assignment.ipynb 中完成以下任务计算所有列AGE、SEX、BMI、BP、S1S6、Y的均值与方差按性别绘制 BMI、BP 和 Y 的箱线图分析 AGE、SEX、BMI、Y 的分布形态检验各变量与疾病进展指标 Y 之间的相关性提示相关矩阵最能说明哪些变量存在依赖关系检验糖尿病进展程度在男性和女性之间存在差异这一假设。评估标准Rubric完成全部任务并配以图形与说明为优秀缺少图表或结论解读为合格仅完成均值/方差等基础计算而未从数据得出结论则需改进。总结本课系统学习了均值、方差、众数、四分位数等数据的基本统计特征随机变量的各类分布包括正态分布如何发现不同属性之间的相关性如何运用数学与统计工具验证假设如何根据数据样本为随机变量计算置信区间。概率与统计是一个宏大的领域值得单独开设一门课程。以上内容虽远非穷尽但足以让你在本课程中有一个良好的起点。后续课程如第 2 部分的 Python 数据处理、第 3 部分的数据可视化将在此基础上进一步展开实操。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表