Hoshiᅟᅠ     

Hoshiᅟᅠ     

文章目录

统计学基础:揭开机器学习的数学面纱


前言

在机器学习的学习旅程中,统计学作为支撑理论之一,是理解数据与模型之间关系的关键。无论是在数据分析、模型评估还是假设检验中,统计学都有着举足轻重的作用。在之前的博客中,我们已经介绍了线性代数概率论的基础,这些都为进一步的学习奠定了基础。今天,我们将深入讲解统计学基础,特别是在机器学习中的应用。

如果你是机器学习的初学者,或者希望加强自己在统计学方面的基础知识,今天的内容将帮助你理解一些核心概念,并为后续更复杂的学习打下坚实的基础。


一、统计学的核心概念

1.1 描述统计

1.1.1 集中趋势的测量

集中趋势描述了数据集中在哪里,它的核心概念包括:

  • 均值(Mean):数据的平均值,常用于描述整体趋势。计算公式为:
    μ = 1 n ∑ i = 1 n x i \mu = \frac{1}{n} \sum_{i=1}^{n} x_i μ=n1i=1nxi
    其中, x i x_i xi 是数据点, n n n 是数据的数量。

  • 中位数(Median):数据按大小排序后,位于中间位置的值。对于奇数个数据,中位数是中间的值;对于偶数个数据,中位数是中间两个数的平均值。

  • 众数(Mode):数据中出现次数最多的数值。

1.1.2 离散程度的测量

离散程度描述了数据的波动范围,常用的指标有:

  • 方差(Variance):衡量数据点偏离均值的程度。计算公式为:
    σ 2 = 1 n ∑ i = 1 n ( x i − μ ) 2 \sigma^2 = \frac{1}{n} \sum_{i=1}^{n} (x_i - \mu)^2 σ2=n1i=1n(xiμ)2

  • 标准差(Standard Deviation):方差的平方根,单位与数据一致,能够直观地反映数据的波动性。

1.1.3 数据分布与偏态
  • 正态分布(Normal Distribution):一种对称的钟型曲线,广泛应用于统计学和机器学习中。其概率密度函数为:
    f ( x ) = 1 2 π σ 2 exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) f(x) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp \left( - \frac{(x - \mu)^2}{2\sigma^2} \right) f(x)=2πσ2 1exp(2σ2(xμ)2)

  • 偏度(Skewness):衡量数据分布是否对称。如果数据分布偏向左侧,偏度为负;如果偏向右侧,偏度为正。

1.2 推断统计

1.2.1 样本与总体
  • 总体(Population):所有可能的数据点集合。
  • 样本(Sample):从总体中选取的部分数据。推断统计的目标是从样本推断总体的性质。
1.2.2 假设检验

假设检验是推断统计的核心工具,它用于评估某个假设是否成立。常见的步骤如下:

  • 零假设(Null Hypothesis, H 0 H_0 H0):假设没有效果或差异,通常是我们希望证伪的假设。
  • 备择假设(Alternative Hypothesis, H 1 H_1 H1):假设有显著的效果或差异。

通过计算p值,我们可以判断是否拒绝零假设。如果 p p p值小于显著性水平 α \alpha α(通常为0.05),则拒绝零假设,认为备择假设成立。

1.2.3 置信区间

置信区间(Confidence Interval)是通过样本数据推断总体参数的一种方式。例如,95%的置信区间表示我们有95%的信心认为总体参数位于该区间内。


二、推断统计:从样本到总体的桥梁


2.1 样本与总体

2.1.1 样本与总体的定义

在统计学中,我们经常提到“样本”和“总体”这两个概念。理解它们的区别是推断统计的基础。

  • 总体(Population):指的是感兴趣的整个数据集合。例如,某个城市所有居民的月收入数据就是一个总体。

  • 样本(Sample):是从总体中随机抽取的一部分数据。由于获取总体数据往往成本过高或不现实,因此通过对样本的分析,推断总体的特征成为一种高效的方法。

示例:

假设你想了解一个城市中居民的平均月收入。访问每一位市民是不现实的,因此你随机抽取100名市民的月收入,分析这100个数据点,来估算整个城市的总体平均收入。

2.1.2 样本为何可以推断总体

样本推断总体的前提条件包括:

  1. 随机抽样:样本必须是从总体中随机抽取的,以确保样本能够代表总体。
  2. 样本规模足够:样本规模越大,推断的准确性越高。

通过统计推断,我们可以回答以下问题:

  • 总体均值是多少?
  • 两个总体的均值是否显著不同?
  • 某个变量是否对另一个变量有显著影响?

