看懂论文的机器学习基础知识(一)

本文系统地介绍了概率统计的基础概念,包括概率密度函数与概率质量函数的区别,最大似然估计的原理及应用,贝叶斯定理及其在实际问题中的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        虽然南京大学周志华老师的论文已经写得非常浅显易懂了,但是对于只有点概率统计基础的我来说还是有许多地方看不懂,而且概率统计的知识早在几年前学的,现在经常没有用到导致很多概念在见到的时候还是会感觉很模糊,对于阅读论文或者编写代码都有点影响。所以想在此处系统的边学习边分享总结下,让自己以后忘了的时候可以到这篇文章里很快的回忆起来。有错误的地方还请大家指正!

       首先从概率密度函数讲起吧,之前的知识还算能记得,就不说了,呵呵。


一、概率密度函数

          在维基百科上定义的概率密度函数式连续型随机变量的,概率质量函数是离散型随机变量的。

          连续型随机变量概率密度函数是一个描述这个随机变量的输出值,在某个确定的取值点附近的可能性的函数。而随机变量的取值落在某个区域之内的概率则为概率密度函数在这个区域上的积分。当概率密度函数存在的时候,累积分布函数是概率密度函数的积分概率密度函数一般以小写“pdf”(Probability Density Function)标记。

      概率质量函数(probability mass function,简写为pmf)是离散随机变量在各特定取值上的概率。

     概率质量函数概率密度函数不同之处在于:概率质量函数是对离散随机变量定义的,本身代表该值的概率;概率密度函数是对连续随机变量定义的,本身不是概率,只有对连续随机变量的概率密度函数在某区间内进行积分后才是概率。

     假设X是抛硬币的结果,反面取值为0,正面取值为1。则在状态空间{0, 1}(这是一个Bernoulli随机变量)中,X = x的概率是0.5,所以概率质量函数

f_X(x) = \begin{cases}\frac{1}{2}, &x \in \{0, 1\}, \\0, &x \in \mathbb{R}\backslash\{0, 1\}.\end{cases}

     概率质量函数可以定义在任何离散随机变量上,包括常数分布二项分布(包括Bernoulli分布), 反二项分布Poisson分布几何分布以及超几何分布随机变量上.

      最简单的概率密度函数均匀分布的密度函数。对于一个取值在区间 [a, b]上的均匀分布函数 \mathbf{I}_{[a,b]} ,它的概率密度函数:

 f_{\mathbf{I}_{[a,b]} } (x) = \frac{1}{b-a}\mathbf{I}_{[a,b]}

也就是说,当x 不在区间 [a, b]上的时候,函数值等于0,而在区间 [a, b]上的时候,函数值等于\scriptstyle \frac{1}{b-a} 。这个函数并不是完全的连续函数,但是是可积函数。正态分布是重要的概率分布。它的概率密度函数是:

f(x) = {1 \over \sigma\sqrt{2\pi} }\,e^{- {​{(x-\mu )^2 \over 2\sigma^2}}}

随着参数\mu\sigma变化,概率分布也产生变化。(参数即是描述整体特征的一种概率性数字度量,比如说整体平均数,方差,整体比例等。)

    对概率密度函数作傅利叶变换可得特征函数

\Phi_X(j\omega) = \int_{-\infty}^{\infty} f(x)e^{j\omega x}\,dx

特征函数与概率密度函数有一对一的关系。因此知道一个分布的特征函数就等同于知道一个分布的概率密度函数。


二、最大似然估计

     给定一个概率分布D,假定其概率密度函数(连续分布)或概率质量函数(离散分布)为f_D,以及一个分布参数\theta,我们可以从这个分布中抽出一个具有n个值的采样X_1, X_2,\ldots, X_n,通过利用f_D,我们就能计算出其概率

\mathbb{P}(x_1,x_2,\dots,x_n) = f_D(x_1,\dots,x_n \mid \theta)

