<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>机器学习 on Coder_Studio</title>
        <link>https://iamxurulin.github.io/tags/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/</link>
        <description>Recent content in 机器学习 on Coder_Studio</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <copyright>iamxurulin</copyright>
        <lastBuildDate>Sun, 23 Aug 2026 17:21:42 +0000</lastBuildDate><atom:link href="https://iamxurulin.github.io/tags/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>从 MSE 到交叉熵：一文搞懂损失函数</title>
        <link>https://iamxurulin.github.io/p/%E4%BB%8E-mse-%E5%88%B0%E4%BA%A4%E5%8F%89%E7%86%B5%E4%B8%80%E6%96%87%E6%90%9E%E6%87%82%E6%8D%9F%E5%A4%B1%E5%87%BD%E6%95%B0/</link>
        <pubDate>Sun, 21 Jun 2026 11:48:50 +0000</pubDate>
        
        <guid>https://iamxurulin.github.io/p/%E4%BB%8E-mse-%E5%88%B0%E4%BA%A4%E5%8F%89%E7%86%B5%E4%B8%80%E6%96%87%E6%90%9E%E6%87%82%E6%8D%9F%E5%A4%B1%E5%87%BD%E6%95%B0/</guid>
        <description>&lt;h2 id=&#34;什么是损失函数&#34;&gt;什么是损失函数？