数学表示:

如果总体均值为 μ \mu μ,样本的均值为 x ˉ \bar{x} xˉ,样本标准差为 s s s,我们用以下近似公式推断:
μ ≈ x ˉ , σ ≈ s \mu \approx \bar{x}, \quad \sigma \approx s μxˉ,σs


2.2 假设检验:检验假设的有效性

2.2.1 零假设与备择假设

假设检验是推断统计中最重要的内容之一。其核心思想是通过样本数据,验证一个假设是否成立。

  • 零假设(Null Hypothesis, H 0 H_0 H0):通常是我们希望证伪的假设,表示没有效果或差异。例如,“药物对病人的治疗没有显著效果”。

  • 备择假设(Alternative Hypothesis, H 1 H_1 H1):表示存在效果或差异。例如,“药物对病人的治疗效果显著”。

2.2.2 p值与显著性水平

p值(p-value)是判断假设是否成立的关键指标:

  • 定义:p值表示在零假设成立的前提下,观察到当前样本数据或更极端数据的概率。
  • 如果 p p p 值小于显著性水平 α \alpha α(通常为0.05),我们拒绝零假设,认为备择假设成立。
  • 如果 p p p 值大于 α \alpha α,我们无法拒绝零假设。

示例:

假设我们想检验某药物对病人是否有治疗效果:

  • 零假设:药物没有效果。
  • 备择假设:药物有显著效果。

通过t检验计算 p p p值,如果 p < 0.05 p<0.05 p<0.05,我们拒绝零假设,认为药物有效。


2.3 置信区间:为参数提供范围

2.3.1 置信区间的定义

置信区间(Confidence Interval, CI)是一个区间估计,用来反映总体参数可能的取值范围。比如,95%的置信区间表示我们有95%的信心认为总体参数位于该区间内。

在机器学习中,置信区间可以帮助我们评估模型参数的稳定性,或者推断某些统计量(如均值、比例等)的范围,从而增强对结果的信心。


2.3.2 置信区间的计算公式