但是,我们可能不知道\theta的值,尽管我们知道这些采样数据来自于分布D。那么我们如何才能估计出\theta呢?一个自然的想法是从这个分布中抽出一个具有n个值的采样X_1, X_2, ..., X_n,然后用这些采样数据来估计\theta.一旦我们获得X_1, X_2,\ldots, X_n,我们就能从中找到一个关于\theta的估计。最大似然估计会寻找关于\theta的最可能的值(即,在所有可能的\theta取值中,寻找一个值使这个采样的“可能性”最大化)

   要在数学上实现最大似然估计法,我们首先要定义似然函数:

\mbox{lik}(\theta) = f_D(x_1,\dots,x_n \mid \theta)

并且在\theta的所有取值上,使这个函数最大化(一阶导数)。这个使可能性最大的\widehat{\theta}值即被称为\theta最大似然估计

一个离散分布、离散有限参数空间分布的例子:

考虑一个抛硬币的例子。假设这个硬币正面跟反面轻重不同。我们把这个硬币抛80次(即,我们获取一个采样x_1=\mbox{H}, x_2=\mbox{T}, \ldots, x_{80}=\mbox{T}并把正面的次数记下来,正面记为H,反面记为T)。并把抛出一个正面的概率记为p,抛出一个反面的概率记为1-p(因此,这里的p即相当于上边的\theta)。假设我们抛出了49个正面,31个反面,即49次H,31次T。假设这个硬币是我们从一个装了三个硬币的盒子里头取出的。这三个硬币抛出正面的概率分别为p=1/3p=1/2p=2/3.这些硬币没有标记,所以我们无法知道哪个是哪个。使用最大似然估计,通过这些试验数据(即采样数据),我们可以计算出哪个硬币的可能性最大。这个似然函数取以下三个值中的一个:

\begin{matrix}\mathbb{P}(\mbox{H=49, T=31 }\mid p=1/3) & = & \binom{80}{49}(1/3)^{49}(1-1/3)^{31} \approx 0.000 \\&&\\\mathbb{P}(\mbox{H=49, T=31 }\mid p=1/2) & = & \binom{80}{49}(1/2)^{49}(1-1/2)^{31} \approx 0.012 \\&&\\\mathbb{P}(\mbox{H=49, T=31 }\mid p=2/3) & = & \binom{80}{49}(2/3)^{49}(1-2/3)^{31} \approx 0.054 \\\end{matrix}

我们可以看到当\widehat{p}=2/3时,似然函数取得最大值。这就是p的最大似然估计。

现在假设例子1中的盒子中有无数个硬币,对于0\leq p \leq 1中的任何一个p, 都有一个抛出正面概率为p的硬币对应,我们来求其似然函数的最大值:

\begin{matrix}\mbox{lik}(\theta) & = & f_D(\mbox{H=49,T=80-49}\mid p) = \binom{80}{49} p^{49}(1-p)^{31} \\\end{matrix}

其中0\leq p \leq 1. 我们可以使用微分法来求最值。方程两边同时对p微分,并使其为零。

\begin{matrix}0 & = & \frac{d}{dp} \left( \binom{80}{49} p^{49}(1-p)^{31} \right) \\  &   & \\  & \propto & 49p^{48}(1-p)^{31} - 31p^{49}(1-p)^{30} \\  &   & \\  & = & p^{48}(1-p)^{30}\left[ 49(1-p) - 31p \right] \\\end{matrix}
其解为 p=0 p=1 ,以及 p=49/80 .使可能性最大的解显然是 p=49/80 (因为 p=0 p=1 这两个解会使可能性为零)。因此我们说 最大似然估计值 \widehat{p}=49/80 .


三、贝叶斯定理

   贝叶斯定理是关于随机事件A和B的条件概率的一则定理。

P(A|B) = \frac{P(B | A)\, P(A)}{P(B)}

其中P(A|B)是在B发生的情况下A发生的可能性。

