机器学习实用技巧与性能评估
在机器学习领域,要想取得良好的效果,不仅需要掌握基本的算法和模型,还需要了解许多实用的技巧和性能评估方法。下面将详细介绍一些常见的问题及解决方法,以及不同的性能评估指标。
1. 机器学习中的常见问题及解决方法
在实际应用中,机器学习面临着许多挑战,以下是一些常见问题及相应的解决办法。
-
无偏学习的不可能性
:有数学论证支持“没有偏差就没有学习”这一观点,实际情况也确实如此。这意味着在机器学习中,我们需要引入一定的偏差来帮助模型学习。
-
时变类问题
:有时候,底层类的含义依赖于具体的上下文,而这个上下文会随时间变化,这就产生了时变类的问题。处理这类问题需要特殊的算法和策略。
-
不平衡训练集问题
:经典的机器学习技术通常假设训练集中的所有类都有足够的代表性,但实际情况往往并非如此。不平衡训练集是一个常见的问题,解决方法主要有多数类欠采样和少数类过采样。
-
多数类欠采样
:减少多数类样本的数量,使各类样本数量更加平衡。
-
少数类过采样
:增加少数类样本的数量,可以通过复制少数类样本或生成新的样本等方式实现。
-
属性值缺失问题
:在许多训练集中,部分属性值是未知的,这会使某些归纳技术的使用变得复杂。一种解决办法是用给定属性的最频繁值或平均值来代替未知值。
-
属性选择问题
:工程师常常需要选择最合适的属性集,主要有过滤技术和包装技术两种基本方法。
-
过滤技术
:根据属性的统计特征(如信息增益、相关性等)对属性进行排序,选择排名靠前的属性。
-
包装技术
:使用学习算法来评估不同属性子集的性能,选择性能最好的属性子集。
-
多标签领域问题
:在某些领域(如文本分类)中,每个示例可以同时被标记为多个类,这就是多标签领域。通常的解决方法是为每个类诱导一个单独的二元分类器,然后并行使用这些分类器。
-
层次化类问题
:有时类是按层次顺序排列的,在多标签领域中这种情况很常见,而且层次结构通常是预先已知的。
2. 巩固知识的练习与思考
为了更好地掌握上述知识,可以通过一些练习和思考实验来巩固。
-
练习
- 考虑一个训练集,如何用最频繁值替换缺失值(用问号表示),以及如何使用决策树来实现这一目的。
- 替换缺失值后,找出提供最高信息增益的两个属性。
| 示例 | 形状 | 外壳大小 | 外壳阴影 | 馅料大小 | 馅料阴影 | 类别 |
|---|---|---|---|---|---|---|
| ex1 | 圆形 | 厚 | 灰色 | 厚 | 深色 | pos |
| ex2 | 圆形 | 厚 | 白色 | 厚 | 深色 | pos |
| ex3 | 三角形 | 厚 | 深色 | ? | 灰色 | pos |
| ex4 | 圆形 | 薄 | 白色 | 薄 | ? | pos |
| ex5 | 正方形 | 厚 | 深色 | 薄 | 白色 | pos |
| ex6 | 圆形 | 厚 | 白色 | 薄 | 深色 | pos |
| ex7 | 圆形 | 厚 | 灰色 | 厚 | 白色 | neg |
| ex8 | 正方形 | 厚 | 白色 | 厚 | 灰色 | neg |
| ex9 | 三角形 | 薄 | 灰色 | 薄 | 深色 | neg |
| ex10 | 圆形 | 厚 | 深色 | 厚 | 白色 | neg |
| ex11 | 正方形 | 厚 | 白色 | 厚 | 深色 | neg |
| ex12 | 三角形 | ? | 白色 | 厚 | 灰色 | neg |
-
思考实验
- 区分由错误偏差(表示性或程序性)导致的错误和由训练数据方差导致的错误,并设计一个实验程序,以了解在给定领域中,这两种来源分别能解释多少总体错误率。
- 解释为什么提升算法对基于方差的错误相对鲁棒,以及非均匀提升为什么能减少基于偏差的错误。
- 假设在一个不平衡的两类领域中使用贝叶斯分类器,该分类器是否会像最近邻方法那样对这种情况敏感?给出具体的论证,并建议一个实验验证方法。
- 不平衡训练集问题在两类领域中已经有了一定的探讨,那么在多类领域中,这个问题会如何泛化?举例说明在多类领域中,不平衡类何时是问题,何时不是问题。
3. 计算机作业
通过编写计算机程序可以进一步加深对知识的理解和应用。
- 编写一个计算机程序,输入一个包含许多缺失属性值的训练集,输出一个改进后的训练集,其中离散属性的缺失值用最频繁值替换,连续属性的缺失值用平均值替换。同时,实现一个程序来实验确定这种缺失值替换对从该数据诱导的决策树性能是有帮助还是有损害。
- 选择一些公共领域的数据(如UCI存储库中的数据),确保该领域至少有一个二元属性,并假设这个二元属性代表一个上下文。将训练数据按二元属性的不同值分为两个子集,为每个子集诱导相应的上下文相关分类器。假设在任何时候都能明确使用哪个分类器,比较这两个分类器的平均性能与从原始训练集诱导的“通用”分类器的性能。
4. 性能评估的重要性
在机器学习中,性能评估是一个关键环节。传统观点认为,对诱导的分类器进行性能评估很简单,只需将其应用于已知类别的示例集,然后统计分类器犯的错误数量。但实际上,错误率往往不能全面反映分类器的性能,在某些情况下甚至会产生误导。因此,工程师需要了解其他评估标准,以便选择最能捕捉感兴趣行为方面的分类器。
5. 基本性能标准
为了准确评估分类器的性能,我们需要了解一些基本的性能标准。
-
正确与错误分类
:在测试一个分类器时,对于已知真实类别的示例,会出现四种不同的结果。
-
真正例(True Positive,NTP)
:示例为正类,分类器正确识别为正类。
-
真反例(True Negative,NTN)
:示例为反类,分类器正确识别为反类。
-
假反例(False Negative,NFN)
:示例为正类,但分类器将其标记为反类。
-
假正例(False Positive,NFP)
:示例为反类,但分类器将其标记为正类。
这些结果的数量会用于后续的性能标准计算,它们之间的关系可以用以下表格表示:
| 真实标签 \ 分类器返回标签 | pos | neg |
|---|---|---|
| pos | NTP | NFN |
| neg | NFP | NTN |
-
错误率和分类准确率
- 错误率(Error Rate,E) :分类器在给定示例集上的错误频率,计算公式为:$E = \frac{NFP + NFN}{NFP + NFN + NTP + NTN}$。
- 分类准确率(Classification Accuracy,Acc) :分类器在给定示例集上的正确分类频率,计算公式为:$Acc = \frac{NTP + NTN}{NFP + NFN + NTP + NTN}$,且$Acc = 1 - E$。
-
拒绝分类示例 :在某些情况下,当支持获胜类的证据不够强时,分类器应该被允许拒绝分类示例。这是因为在一些领域中,错误分类的代价可能远高于不进行分类的代价。
-
实现方法
:在不同类型的分类器中,实现拒绝分类的方法有所不同。
- k - NN分类器 :可以定义一个阈值,当支持正类和反类的邻居数量差异小于该阈值时,拒绝分类。例如,在7 - NN分类器中,如果四个邻居支持正类,三个邻居支持反类,这种情况可以认为“难以判断”,拒绝分类。
- 贝叶斯分类器 :如果两个最受支持类的概率差异小于用户指定的最小值,则拒绝分类。
- 神经网络 :比较相应输出神经元返回的信号,如果没有明显的获胜者,则拒绝分类。
- 决策树 :实现拒绝机制相对不那么直接,可能需要一些“额外的技巧”。
- 拒绝分类的优缺点 :偶尔拒绝分类示例可以降低错误率,但如果过度拒绝,分类器会变得不实用。这两者之间的权衡取决于具体的应用场景。可以用以下流程图来表示拒绝率和错误率之间的关系:
-
实现方法
:在不同类型的分类器中,实现拒绝分类的方法有所不同。
graph LR
A[拒绝率增加] --> B[错误率降低]
B --> C{是否所有示例都被拒绝}
C -- 是 --> D[错误率为0,但分类器不实用]
C -- 否 --> E[继续调整拒绝率]
通过以上内容,我们对机器学习中的常见问题、解决方法以及性能评估有了更深入的了解。在实际应用中,我们需要根据具体情况选择合适的方法和评估指标,以提高机器学习模型的性能。后续我们还将进一步探讨其他性能评估指标,如精确率和召回率等。
机器学习实用技巧与性能评估
6. 精确率和召回率
在某些应用场景中,负例的数量远远超过正例,此时错误率和分类准确率往往无法合理地反映分类器的实际效用。在这类领域中,我们需要一些聚焦于重要但样本数量较少的类别的评估标准,精确率和召回率就是这样的指标。
-
精确率(Precision) :指的是分类器标记为正例的所有示例中,真正例(NTP)所占的百分比。计算公式如下:
[Pr = \frac{NTP}{NTP + NFP}]
从另一个角度理解,精确率就是分类器将一个示例标记为正例时,判断正确的概率。 -
召回率(Recall) :表示分类器正确识别出正例的概率。其计算方式是用真正例的数量(NTP)除以给定集合中正例的总数(NTP + NFN),公式如下:
[Re = \frac{NTP}{NTP + NFN}]
可以看到,精确率和召回率的公式仅在分母上有所不同。精确率体现的是分类器标记为正例的示例中真正例的频率,而召回率则是所有正例中被正确识别出的真正例的频率。
下面通过一个简单的表格示例来说明这两个指标的实际表现:
| 分类器返回标签 \ 真实标签 | pos | neg |
|---|---|---|
| pos | 20 | 30 |
| neg | 50 | 900 |
根据上述表格数据,我们可以计算出精确率、召回率和分类准确率:
- 精确率:(Pr = \frac{20}{20 + 30} = 0.40)
- 召回率:(Re = \frac{20}{20 + 50} = 0.29)
- 分类准确率:(Acc = \frac{20 + 900}{20 + 30 + 50 + 900} = 0.92)
假设工程师对分类器的内部参数进行了调整,调整后的结果如下:
| 分类器返回标签 \ 真实标签 | pos | neg |
|---|---|---|
| pos | 30 | 20 |
| neg | 70 | 880 |
再次计算各项指标:
- 精确率:(Pr = \frac{30}{30 + 20} = 0.60)
- 召回率:(Re = \frac{30}{30 + 70} = 0.30)
- 分类准确率:(Acc = \frac{30 + 880}{30 + 20 + 70 + 880} = 0.91)
从上述计算结果可以看出,精确率有了显著提高,而召回率基本没有变化,分类准确率甚至略有下降。
-
精确率和召回率的重要性 :在不同的领域中,精确率和召回率的重要性有所不同。
- 高精确率重要的领域 :例如在电子商务网站的推荐系统中,工程师希望推荐系统具有较高的精确率。当顾客购买商品时,推荐系统会给出相关推荐,如果推荐的商品能让顾客满意,顾客才会继续关注推荐信息。而召回率在这种情况下相对不那么重要,因为网站的推荐列表通常是有限的,系统不需要识别出顾客可能喜欢的所有商品。
- 高召回率重要的领域 :在医疗诊断领域,召回率更为重要。对于患有某种疾病的患者,正确诊断为患病代表真正例,而未被诊断出患病则是假反例,医生通常希望尽量减少假反例的数量。根据召回率的计算公式,假反例数量减少会使召回率提高。
-
ROC曲线 :在许多分类器中,调整某些参数可以改变假正例(NFP)和假反例(NFN)的数量,从而在一定程度上影响分类器的性能。例如在k - NN分类器中,工程师可以要求除非有非常强的证据支持正类标签,否则将示例标记为反类。这样可以减少假正例的数量,但通常会导致假反例数量增加。通过调整参数,可以在精确率和召回率之间进行权衡,以满足不同领域的需求。这种权衡关系可以用ROC曲线来表示,以下是一个简单的mermaid流程图示例:
graph LR
A[调整参数] --> B{提高精确率还是召回率}
B -- 提高精确率 --> C[减少NFP,可能增加NFN]
B -- 提高召回率 --> D[减少NFN,可能增加NFP]
C --> E[评估精确率和召回率]
D --> E
E --> F{是否满足需求}
F -- 是 --> G[确定参数]
F -- 否 --> A
7. 总结
在机器学习的实际应用中,我们会遇到各种各样的问题,如不平衡训练集、属性值缺失、属性选择等。针对这些问题,我们可以采用多数类欠采样、少数类过采样、用最频繁值或平均值替换缺失值、过滤技术和包装技术等方法来解决。
同时,性能评估是机器学习中不可或缺的环节。错误率和分类准确率虽然是基本的评估指标,但在某些情况下不能全面反映分类器的性能。精确率和召回率等指标在处理不平衡类问题时更为有效,工程师需要根据具体的应用场景选择合适的评估标准。在实际操作中,我们可以通过编写计算机程序、进行练习和思考实验等方式来加深对这些知识的理解和应用,从而提高机器学习模型的性能。
总之,机器学习是一个复杂而又充满挑战的领域,我们需要不断学习和实践,才能更好地应对各种问题,实现更高效、更准确的分类和预测。
超级会员免费看
1万+

被折叠的 条评论
为什么被折叠?