&lt;/h2&gt;&lt;p&gt;机器学习模型究竟依靠什么完成&amp;quot;学习&amp;quot;？&lt;/p&gt;
&lt;p&gt;它凭什么判断自身的表现是否达标、又该在哪些方面做出改进？&lt;/p&gt;
&lt;p&gt;我们可以通过一个类比来理解——学生在完成课后作业时，老师会给出一个分数。无论是80分、90分还是不及格，学生都能通过这个分数发现自己哪里掌握得不够牢固，并据此调整后续的学习策略，争取下一次取得更好的成绩。&lt;/p&gt;
&lt;p&gt;机器学习的模型同样具备类似的反馈机制，这个机制的名称就叫——损失函数。&lt;/p&gt;
&lt;p&gt;损失函数在机器学习中占据着比较重要的位置。&lt;/p&gt;
&lt;p&gt;如果无法理解损失函数的工作原理，就很难真正搞清楚模型是如何完成训练的。&lt;/p&gt;
&lt;p&gt;因此，想要真正掌握机器学习的核心原理，损失函数是一个必须深入理解的基础概念。&lt;/p&gt;
&lt;p&gt;从数学角度来讲，损失函数是用于衡量模型预测输出与真实标签之间差异的一种量化方法。&lt;/p&gt;
&lt;p&gt;设想这样一个场景：&lt;/p&gt;
&lt;p&gt;一个气象预报员，预测明天的气温是20℃，而实际观测值是22℃。&lt;/p&gt;
&lt;p&gt;预测值与真实值之间的偏差是多少？&lt;/p&gt;
&lt;p&gt;最直接的计算方式是用 20 减去 22 得到 -2，偏差为2℃。&lt;/p&gt;
&lt;p&gt;但这里出现了一个问题：&lt;/p&gt;
&lt;p&gt;如果有100次预报记录，将正偏差和负偏差直接相加会导致它们相互抵消，最终累加结果可能为零——意味着&amp;quot;零误差&amp;quot;，显然这与现实情况是不符的。&lt;/p&gt;
&lt;p&gt;解决这一问题的方法是对每次偏差进行平方处理，使所有数值都变为正数，然后求取平均值。这就是&amp;quot;均方误差&amp;quot;（Mean Squared Error，简称 MSE）。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/b8159ffdc353d69478560d4f24a14215-7f6ab470.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;由此可见，损失函数的本质是一个&amp;quot;差距量化器&amp;quot;——它明确告诉模型：你的预测出现了偏差，偏差量为多少，需要做出调整。&lt;/p&gt;
&lt;p&gt;然而，这种差距信号如何真正转化为模型的改进能力呢？&lt;/p&gt;
&lt;p&gt;关键在于梯度。&lt;/p&gt;
&lt;p&gt;具体而言，我们可以通过反向传播算法，利用链式法则逐层计算损失函数对各参数的梯度，得到的梯度方向指示了参数应该增大还是减小，梯度的大小则给出了调整的幅度。&lt;/p&gt;
&lt;p&gt;模型根据这些梯度信息更新自身参数，持续缩小与真实值之间的距离。&lt;/p&gt;
&lt;p&gt;这一优化过程被称为梯度下降。&lt;/p&gt;
&lt;p&gt;需要明确的一个核心认知是：&lt;/p&gt;
&lt;p&gt;驱动模型学习的根本动力，来源于损失函数所提供的梯度信号。&lt;/p&gt;
&lt;p&gt;如果没有损失函数，就不会有梯度；&lt;/p&gt;
&lt;p&gt;没有梯度，模型就只能在参数空间中盲目搜索。&lt;/p&gt;
&lt;p&gt;因此，损失函数决定了模型能否有效学习，是整个学习过程的灵魂所在。&lt;/p&gt;
&lt;h2 id=&#34;什么样的损失函数才算合格&#34;&gt;什么样的损失函数才算合格？
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;第一，可导性。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;损失函数最好能够计算梯度，或者在不可导点存在次梯度（Subgradient），从而支持梯度优化算法。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二，单调性。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;模型的预测越接近真实值，损失值应当越小；&lt;/p&gt;
&lt;p&gt;预测偏离真实值越远，损失值应当越大。&lt;/p&gt;
&lt;p&gt;只有满足这一性质，模型才能形成明确的优化方向感，持续向最优解靠近。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三，良好的优化性质。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;理想情况下，损失函数及其对应优化目标具有良好的优化性质，能够帮助模型更稳定地收敛到低损失区域。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第四，计算高效。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在大规模数据集训练场景中，损失函数需要被频繁计算，因此计算效率十分重要。&lt;/p&gt;
&lt;p&gt;在这四项特性中，前两项属于硬性约束，后两项则是理想层面的加分项。&lt;/p&gt;
&lt;h2 id=&#34;具体损失函数分析&#34;&gt;具体损失函数分析
&lt;/h2&gt;&lt;h3 id=&#34;均方误差mse&#34;&gt;均方误差（MSE）
&lt;/h3&gt;&lt;p&gt;MSE 的全称为 Mean Squared Error，逐词拆解：Mean 表示&amp;quot;平均&amp;quot;，Squared 表示&amp;quot;平方&amp;quot;，Error 表示&amp;quot;误差&amp;quot;。&lt;/p&gt;
&lt;p&gt;组合起来的含义即——误差平方的平均值。&lt;/p&gt;
&lt;p&gt;其计算流程分为四个步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;对每个样本分别计算预测值与真实值之间的差值（也称为残差）。&lt;/li&gt;
&lt;li&gt;对每个残差执行平方运算。&lt;/li&gt;
&lt;li&gt;将所有平方后的残差累加求和。&lt;/li&gt;
&lt;li&gt;除以样本总数 N，得到平均值。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;为什么不直接使用残差的绝对值，而一定要选择平方？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一个理由：消除符号干扰。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;假设模型对样本 A 的预测偏高了 5 个单位，对样本 B 的预测偏低了 5 个单位。如果直接将两者相加，5 + (-5) = 0，表面上看起来误差为零，但实际上模型的两次预测都是错误的。&lt;/p&gt;
&lt;p&gt;经过平方运算后，5² = 25，(-5)² = 25，两项均为正数相加，真实误差便无法被掩盖。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二个理由：放大较大误差。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;假设有三个样本的绝对误差分别为 1、2、3。&lt;/p&gt;
&lt;p&gt;在不平方的情况下，误差总和为 6；&lt;/p&gt;
&lt;p&gt;而经过平方后，1 + 4 + 9 = 14，其中误差为 3 的样本贡献了 9，占总损失的比重超过六成。&lt;/p&gt;
&lt;p&gt;这说明平方机制天然地让模型更加重视那些预测严重失准的样本，尽量避免出现&amp;quot;离谱的错误&amp;quot;，这通常与实际需求相一致。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/798c477b3bdaade06840cccaa54ffae4-4350ed7b.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三个理由：求导运算友好。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;平方函数在其定义域内处处可导，导数形式为线性表达式 2x，结构简洁，使得梯度下降算法的运行非常顺畅。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第四个理由：拥有深厚的统计学根基。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在正态分布假设下，MSE 与最大似然估计在数学上是等价的。&lt;/p&gt;
&lt;p&gt;它并非一种拍脑袋想出来的启发式技巧，而是建立在严格的概率论基础之上的。&lt;/p&gt;
&lt;h3 id=&#34;mse-的优势与局限&#34;&gt;MSE 的优势与局限
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;优势：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;计算极为简洁——仅需减法、平方、加法和除法四步运算，即便面对千万级甚至亿级规模的数据也能快速处理。&lt;/p&gt;
&lt;p&gt;在整个定义域内处处可导，梯度形式简洁干净，不存在任何断点或奇点来阻碍优化过程。&lt;/p&gt;
&lt;p&gt;数学性质优良，许多优化算法的理论分析都建立在 MSE 这类凸函数的框架之上。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;局限：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;最突出的短板是对异常值（离群点）极度敏感。&lt;/p&gt;
&lt;p&gt;平方的放大效应意味着一个极端异常值可能主导整个损失函数的值。&lt;/p&gt;
&lt;p&gt;例如假设有 10 个样本的偏差均为 1，另有 1 个样本的偏差为 10。&lt;/p&gt;
&lt;p&gt;前 10 个样本各自贡献 1，合计 10；&lt;/p&gt;
&lt;p&gt;而异常样本贡献了 100，占总损失的约 91%。&lt;/p&gt;
&lt;p&gt;模型因此可能被这一个异常样本带偏方向，从而忽略了大多数正常数据的分布特征。&lt;/p&gt;
&lt;p&gt;另一个问题是量纲失真。&lt;/p&gt;
&lt;p&gt;原始数据如果分布在 0 到 100 之间，MSE 的值域可能膨胀到 0 到 10000，损失值本身的直观含义变得模糊。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;适用场景：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;回归任务的首选方案——凡是预测连续型数值（如房价、气温、销量等），MSE 通常是最自然且最常用的选择。&lt;/p&gt;
&lt;p&gt;但如果数据中存在较多异常值，建议考虑 MAE（平均绝对误差）或 Huber Loss，它们对噪声数据具有更强的鲁棒性。&lt;/p&gt;
&lt;h3 id=&#34;梯度下降的训练循环&#34;&gt;梯度下降的训练循环
&lt;/h3&gt;&lt;p&gt;利用 MSE 的梯度来驱动模型参数更新，每一轮迭代包含以下四个步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;前向传播&lt;/strong&gt;：使用当前参数对输入数据进行预测。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;计算损失&lt;/strong&gt;：通过 MSE 公式量化预测值与真实标签之间的差距。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;反向传播&lt;/strong&gt;：沿计算图从输出层向输入层逐层回溯，依次计算每个参数的梯度，明确每个参数应该朝哪个方向调整、调整的幅度有多大。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;参数更新&lt;/strong&gt;：沿着梯度的反方向对参数值进行微调——梯度为正值时减小参数，为负值时增大参数。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;重复执行上述流程 50 次（或更多轮），模型便会在损失曲面上逐步滑动，不断逼近最优解。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/8ab4d7da54ec8da8613c2469820776a6-762b6751.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;交叉熵分类问题的核心损失函数&#34;&gt;交叉熵：分类问题的核心损失函数
&lt;/h2&gt;&lt;p&gt;接下来介绍第二个重要的损失函数——交叉熵（Cross Entropy），它是分类任务中最常用的损失函数。&lt;/p&gt;
&lt;p&gt;设想这样一个应用场景：&lt;/p&gt;
&lt;p&gt;向模型输入一张图片，要求它判断图片中的动物是猫、狗还是鸟。&lt;/p&gt;
&lt;p&gt;有人可能会认为，模型直接输出一个整数编码即可——0 代表猫，1 代表狗，2 代表鸟，然后取最大值的对应类别就行了。&lt;/p&gt;
&lt;p&gt;这种思路在逻辑上看似合理，但存在一个缺陷：&lt;/p&gt;
&lt;p&gt;模型对自己的预测结果有多大把握？&lt;/p&gt;
&lt;p&gt;这种确定性完全无法从单一整数编码中获知。&lt;/p&gt;
&lt;p&gt;更为合理的方式是让模型输出一个概率向量。&lt;/p&gt;
&lt;p&gt;例如：猫 0.7、狗 0.2、鸟 0.1，三个概率值之和为 1，构成一个完整的概率分布。&lt;/p&gt;
&lt;p&gt;通过这种方式，我们不仅获得了模型的预测结果，还获得了衡量模型&amp;quot;自信程度&amp;quot;的依据。&lt;/p&gt;
&lt;p&gt;在很多实际应用场景中，这种置信度信息至关重要。&lt;/p&gt;
&lt;p&gt;例如医疗影像诊断：&lt;/p&gt;
&lt;p&gt;模型 A 判定为恶性肿瘤，置信度 0.95。&lt;/p&gt;
&lt;p&gt;模型 B 判定为恶性肿瘤，置信度 0.52。&lt;/p&gt;
&lt;p&gt;虽然两者结论一致，但前者的预测可信度明显更高，因此更值得进一步关注。&lt;/p&gt;
&lt;p&gt;那么问题就来了：&lt;/p&gt;
&lt;p&gt;如何衡量模型输出的概率分布与真实标签之间的差异？&lt;/p&gt;
&lt;p&gt;这就是交叉熵函数所要解决的问题。&lt;/p&gt;
&lt;h3 id=&#34;交叉熵到底在计算什么&#34;&gt;交叉熵到底在计算什么？
&lt;/h3&gt;&lt;p&gt;交叉熵的核心思想其实非常简单：&lt;/p&gt;
&lt;p&gt;如果模型把真实答案的概率预测得越高，那么损失就应该越小；&lt;/p&gt;
&lt;p&gt;如果模型把真实答案的概率预测得越低，那么损失就应该越大。&lt;/p&gt;
&lt;p&gt;例如有一个三分类任务：&lt;/p&gt;
&lt;p&gt;真实答案是：&lt;/p&gt;
&lt;p&gt;猫 = 1&lt;br&gt;
狗 = 0&lt;br&gt;
鸟 = 0&lt;/p&gt;
&lt;p&gt;模型 A 的预测结果为：&lt;/p&gt;
&lt;p&gt;猫：0.90&lt;br&gt;
狗：0.05&lt;br&gt;
鸟：0.05&lt;/p&gt;
&lt;p&gt;由于模型给正确类别“猫”分配了 90% 的概率，说明模型非常有把握地预测正确，此时交叉熵损失会非常小。&lt;/p&gt;
&lt;p&gt;而模型 B 的预测结果为：&lt;/p&gt;
&lt;p&gt;猫：0.01&lt;br&gt;
狗：0.98&lt;br&gt;
鸟：0.01&lt;/p&gt;
&lt;p&gt;虽然三个概率之和同样为 1，但模型几乎把全部概率都给了错误类别“狗”。&lt;/p&gt;
&lt;p&gt;这意味着模型不仅预测错误，而且错得非常自信。&lt;/p&gt;
&lt;p&gt;对于这种情况，交叉熵会给予极大的惩罚。&lt;/p&gt;
&lt;p&gt;因此可以把交叉熵理解为一种专门衡量“预测概率质量”的损失函数。&lt;/p&gt;
&lt;p&gt;它不仅关心模型有没有预测正确，更关心模型到底有多大的把握。&lt;/p&gt;
&lt;p&gt;预测正确且越自信，损失越小；&lt;/p&gt;
&lt;p&gt;预测错误且越自信，损失越大。&lt;/p&gt;
&lt;p&gt;正因为这种特性，交叉熵能够为分类模型提供更加清晰有效的优化方向，因此成为分类任务中最主流的损失函数。&lt;/p&gt;
&lt;h3 id=&#34;mse-与交叉熵的核心差异&#34;&gt;MSE 与交叉熵的核心差异
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;维度&lt;/th&gt;
					&lt;th&gt;MSE&lt;/th&gt;
					&lt;th&gt;交叉熵&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;适用任务&lt;/td&gt;
					&lt;td&gt;回归（预测连续值）&lt;/td&gt;
					&lt;td&gt;分类（预测离散类别）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;输出形式&lt;/td&gt;
					&lt;td&gt;实数（如 3.5、-2.1）&lt;/td&gt;
					&lt;td&gt;概率（0~1 之间的值）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;梯度特性&lt;/td&gt;
					&lt;td&gt;梯度受平方项影响较大，对异常敏感&lt;/td&gt;
					&lt;td&gt;梯度与误差成线性关系，传播更平稳&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;收敛行为&lt;/td&gt;
					&lt;td&gt;回归任务上收敛稳定&lt;/td&gt;
					&lt;td&gt;分类任务上收敛更快、更稳定&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/0edda457bfad1be6f15822089d879df6-463a1c78.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;如何选择损失函数&#34;&gt;如何选择损失函数
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;判断任务类型&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果输出为连续数值 → 回归问题，如果输出为类别标签 → 分类问题。&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;strong&gt;回归任务看数据质量&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果数据包含较多异常值 → 选择 MAE 或 Huber Loss&lt;/p&gt;
&lt;p&gt;如果数据较为干净、近似正态分布 → 选择 MSE&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;&lt;strong&gt;分类任务看类别数量&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果仅有两个类别 → 二元交叉熵（Binary Cross Entropy）&lt;/p&gt;
&lt;p&gt;如果两个以上类别 → 多元分类交叉熵（Categorical Cross Entropy）&lt;/p&gt;
&lt;h2 id=&#34;初学者常犯的三个错误&#34;&gt;初学者常犯的三个错误
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;用 MSE 做分类任务。&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这是新手最常犯的错误。&lt;/p&gt;
&lt;p&gt;因为在分类任务中，当分类模型使用 sigmoid 或 softmax 输出概率时，如果再配合 MSE 作为损失函数，梯度在饱和区域会迅速衰减，导致训练速度明显变慢。&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;strong&gt;用交叉熵做回归任务。&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;交叉熵要求输出为合法的概率分布（非负且和为 1），回归任务的输出为任意实数，计算框架通常会直接报错；&lt;/p&gt;
&lt;p&gt;即便绕过了框架检查，梯度也会完全失效，模型无法学到任何有效信息。&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;&lt;strong&gt;只监控训练损失，忽视验证损失。&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;许多初学者在训练过程中仅关注训练集损失持续下降这一现象便感到满意，却忽略了验证集损失可能已经开始反弹——这标志着过拟合正在发生。&lt;/p&gt;
&lt;p&gt;正确的方法是同时监控训练损失和验证损失两条曲线，当验证损失不再下降甚至开始上升时，即使训练损失仍在降低，也应当停止训练或引入正则化手段来抑制过拟合。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>零基础看懂机器学习：不用数学，只要生活经验</title>
        <link>https://iamxurulin.github.io/p/%E9%9B%B6%E5%9F%BA%E7%A1%80%E7%9C%8B%E6%87%82%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E4%B8%8D%E7%94%A8%E6%95%B0%E5%AD%A6%E5%8F%AA%E8%A6%81%E7%94%9F%E6%B4%BB%E7%BB%8F%E9%AA%8C/</link>
        <pubDate>Thu, 04 Jun 2026 21:56:12 +0000</pubDate>
        
        <guid>https://iamxurulin.github.io/p/%E9%9B%B6%E5%9F%BA%E7%A1%80%E7%9C%8B%E6%87%82%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E4%B8%8D%E7%94%A8%E6%95%B0%E5%AD%A6%E5%8F%AA%E8%A6%81%E7%94%9F%E6%B4%BB%E7%BB%8F%E9%AA%8C/</guid>
        <description>&lt;p&gt;小时候，爸爸是怎么教你认动物的？&lt;/p&gt;