在贝叶斯定理中,每个名词都有约定俗成的名称:

  • P(A)是A先验概率之所以称为"先验"是因为它不考虑任何B方面的因素。
  • P(A|B)是已知B发生后A条件概率,也由于得自B的取值而被称作A后验概率
  • P(B|A)是已知A发生后B条件概率,也由于得自A的取值而被称作B后验概率
  • P(B)是B先验概率,也作标准化常量(normalized constant).

  • 一个例子

    贝叶斯定理在检测吸毒者时很有用。假设一个常规的检测结果的敏感度与可靠度均为99%,也就是说,当被检者吸毒时,每次检测呈阳性(+)的概率为99%。而被检者不吸毒时,每次检测呈阴性(-)的概率为99%。从检测结果的概率来看,检测结果是比较准确的,但是贝叶斯定理却可以揭示一个潜在的问题。假设某公司将对其全体雇员进行一次鸦片吸食情况的检测,已知0.5%的雇员吸毒。我们想知道,每位医学检测呈阳性的雇员吸毒的概率有多高?令“D”为雇员吸毒事件,“N”为雇员不吸毒事件,“+”为检测呈阳性事件。可得

    • P(D)代表雇员吸毒的概率,不考虑其他情况,该值为0.005。因为公司的预先统计表明该公司的雇员中有0.5%的人吸食毒品,所以这个值就是D的先验概率
    • P(N)代表雇员不吸毒的概率,显然,该值为0.995,也就是1-P(D)。
    • P(+|D)代表吸毒者阳性检出率,这是一个条件概率,由于阳性检测准确性是99%,因此该值为0.99。
    • P(+|N)代表不吸毒者阳性检出率,也就是出错检测的概率,该值为0.01,因为对于不吸毒者,其检测为阴性的概率为99%,因此,其被误检测成阳性的概率为1-99%。
    • P(+)代表不考虑其他因素的影响的阳性检出率。该值为0.0149或者1.49%。我们可以通过全概率公式计算得到:此概率 = 吸毒者阳性检出率(0.5% x 99% = 0.495%)+ 不吸毒者阳性检出率(99.5% x 1% = 0.995%)。P(+)=0.0149是检测呈阳性的先验概率。用数学公式描述为:
    \begin{align}P(+)=P(+,D)+P(+,N)=P(+|D)P(D)+P(+|N)P(N)\end{align}

    根据上述描述,我们可以计算某人检测呈阳性时确实吸毒的条件概率P(D|+):

    \begin{align}P(D|+) & = \frac{P(+ | D) P(D)}{P(+)} \\& = \frac{P(+ | D) P(D)}{P(+ | D) P(D) + P(+ | N) P(N)} \\& = \frac{0.99 \times 0.005}{0.99 \times 0.005 + 0.01 \times 0.995} \\& = 0.3322.\end{align}

    尽管我们的检测结果可靠性很高,但是只能得出如下结论:如果某人检测呈阳性,那么此人是吸毒的概率只有大约33%,也就是说此人不吸毒的可能性比较大。我们测试的条件(本例中指D,雇员吸毒)越难发生,发生误判的可能性越大。



四、最大后验概率

   最大后验估计可以看作是规则化(regularization)的最大似然估计。由于篇幅有限,见下一篇文章。

     




  

   