对于总体均值 μ \mu μ 的置信区间,公式为:
x ˉ ± Z α / 2 ⋅ s n \bar{x} \pm Z_{\alpha/2} \cdot \frac{s}{\sqrt{n}} xˉ±Zα/2n s
其中:

  • x ˉ \bar{x} xˉ:样本均值
  • Z α / 2 Z_{\alpha/2} Zα/2:标准正态分布的临界值(例如,95%置信水平时, Z 0.025 = 1.96 Z_{0.025}=1.96 Z0.025=1.96
  • s s s:样本标准差
  • n n n:样本数量

2.3.3 示例:居民收入的置信区间计算

场景描述:某城市随机抽取10名居民的月收入样本如下:

[3000, 3100, 2900, 3200, 3050, 3150, 3250, 2950, 3300, 3100]。

我们希望计算95%置信水平下,该城市居民的平均收入范围。

  1. 已知数据

    • 样本均值 x ˉ = 3100.00 \bar{x} = 3100.00 xˉ=3100.00
    • 样本标准差 s = 129.10 s = 129.10 s=129.10
    • 样本数量 n = 10 n = 10 n=10
    • 置信水平 95 % 95\% 95%,对应 Z 0.025 = 1.96 Z_{0.025} = 1.96 Z0.025=1.96
  2. 计算置信区间
    置信区间 = x ˉ ± Z α / 2 ⋅ s n \text{置信区间} = \bar{x} \pm Z_{\alpha/2} \cdot \frac{s}{\sqrt{n}} 置信区间=xˉ±Zα/2n s
    将已知值代入:
    置信区间 = 3100 ± 1.96 ⋅ 129.10 10 = 3100 ± 80.02 \text{置信区间} = 3100 \pm 1.96 \cdot \frac{129.10}{\sqrt{10}} = 3100 \pm 80.02 置信区间=3100±1.9610 129.10=3100±80.02
    置信区间 = [ 3019.98 , 3180.02 ] \text{置信区间} = [3019.98, 3180.02] 置信区间=[3019.98,3180.02]


2.3.4 Python代码实现

以下是上述计算的Python实现:

import numpy as np
import scipy.stats as stats

# 样本数据
data = [3000, 3100, 2900, 3200, 3050, 3150, 3250, 2950, 3300, 3100]
sample_mean = np.mean(data)
sample_std = np.std(data, ddof=1)  # 样本标准差
n = len(data)

# 置信区间计算
confidence = 0.95
z_value = stats.norm.ppf((1 + confidence) / 2)  # Z临界值
margin_of_error = z_value * (sample_std / np.sqrt(n))  # 误差范围

lower_bound = sample_mean - margin_of_error
upper_bound = sample_mean + margin_of_error

print(f"样本均值: {sample_mean:.2f}")
print(f"样本标准差: {sample_std:.2f}")
print(f"95%置信区间: [{lower_bound:.2f}, {upper_bound:.2f}]")

输出结果

样本均值: 3100.00
样本标准差: 129.10
95%置信区间: [3019.98, 3180.02]

2.3.5 结果解读
  1. 样本均值 x ˉ \bar{x} xˉ3100.00 元
  2. 在95%的置信水平下,该城市居民的平均月收入范围为 [3019.98, 3180.02]。也就是说,我们有95%的信心认为总体平均收入落在此区间。

2.4 常见的假设检验方法

2.4.1 t检验

t检验用于比较两个样本均值是否显著不同。常见的t检验包括:

  • 单样本t检验:与已知总体均值比较。
  • 独立样本t检验:比较两组独立样本均值。
  • 配对样本t检验:比较同一组样本的两次测量结果。
2.4.2 卡方检验

卡方检验用于检验两个分类变量是否相关,或者观察到的频数是否符合预期频数。

示例:卡方检验 Python 代码

from scipy.stats import chi2_contingency

# 构建列联表
data = [[10, 20], [30, 40]]
chi2, p, dof, expected = chi2_contingency(data)

print(f"卡方值: {chi2}, p值: {p}")

三、回归分析:变量关系的建模工具


3.1 简单线性回归

3.1.1 模型假设

简单线性回归研究一个自变量( X X X)与因变量( Y Y Y)之间的线性关系。其数学模型为:
Y = β 0 + β 1 X + ϵ Y = \beta_0 + \beta_1 X + \epsilon Y=β0+β1X+ϵ

  • Y Y Y:因变量(目标变量)
  • X X X:自变量(输入变量)
  • β 0 \beta_0 β0:截距
  • β 1 \beta_1 β1:回归系数(斜率)
  • ϵ \epsilon ϵ:误差项,表示随机噪声

模型假设:

  1. 因变量 Y Y Y 与自变量 X X X 之间存在线性关系。
  2. 误差项 ϵ \epsilon ϵ 服从正态分布,且均值为 0。
  3. 误差项的方差相等,即满足同方差性
  4. 自变量 X X X 是固定的,且没有测量误差。

3.1.2 参数估计

回归系数的估计可以通过最小二乘法(Least Squares Method, LSM)实现。最小二乘法的目标是最小化观测值与预测值的平方误差和:
最小化   ∑ i = 1 n ( y i − ( β 0 + β 1 x i ) ) 2 \text{最小化} \, \sum_{i=1}^{n} (y_i - (\beta_0 + \beta_1 x_i))^2 最小化i=1n(yi(β0+β1xi))2

通过推导,得到 β 0 \beta_0 β0 β 1 \beta_1 β1 的估计公式:
β 1 = ∑ ( x i − x ˉ ) ( y i − y ˉ ) ∑ ( x i − x ˉ ) 2 , β 0 = y ˉ − β 1 x ˉ \beta_1 = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{\sum (x_i - \bar{x})^2}, \quad \beta_0 = \bar{y} - \beta_1 \bar{x} β1=(xixˉ)2(xixˉ)(yiyˉ),β0=yˉβ1xˉ
其中:

  • x ˉ \bar{x} xˉ X X X 的均值
  • y ˉ \bar{y} yˉ Y Y Y 的均值

3.1.3 实例:简单线性回归分析

问题描述:某公司希望通过员工的工作年限预测其年薪。给定以下数据:

我们希望建立一个简单线性回归模型,用于预测年薪。

Python代码实现

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# 数据
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)  # 工作年限
y = np.array([5, 7, 8, 11, 13])  # 年薪

# 建立线性回归模型
model = LinearRegression()
model.fit(X, y)

# 模型参数
beta_0 = model.intercept_  # 截距
beta_1 = model.coef_[0]    # 回归系数

print(f"回归方程: y = {beta_0:.2f} + {beta_1:.2f}x")

# 预测
y_pred = model.predict(X)

# 可视化
plt.scatter(X, y, color='blue', label='实际数据')
plt.plot(X, y_pred, color='red', label='预测回归线')
plt.xlabel('工作年限(年)')
plt.ylabel('年薪(万元)')
plt.legend()
plt.title('简单线性回归示例')
plt.show()