&lt;p&gt;爸爸会指着笼子里的家伙告诉你，这是老虎，身上有条纹；&lt;/p&gt;
&lt;p&gt;然后又指着树上的说，那是猴子，尾巴老长。&lt;/p&gt;
&lt;p&gt;看多了以后，下次去动物园，就算看到没见过的品种，你也能猜个八九不离十。&lt;/p&gt;
&lt;p&gt;这就是机器学习的核心思想：&lt;/p&gt;
&lt;p&gt;爸爸给你看的动物是&lt;strong&gt;训练数据&lt;/strong&gt;，他说的名字是&lt;strong&gt;标签&lt;/strong&gt;，你脑子里长出来的判断能力就是&lt;strong&gt;模型&lt;/strong&gt;，你能认出新品那就是&lt;strong&gt;预测&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;所有的学习都得有人教吗？&lt;/p&gt;
&lt;p&gt;当然不是。&lt;/p&gt;
&lt;p&gt;比如你第一次搬新家，打开衣柜，衣服扔得乱七八糟，没人帮你整理。&lt;/p&gt;
&lt;p&gt;你会怎么办？&lt;/p&gt;
&lt;p&gt;你可能会自己琢磨：&lt;/p&gt;
&lt;p&gt;这几件都是厚外套，归一块儿；&lt;/p&gt;
&lt;p&gt;那几件是短袖T恤，放一起；&lt;/p&gt;
&lt;p&gt;这些全是运动裤，也堆一起。&lt;/p&gt;
&lt;p&gt;没人告诉你该怎么分，是你自己看着像的放一堆。&lt;/p&gt;
&lt;p&gt;这就引出了机器学习的两大类别：&lt;strong&gt;监督学习&lt;/strong&gt;和&lt;strong&gt;无监督学习&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;监督学习&lt;/strong&gt;就像爸爸带你逛动物园，有老师有答案，数据带着标签，机器知道对错。&lt;/p&gt;
&lt;p&gt;比如，判断快递包裹是不是易碎品，每个包裹事先都标好了，是易碎还是普通。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;无监督学习&lt;/strong&gt;就像你自己收拾衣柜，没老师没答案，数据没标签，机器自己找规律。&lt;/p&gt;
&lt;p&gt;比如，把看视频的人分成几拨，机器自己发现哪些人爱好相似。&lt;/p&gt;
&lt;p&gt;监督学习是有人教，有标准答案；&lt;/p&gt;
&lt;p&gt;无监督学习是自己悟，没有标准答案。&lt;/p&gt;
&lt;h2 id=&#34;监督学习能干啥&#34;&gt;监督学习能干啥
&lt;/h2&gt;&lt;h3 id=&#34;案例1快递站怎么知道哪个包裹要轻拿轻放&#34;&gt;案例1——快递站怎么知道哪个包裹要轻拿轻放
&lt;/h3&gt;&lt;p&gt;其实是工作人员先收集了几万个包裹，人工标注这个易碎，那个不易碎。&lt;/p&gt;
&lt;p&gt;机器从这些标好的包裹里学习。&lt;/p&gt;
&lt;p&gt;如果箱子上贴着&amp;quot;玻璃&amp;quot;&amp;ldquo;瓷器&amp;quot;这些字，或者包装上有向上箭头的标识，大概率就是易碎件；&lt;/p&gt;
&lt;p&gt;如果发货地是某个工艺品集中地，也要小心。&lt;/p&gt;
&lt;p&gt;学完后，新包裹一到，机器就能自己判断要不要贴&amp;quot;轻放&amp;quot;标签。&lt;/p&gt;
&lt;h3 id=&#34;案例2外卖预估送达时间&#34;&gt;案例2——外卖预估送达时间
&lt;/h3&gt;&lt;p&gt;你点了一份奶茶，距离3公里，中午高峰期，下雨天，骑手手上还有两单，你肯定想知道几点能送到？&lt;/p&gt;
&lt;p&gt;以前是靠站长凭经验估算，但经验也常有偏差。&lt;/p&gt;
&lt;p&gt;机器学习怎么做？它先看历史订单。&lt;/p&gt;
&lt;p&gt;比如：&lt;/p&gt;
&lt;p&gt;上周一，同样3公里、雨天、午高峰，送了35分钟；&lt;/p&gt;
&lt;p&gt;上周三，2公里、晴天、平峰期，送了20分钟……&lt;/p&gt;
&lt;p&gt;学完几千单规律后，你刚下单，它就能预测：这次大概需要38分钟。&lt;/p&gt;
&lt;h2 id=&#34;无监督学习能干啥&#34;&gt;无监督学习能干啥
&lt;/h2&gt;&lt;h3 id=&#34;案例1视频平台用户分群&#34;&gt;案例1——视频平台用户分群
&lt;/h3&gt;&lt;p&gt;假设你是某短视频平台的运营，手里有800万用户的观看记录，点赞记录、停留时长、关注列表都有。&lt;/p&gt;
&lt;p&gt;问题是，这800万人怎么运营？&lt;/p&gt;
&lt;p&gt;你跑一遍无监督算法，机器自动发现，用户居然能分成这么几类：&lt;/p&gt;
&lt;p&gt;第一类，专看搞笑段子，每天刷两小时，属于纯娱乐型；&lt;/p&gt;
&lt;p&gt;第二类，只看知识科普和纪录片，属于学习型；&lt;/p&gt;
&lt;p&gt;第三类，天天看美食和做饭视频，应该是生活爱好者；&lt;/p&gt;
&lt;p&gt;第四类，刷的都是穿搭和美妆，大概率是时尚人群。&lt;/p&gt;
&lt;p&gt;机器自己就把人分好了，不需要你提前说分几类、按什么分。&lt;/p&gt;
&lt;p&gt;然后你就可以给不同人群推不同的内容。&lt;/p&gt;
&lt;h3 id=&#34;案例2音乐app自动建歌单&#34;&gt;案例2——音乐App自动建歌单
&lt;/h3&gt;&lt;p&gt;某音乐软件曲库里有上千万首歌，不可能靠编辑一首首归类。&lt;/p&gt;
&lt;p&gt;这时候用无监督学习，机器自动分析歌曲。&lt;/p&gt;
&lt;p&gt;这一批歌里都有强烈的鼓点和吉他，应该是摇滚；&lt;/p&gt;
&lt;p&gt;那一批都是钢琴和弦乐，节奏舒缓，应该是轻音乐；&lt;/p&gt;
&lt;p&gt;还有一批全是方言说唱，应该是嘻哈类。&lt;/p&gt;
&lt;p&gt;整个过程没人教它什么是摇滚、什么是轻音乐，都是它自己听出来的规律。&lt;/p&gt;
&lt;p&gt;这就是无监督学习的厉害之处，让机器自己从数据里挖模式。&lt;/p&gt;
&lt;h2 id=&#34;怎么做一个机器学习项目&#34;&gt;怎么做一个机器学习项目
&lt;/h2&gt;&lt;h3 id=&#34;数据收集&#34;&gt;数据收集
&lt;/h3&gt;&lt;p&gt;首先，没数据就没机器学习。&lt;/p&gt;
&lt;p&gt;而且，&lt;strong&gt;数据质量比数量更重要&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;假设你想训练一个识别狗的模型，结果你找的照片里，狗全是柯基，那训练出来的模型看到哈士奇就不认识了。&lt;/p&gt;
&lt;p&gt;所以数据得够多、够杂、够有代表性。&lt;/p&gt;
&lt;h3 id=&#34;数据预处理&#34;&gt;数据预处理
&lt;/h3&gt;&lt;p&gt;数据收回来就能直接用吗？&lt;/p&gt;
&lt;p&gt;不能。&lt;/p&gt;
&lt;p&gt;为啥？&lt;/p&gt;
&lt;p&gt;因为真实数据一般都是乱糟糟的。&lt;/p&gt;
&lt;p&gt;什么叫乱糟糟？&lt;/p&gt;
&lt;p&gt;比如：&lt;/p&gt;
&lt;p&gt;外卖订单里有一条记录，配送距离写了0.01公里，这显然不对；&lt;/p&gt;
&lt;p&gt;有的重量单位是千克，有的是斤，得统一；&lt;/p&gt;
&lt;p&gt;有的订单没填楼层信息，这也不行。&lt;/p&gt;
&lt;p&gt;所以这一步要清洗数据，删掉明显瞎填的，处理缺信息的，要么删了，要么补上，把所有数据转成统一的标准。&lt;/p&gt;
&lt;h3 id=&#34;特征工程&#34;&gt;特征工程
&lt;/h3&gt;&lt;p&gt;预测外卖送达时间的时候，哪些信息有用？&lt;/p&gt;
&lt;p&gt;距离有用、天气有用、时段有用，但骑手的手机号有用吗？&lt;/p&gt;
&lt;p&gt;没用，订单编号也没啥用。&lt;/p&gt;
&lt;p&gt;所以咱们得挑出对预测有帮助的信息，扔掉那些没用的。&lt;/p&gt;
&lt;p&gt;这还不够，有时候还得造新特征。&lt;/p&gt;
&lt;p&gt;比如我们有店铺出餐速度和配送距离，能不能组合一下？&lt;/p&gt;
&lt;p&gt;比如&amp;quot;每公里所需时间&amp;quot;这个指标，可能比单独的两个数字更有用，因为它能反映这段路到底堵不堵。&lt;/p&gt;
&lt;h3 id=&#34;训练模型&#34;&gt;训练模型
&lt;/h3&gt;&lt;p&gt;这一步就是让机器开始学。&lt;/p&gt;
&lt;p&gt;你要选个合适的算法，比如线性回归、决策树、随机森林，然后把训练数据喂给它：这是1万单历史数据，你好好学学，看看距离、天气、时段跟配送时间到底啥关系。&lt;/p&gt;
&lt;p&gt;机器就开始疯狂计算，不断调整内部参数，试图找到最好的对应关系。&lt;/p&gt;
&lt;p&gt;这就像学生刷题，刷得越多，理解越深，考试时发挥越好。&lt;/p&gt;
&lt;h3 id=&#34;模型评估&#34;&gt;模型评估
&lt;/h3&gt;&lt;p&gt;模型练完了能直接上线吗？&lt;/p&gt;
&lt;p&gt;不能，得先考试。&lt;/p&gt;
&lt;p&gt;咱们得留一部分数据不给它看，专门用来测它，这叫&lt;strong&gt;测试集&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;如果考得不好怎么办？&lt;/p&gt;
&lt;p&gt;那就回头检查，是不是数据不够？&lt;/p&gt;
&lt;p&gt;是的话再去多收点数据。&lt;/p&gt;
&lt;p&gt;是不是特征没选好？&lt;/p&gt;
&lt;p&gt;是的话重新做特征工程。&lt;/p&gt;
&lt;p&gt;是不是算法不合适？&lt;/p&gt;
&lt;p&gt;是的话换一个试试。&lt;/p&gt;
&lt;p&gt;这就是个不断试错、不断优化的过程。&lt;/p&gt;
&lt;h3 id=&#34;模型部署&#34;&gt;模型部署
&lt;/h3&gt;&lt;p&gt;这一步就是把模型放到真实业务里去跑。&lt;/p&gt;
&lt;p&gt;比如把外卖预估模型接到点餐App里，用户一下单，系统就实时显示&amp;quot;预计38分钟送达&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;但上线不是结束，而是新的开始。&lt;/p&gt;
&lt;p&gt;为什么这么说？&lt;/p&gt;
&lt;p&gt;因为路况在变，今天和去年同时段的路况不一样，如果一直用老模型，预测就不准了。所以要持续盯着模型表现，定期拿新订单数据重新训练，这叫&lt;strong&gt;模型更新&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;什么是特征&#34;&gt;什么是特征？
&lt;/h2&gt;&lt;p&gt;简单说，特征就是描述一件事的各种属性，是模型的输入。&lt;/p&gt;
&lt;p&gt;预测外卖时间时，距离、天气、时段就是特征；&lt;/p&gt;
&lt;p&gt;判断快递时，包装文字、重量、发货地就是特征；&lt;/p&gt;
&lt;p&gt;人脸识别时，眼睛大小、鼻子高低、脸型轮廓就是特征。&lt;/p&gt;
&lt;h3 id=&#34;特征的类型&#34;&gt;特征的类型
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;数值型&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;能用数字表示的，比如年龄25岁、价格35块、温度30度。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;类别型&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;离散的类别。&lt;/p&gt;
&lt;p&gt;比如：&lt;/p&gt;
&lt;p&gt;性别，男、女；&lt;/p&gt;
&lt;p&gt;城市，北京、广州；&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;布尔型&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;是或否。&lt;/p&gt;
&lt;p&gt;比如：&lt;/p&gt;
&lt;p&gt;是否雨天；&lt;/p&gt;
&lt;p&gt;是否VIP；&lt;/p&gt;
&lt;p&gt;是否有电梯；&lt;/p&gt;
&lt;p&gt;其实，布尔型可以看作特殊的类别型。&lt;/p&gt;
&lt;h2 id=&#34;什么是标签&#34;&gt;什么是标签？
&lt;/h2&gt;&lt;p&gt;标签就是咱们想预测的结果，是模型的输出。&lt;/p&gt;
&lt;p&gt;机器学习里：&lt;/p&gt;
&lt;p&gt;预测外卖时间，标签就是&amp;quot;38分钟&amp;quot;；&lt;/p&gt;
&lt;p&gt;判断快递，标签就是&amp;quot;易碎&amp;quot;或&amp;quot;普通&amp;quot;；&lt;/p&gt;
&lt;p&gt;诊断疾病，标签就是&amp;quot;健康&amp;quot;或&amp;quot;生病&amp;quot;；&lt;/p&gt;
&lt;p&gt;需要注意的是，&lt;strong&gt;标签只在监督学习里有&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;什么是模型&#34;&gt;什么是模型？
&lt;/h2&gt;&lt;p&gt;其实它就是一个函数。&lt;/p&gt;
&lt;p&gt;啥函数？&lt;/p&gt;
&lt;p&gt;从特征到标签的映射函数，数学上写成 &lt;strong&gt;y = f(x)&lt;/strong&gt;。x是输入的特征，y是输出的标签，f就是模型这个映射关系。&lt;/p&gt;
&lt;p&gt;模型就像一个送了十年外卖的老骑手，机器学习就是让机器通过大量订单积累这种经验，然后用到新订单上。&lt;/p&gt;
&lt;p&gt;不同的算法就是不同的积累经验的方式。&lt;/p&gt;
&lt;h2 id=&#34;怎么评估模型&#34;&gt;怎么评估模型？
&lt;/h2&gt;&lt;p&gt;评估就是检验模型好不好，但用啥指标，得看任务类型。&lt;/p&gt;
&lt;h3 id=&#34;分类任务&#34;&gt;分类任务
&lt;/h3&gt;&lt;p&gt;比如判断快递是不是易碎，最常用的是&lt;strong&gt;准确率&lt;/strong&gt;，看预测对了多少。&lt;/p&gt;
&lt;p&gt;比如100个包裹，你猜对了95个，准确率就是95%。&lt;/p&gt;
&lt;p&gt;但有时候光看准确率不够。&lt;/p&gt;
&lt;p&gt;比如做疾病筛查，1000个人里只有1个真的有病，模型偷懒，全预测成健康，准确率还有99.9%，但那个真有病的人被漏了，这能行吗？&lt;/p&gt;
&lt;p&gt;所以还得看&lt;strong&gt;召回率&lt;/strong&gt;，真正有病的人里，你找出来了多少？&lt;/p&gt;
&lt;p&gt;这就是为啥需要多种指标一起看。&lt;/p&gt;
&lt;h3 id=&#34;回归任务&#34;&gt;回归任务
&lt;/h3&gt;&lt;p&gt;比如预测外卖时间，常用的是&lt;strong&gt;平均绝对误差（MAE）&lt;/strong&gt;，预测时间和真实时间平均差多少？&lt;/p&gt;
&lt;p&gt;比如：&lt;/p&gt;
&lt;p&gt;预测时间平均误差3分钟，说明还挺靠谱；&lt;/p&gt;
&lt;p&gt;如果平均误差20分钟，那就差太远了。&lt;/p&gt;
&lt;p&gt;还有，&lt;strong&gt;R²系数&lt;/strong&gt;取值通常在0到1之间，越接近1说明模型越好。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