<think>嗯,用户想了解如何看懂Python的机器学习项目。首先,我得考虑用户可能的背景。可能是刚开始学习机器学习或者Python,或者已经有些基础但想更深入理解项目结构。我需要从基础开始,分步骤引导他们。 首先,用户可能需要了解Python和机器学习基础知识。比如Python的语法、常用库如NumPy、Pandas,以及机器学习的基本概念。然后,如何阅读项目的代码结构,比如配置文件、数据加载、模型定义等部分。 接下来,用户可能需要知道如何分析数据预处理和特征工程,这部分在机器学习项目中很重要。然后是模型构建,包括选择合适的算法,调整超参数,还有模型训练和评估的流程。 另外,项目中的文档和注释也是关键,用户可能不知道怎么利用这些来理解代码。还有调试和运行项目,常见错误处理,这些实际问题也需要覆盖。 可能需要提到学习资源和实践建议,比如推荐书籍、在线课程,以及参与开源项目的重要性。用户可能希望有具体步骤,所以结构要清晰,分点说明。 还要注意用户可能遇到的困难,比如复杂的代码结构或数学公式,这时候需要建议他们逐步分解,多实践。同时,强调理论结合实践的重要性,避免只看不练。 最后,检查是否有遗漏的部分,比如模型部署或可视化工具的使用,这些也可能对理解项目有帮助。确保回答全面但不过于冗长,用易懂的语言,避免使用太多专业术语,或者在必要时解释清楚。</think>要理解个Python机器学习项目,需要系统性地拆解和分析各个模块。以下是个分步骤的指导框架: --- ### 基础知识储备 1. **Python基础** - 熟悉基本语法(变量/循环/函数/类) - 掌握常用库: - `NumPy`(数组运算) - `Pandas`(数据处理) - `Matplotlib/Seaborn`(可视化) 2. **机器学习基础** - 理解监督学习/非监督学习概念 - 掌握常见算法原理: - 线性回归:$y = w^Tx + b$ - 决策树:$H(X) = -\sum p(x_i)\log p(x_i)$ - 神经网络:$a^{(l)} = \sigma(W^{(l)}a^{(l-1)} + b^{(l)})$ --- ### 二、项目结构解析 典型项目目录示例: ``` project/ ├── config/ # 配置文件 ├── data/ # 原始数据 ├── features/ # 特征工程结果 ├── models/ # 训练好的模型 ├── src/ # 源代码 │ ├── data_loader.py │ ├── model.py │ └── train.py └── requirements.txt ``` --- ### 三、核心代码分析 1. **数据流追踪** ```python # 典型数据处理流程 def load_data(path): df = pd.read_csv(path) df = clean_missing_values(df) # 缺失值处理 X, y = feature_selection(df) # 特征选择 return train_test_split(X, y, test_size=0.2) ``` 2. **模型构建解析** ```python class MLP(nn.Module): def __init__(self): super().__init__() self.layers = nn.Sequential( nn.Linear(784, 256), # 输入层 nn.ReLU(), # 激活函数 nn.Linear(256, 10) # 输出层 ) def forward(self, x): return self.layers(x) ``` --- ### 四、关键调试技巧 1. **维度检查** ```python print(f"数据维度:{X.shape}, 标签维度:{y.shape}") print(f"模型参数数量:{sum(p.numel() for p in model.parameters())}") ``` 2. **梯度监控** ```python # 在PyTorch中检查梯度 for name, param in model.named_parameters(): print(f"{name} grad: {param.grad.norm().item():.4f}") ``` --- ### 五、性能评估方法 常用评估指标: | 任务类型 | 评估指标 | |----------|----------| | 分类 | Accuracy, F1-score, ROC-AUC | | 回归 | MSE, MAE, R² | | 聚类 | Silhouette Score, Davies-Bouldin Index | --- ### 六、学习路线建议 1. **实践路线** ``` 简单项目(鸢尾花分类) → 经典项目(MNIST手写识别) → 工业级项目(推荐系统) ``` 2. **推荐资源** - 理论:《机器学习》(周志华) - 实战:Kaggle竞赛(Titanic, House Prices) - 工具:Scikit-learn文档,PyTorch官方教程 --- ### 七、常见问题定位 遇到报错时优先检查: 1. 数据维度是否匹配(常见shape错误) 2. 梯度是否消失/爆炸(查看参数更新量) 3. 数据泄漏问题(确保训练集未污染测试集) 通过逐步拆解+实践验证,通常可在2-3周内掌握中等复杂度项目的分析能力。建议从复现经典论文代码(如ResNet、Transformer)开始实践。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值