输出结果

y = 2.80 + 2.00x

【机器学习】乱象中寻序,虚实间求真:统计学连接数据与真理的桥梁-LMLPHP

解释:根据回归方程,员工每多工作一年,预计年薪增加 2.10 万元。


3.2 多元线性回归

3.2.1 模型公式

当因变量 Y Y Y 与多个自变量 X 1 , X 2 , … , X k X_1, X_2, \dots, X_k X1,X2,,Xk 存在线性关系时,称为多元线性回归。其模型为:
Y = β 0 + β 1 X 1 + β 2 X 2 + ⋯ + β k X k + ϵ Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_k X_k + \epsilon Y=β0+β1X1+β2X2++βkXk+ϵ

示例:

某房产公司想通过以下变量预测房价:

  1. 面积( X 1 X_1 X1
  2. 卧室数量( X 2 X_2 X2
  3. 距离市中心的距离( X 3 X_3 X3
3.2.2 多元回归的注意点
  1. 多重共线性:当多个自变量高度相关时,会导致回归系数估计不准确。可以通过VIF(方差膨胀因子)检测共线性问题。
  2. 标准化:若不同自变量的量纲差异较大,应先对数据进行标准化处理。

3.2.3 实例:多元回归分析

问题描述:某公司希望通过房屋的面积、卧室数量和距离市中心的距离预测房价。给定以下数据:

我们希望建立一个多元线性回归模型,用于预测房价。

Python代码实现

from sklearn.linear_model import LinearRegression
import numpy as np

# 数据
X = np.array([[100, 2, 10],
              [150, 3, 8],
              [200, 4, 6],
              [250, 5, 4]])  # 特征:面积、卧室数量、距离市中心
y = np.array([120, 200, 300, 400])  # 目标:房价

# 建立多元线性回归模型
model = LinearRegression()
model.fit(X, y)

# 输出回归系数
print(f"截距: {model.intercept_:.2f}")
print(f"回归系数: {model.coef_}")

# 预测
new_house = np.array([[180, 3, 7]])  # 新房子:180平方米,3个卧室,距离市中心7公里
predicted_price = model.predict(new_house)
print(f"预测房价: {predicted_price[0]:.2f} 万元")

运行结果

截距: -72.95
回归系数: [ 1.8762475   0.03752495 -0.0750499 ]
预测房价: 264.36 万元

3.2.4 结果解读
  1. 截距:截距为 -72.95,表示在自变量(面积、卧室数量、距离市中心)均为 0 的情况下,模型理论预测的房价为 -72.95 万元(在实际场景中,这个值没有现实意义,仅是数学上的结果)。

  2. 回归系数

    • 面积每增加 1 平方米,房价增加 1.876 万元
    • 卧室每多增加 1 个,房价增加 0.038 万元(约 380 元)。
    • 距离市中心每远离 1 公里,房价减少 0.075 万元(约 750 元)。
  3. 预测房价

    • 对于面积为 180 平方米,有 3 个卧室,距离市中心 7 公里 的房屋,模型预测房价为 264.36 万元

四、相关性分析:揭示变量间的依赖关系


4.1 什么是相关性

相关性描述了两个变量之间的依赖关系。它可以是正相关负相关,或者无相关

  • 正相关:当一个变量增加时,另一个变量也随之增加。例如,学习时间与考试成绩通常是正相关的。
  • 负相关:当一个变量增加时,另一个变量减少。例如,运动距离与体重可能是负相关的。
  • 无相关:两个变量之间没有规律可循。例如,人的身高与爱好之间通常是无相关的。

4.2 常见的相关性指标

4.2.1 皮尔逊相关系数

皮尔逊相关系数(Pearson Correlation Coefficient)用于衡量两个变量之间的线性关系,范围为 [ − 1 , 1 ] [-1, 1] [1,1]

  • r > 0 r > 0 r>0:正相关
  • r < 0 r < 0 r<0:负相关
  • r = 0 r = 0 r=0:无线性关系

计算公式:
r = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 n ( x i − x ˉ ) 2 ⋅ ∑ i = 1 n ( y i − y ˉ ) 2 r = \frac{\sum_{i=1}^n (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i=1}^n (x_i - \bar{x})^2 \cdot \sum_{i=1}^n (y_i - \bar{y})^2}} r=i=1n(xixˉ)2i=1n(yiyˉ)2 i=1n(xixˉ)(yiyˉ)
其中:

  • x i , y i x_i, y_i xi,yi 是两个变量的样本值
  • x ˉ , y ˉ \bar{x}, \bar{y} xˉ,yˉ 是变量 x x x y y y 的均值

4.2.2 斯皮尔曼等级相关系数

斯皮尔曼等级相关系数(Spearman’s Rank Correlation Coefficient)用于衡量两个变量的单调关系,适用于非线性关系的数据。

计算公式:
ρ = 1 − 6 ∑ d i 2 n ( n 2 − 1 ) \rho = 1 - \frac{6 \sum d_i^2}{n(n^2 - 1)} ρ=1n(n21)6di2
其中:

  • d i d_i di 是每个样本在两个变量中的排名差异
  • n n n 是样本数量

斯皮尔曼相关系数的范围也是 [ − 1 , 1 ] [-1, 1] [1,1]


4.3 实例:变量间的相关性分析

4.3.1 数据描述

某公司希望分析员工的工作年限、工作满意度与年薪之间的关系,数据如下:

我们将使用皮尔逊相关系数和斯皮尔曼相关系数分析这些变量之间的关系。


4.3.2 Python实现相关性分析

代码实现:

import numpy as np
import pandas as pd
from scipy.stats import pearsonr, spearmanr

# 数据
data = {
    '工作年限': [1, 2, 3, 4, 5],
    '工作满意度': [8, 7, 9, 6, 10],
    '年薪': [5, 7, 8, 11, 13]
}
df = pd.DataFrame(data)

# 皮尔逊相关系数
pearson_corr_salary_years, _ = pearsonr(df['工作年限'], df['年薪'])
pearson_corr_salary_satisfaction, _ = pearsonr(df['工作满意度'], df['年薪'])

# 斯皮尔曼相关系数
spearman_corr_salary_years, _ = spearmanr(df['工作年限'], df['年薪'])
spearman_corr_salary_satisfaction, _ = spearmanr(df['工作满意度'], df['年薪'])

# 输出结果
print(f"工作年限与年薪的皮尔逊相关系数: {pearson_corr_salary_years:.2f}")
print(f"工作满意度与年薪的皮尔逊相关系数: {pearson_corr_salary_satisfaction:.2f}")
print(f"工作年限与年薪的斯皮尔曼相关系数: {spearman_corr_salary_years:.2f}")
print(f"工作满意度与年薪的斯皮尔曼相关系数: {spearman_corr_salary_satisfaction:.2f}")

运行结果

工作年限与年薪的皮尔逊相关系数: 0.99
工作满意度与年薪的皮尔逊相关系数: 0.25
工作年限与年薪的斯皮尔曼相关系数: 1.00
工作满意度与年薪的斯皮尔曼相关系数: 0.30

4.3.3 结果解读
  1. 工作年限与年薪

    • 皮尔逊相关系数为 0.99,表明两者存在极强的线性关系,年薪随着工作年限的增长呈现稳定的线性增长。
    • 斯皮尔曼相关系数为 1.00,表示两者具有完全单调关系,即年薪严格随着工作年限增加而增长。
  2. 工作满意度与年薪

    • 皮尔逊相关系数为 0.25,说明两者之间线性关系较弱。
    • 斯皮尔曼相关系数为 0.30,表明工作满意度和年薪之间存在一定程度的单调关系,但这种关系不强。

4.4 相关性分析的注意事项

  1. 相关性不代表因果性

    • 相关性只能说明变量之间的关系强弱,不能确定因果关系。例如,冰淇淋销量与溺水人数可能相关,但它们之间并无直接因果关系。
  2. 线性相关性与非线性相关性

    • 皮尔逊相关系数只能衡量线性关系,非线性关系需要使用斯皮尔曼相关系数或其他方法。
  3. 异常值的影响

    • 异常值会显著影响相关性计算,应在分析前对数据进行预处理。

五、小结与展望

小结

  • 描述性统计让我们理解了数据的集中趋势、离散趋势与分布形态。
  • 推断统计通过抽样与假设检验,为我们提供了从样本推测总体的工具。
  • 回归与相关性分析帮助我们建立了变量间的关系,解释了数据的逻辑。

展望


以上就是关于【机器学习】乱象中寻序,虚实间求真:统计学连接数据与真理的桥梁的内容啦,各位大佬有什么问题欢迎在评论区指正,或者私信我也是可以的啦,您的支持是我创作的最大动力!❤️
【机器学习】乱象中寻序,虚实间求真:统计学连接数据与真理的桥梁-LMLPHP

12-20 05:45