本文主要是介绍YOLO缺陷检测学习笔记(3),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- PCA主成分分析
- PCA的核心思想
- PCA的步骤
- PCA降维后的数据表达
- 示例数据
- Step 1:标准化数据
- Step 2:计算协方差矩阵
- Step 3:计算协方差矩阵的特征值和特征向量
- Step 4:选择主成分
- Step 5:将数据映射到主成分
- 总结
- PCA的应用
- PCA的局限性
- AUC和ROC
- 1. ROC 曲线
- 2. AUC
- 随机森林
- 1. **随机森林的基本概念**
- 2. **随机森林的优点**
- 3. **随机森林的缺点**
- 4. **随机森林的关键参数**
- 5. **随机森林的应用场景**
- 6. **随机森林在 sklearn 中的使用示例**(重点)
- 解释:
- 7. **特征重要性**
- 边界跟踪法
- 原理
- 常见步骤
- 示例
- 1. 二值化图像:
- 2. 起始点:
- 3. 追踪边界:
- 4. 结果:
- 格雷厄姆扫描法
- 算法步骤
- 格雷厄姆扫描法的核心概念
- 算法复杂度
- 示例运行结果:
- 总结
- 代价敏感
- 代价敏感分类
- 代价矩阵
- 代价敏感学习的主要方法
- 示例
- 代价敏感学习的应用
- 总结
PCA主成分分析
PCA(Principal Component Analysis,主成分分析)是一种用于降维的统计技术,主要用于高维数据的特征提取、数据压缩以及去噪。PCA通过将原始数据投影到一个新的正交坐标系上,以最大限度地保留数据的方差信息,并简化数据的维度。
PCA的核心思想
PCA的主要目标是通过线性变换,将数据从原始的高维空间映射到一个新的低维空间,同时保持数据之间的最大方差,使得信息损失最小。具体来说,PCA希望找到一组互相正交的主成分(Principal Components, PCs),这些主成分代表原始数据中的最重要的方向,并且每个主成分都可以解释数据的方差。
PCA的步骤
以下是执行PCA的主要步骤:
-
标准化数据:
- 为了确保所有特征在同一量级上,首先需要将原始数据进行标准化处理,即让每个特征具有均值为0,方差为1的标准化形式。
标准化公式为:
z = x − μ σ z = \frac{x - \mu}{\sigma} z=σx−μ
其中, x x x 是原始数据, μ \mu μ 是特征的均值, σ \sigma σ 是特征的标准差。 -
计算协方差矩阵:
- 对标准化后的数据计算其协方差矩阵。协方差矩阵反映了数据中各个特征之间的线性关系。
对于 n n n 维数据,协方差矩阵是 n × n n \times n n×n 的对称矩阵,表示特征之间的协方差:
C = 1 m − 1 ∑ i = 1 m ( X i − X ˉ ) ( X i − X ˉ ) T C = \frac{1}{m-1} \sum_{i=1}^{m} (X_i - \bar{X})(X_i - \bar{X})^T C=m−11i=1∑m(Xi−Xˉ)(Xi−Xˉ)T -
计算协方差矩阵的特征值和特征向量:
- 求解协方差矩阵的特征值(eigenvalue)和特征向量(eigenvector)。这些特征向量就是主成分的方向,特征值反映了每个特征向量所解释的数据方差的大小。
-
选择前k个特征向量:
- 按照特征值的大小对特征向量进行排序,选择特征值较大的前 k k k 个特征向量,作为新空间的基底。
-
将数据映射到新的空间:
- 用前 k k k 个特征向量将原始数据投影到新的低维空间,从而实现降维。
PCA降维后的数据表达
设原始数据矩阵为 X ∈ R m × n X \in \mathbb{R}^{m \times n} X∈Rm×n,其中 m m m 是样本数, n n n 是特征维度。通过PCA降维,选择了前 k k k 个特征向量,那么降维后的数据矩阵 Z ∈ R m × k Z \in \mathbb{R}^{m \times k} Z∈Rm×k 可以表示为:
Z = X W Z = XW Z=XW
其中, W ∈ R n × k W \in \mathbb{R}^{n \times k} W∈Rn×k 是由前 k k k 个特征向量组成的矩阵。
为了更好地解释PCA的过程,我们通过一个详细的例子来演示如何从二维数据中提取出主成分并进行降维。我们将逐步应用PCA的五个主要步骤来处理数据。
示例数据
其实只要看懂以下例子会用差不多就够了,同理,更高维的例子只要取最大的几个主成分即可。
Step 1:标准化数据
首先,我们需要对数据进行标准化,确保不同特征处于相同的尺度上。标准化公式为:
z = x − μ σ z = \frac{x - \mu}{\sigma} z=σx−μ
其中, x x x 是数据值, μ \mu μ 是该特征的均值, σ \sigma σ 是标准差。
我们先计算 x 1 x_1 x1 和 x 2 x_2 x2 的均值和标准差:
μ x 1 = 2.5 + 0.5 + 2.2 + 1.9 + 3.1 + 2.3 + 2.0 + 1.0 + 1.5 + 1.1 10 = 1.81 \mu_{x_1} = \frac{2.5 + 0.5 + 2.2 + 1.9 + 3.1 + 2.3 + 2.0 + 1.0 + 1.5 + 1.1}{10} = 1.81 μx1=102.5+0.5+2.2+1.9+3.1+2.3+2.0+1.0+1.5+1.1=1.81
μ x 2 = 2.4 + 0.7 + 2.9 + 2.2 + 3.0 + 2.7 + 1.6 + 1.1 + 1.6 + 0.9 10 = 2.0 \mu_{x_2} = \frac{2.4 + 0.7 + 2.9 + 2.2 + 3.0 + 2.7 + 1.6 + 1.1 + 1.6 + 0.9}{10} = 2.0 μx2=102.4+0.7+2.9+2.2+3.0+2.7+1.6+1.1+1.6+0.9=2.0
接下来,我们计算 x 1 x_1 x1 和 x 2 x_2 x2 的标准差:
σ x 1 = ( 2.5 − 1.81 ) 2 + ( 0.5 − 1.81 ) 2 + ⋯ + ( 1.1 − 1.81 ) 2 9 ≈ 0.83 \sigma_{x_1} = \sqrt{\frac{(2.5 - 1.81)^2 + (0.5 - 1.81)^2 + \cdots + (1.1 - 1.81)^2}{9}} \approx 0.83 σx1=9(2.5−1.81)2+(0.5−1.81)2+⋯+(1.1−1.81)2≈0.83
σ x 2 = ( 2.4 − 2.0 ) 2 + ( 0.7 − 2.0 ) 2 + ⋯ + ( 0.9 − 2.0 ) 2 9 ≈ 0.79 \sigma_{x_2} = \sqrt{\frac{(2.4 - 2.0)^2 + (0.7 - 2.0)^2 + \cdots + (0.9 - 2.0)^2}{9}} \approx 0.79 σx2=9(2.4−2.0)2+(0.7−2.0)2+⋯+(0.9−2.0)2≈0.79
标准化后的数据为:
标准化后的 x 1 x_1 x1 | 标准化后的 x 2 x_2 x2 |
---|---|
0.83 | 0.51 |
-1.58 | -1.65 |
0.47 | 1.14 |
0.11 | 0.25 |
1.57 | 1.27 |
0.59 | 0.89 |
0.23 | -0.75 |
-0.98 | -1.14 |
-0.37 | -0.51 |
-0.85 | -1.39 |
Step 2:计算协方差矩阵
标准化后,计算协方差矩阵,描述各特征之间的关系:
协方差矩阵公式为:
C = 1 m − 1 ∑ i = 1 m ( X i − X ˉ ) ( X i − X ˉ ) T C = \frac{1}{m-1} \sum_{i=1}^{m} (X_i - \bar{X})(X_i - \bar{X})^T C=m−11i=1∑m(Xi−Xˉ)(Xi−Xˉ)T
对于二维数据集,协方差矩阵是 2 × 2 2 \times 2 2×2 的矩阵。协方差矩阵的每个元素代表两个特征之间的协方差。
我们计算协方差矩阵:
C = [ Cov ( x 1 , x 1 ) Cov ( x 1 , x 2 ) Cov ( x 2 , x 2 ) Cov ( x 2 , x 1 ) ] C = \begin{bmatrix} \text{Cov}(x_1, x_1) & \text{Cov}(x_1, x_2) \\ \text{Cov}(x_2, x_2) & \text{Cov}(x_2, x_1) \end{bmatrix} C=[Cov(x1,x1)Cov(x2,x2)Cov(x1,x2)Cov(x2,x1)]
经过计算,得到的协方差矩阵为:
C = [ 1.0 0.86 0.86 1.0 ] C = \begin{bmatrix} 1.0 & 0.86 \\ 0.86 & 1.0 \end{bmatrix} C=[1.00.860.861.0]
Step 3:计算协方差矩阵的特征值和特征向量
我们需要求协方差矩阵的特征值和特征向量。特征值反映了主成分解释的数据方差量,特征向量表示主成分的方向。
通过特征值分解,得到特征值和特征向量:
- 特征值: λ 1 = 1.86 \lambda_1 = 1.86 λ1=1.86, λ 2 = 0.14 \lambda_2 = 0.14 λ2=0.14
- 特征向量:
- 对应 λ 1 \lambda_1 λ1 的特征向量是 [ 0.71 , 0.71 ] [0.71, 0.71] [0.71,0.71]
- 对应 λ 2 \lambda_2 λ2 的特征向量是 [ − 0.71 , 0.71 ] [-0.71, 0.71] [−0.71,0.71]
Step 4:选择主成分
根据特征值的大小,我们选择解释方差最大的主成分。在这个例子中, λ 1 = 1.86 \lambda_1 = 1.86 λ1=1.86 最大,对应的特征向量 [ 0.71 , 0.71 ] [0.71, 0.71] [0.71,0.71] 是我们要选择的主成分。
Step 5:将数据映射到主成分
我们将标准化后的数据投影到选定的主成分方向上,即通过矩阵乘法将数据投影到主成分向量上。
投影公式为:
Z = X ⋅ W Z = X \cdot W Z=X⋅W
其中, X X X 是标准化后的数据矩阵, W W W 是选择的特征向量。
通过计算,降维后的一维数据为:
投影值 |
---|
0.94 |
-2.25 |
1.38 |
0.25 |
2.30 |
1.44 |
-0.37 |
-1.48 |
-0.65 |
-1.56 |
这些投影值表示原始二维数据在新的主成分方向上的投影结果。
总结
通过这个例子,我们展示了如何使用PCA将二维数据降维到一维。整个过程包括标准化、计算协方差矩阵、求特征值和特征向量、选择主成分以及将数据投影到主成分上。最终得到的投影数据在新维度上最大程度地保留了原始数据的方差信息,同时实现了降维。
PCA的应用
- 数据降维:在处理高维数据时,PCA可以帮助去除冗余信息,降低数据维度,减少计算复杂度。
- 数据压缩:PCA可以用于图像、视频等数据的压缩,减少存储空间。
- 特征提取:通过PCA提取数据中的重要特征,用于后续的机器学习任务。
- 噪声消除:PCA能去除数据中的噪声成分,保留主要信息。
PCA的局限性
- PCA是一种线性降维方法,对于非线性关系的数据表现不佳。
- 由于PCA依赖数据的方差,容易受到数据中的异常值(outliers)的影响。
AUC和ROC
1. ROC 曲线
ROC 曲线展示了模型在不同阈值下的表现,横轴是 假正率(FPR, False Positive Rate),纵轴是 真正率(TPR, True Positive Rate)。它通过改变决策阈值,绘制出假正率与真正率之间的关系。
-
真正率 (TPR) 或 召回率:
T P R = T P T P + F N TPR = \frac{TP}{TP + FN} TPR=TP+FNTP
表示的是实际为正例的样本中,模型正确分类为正例的比例。 -
假正率 (FPR):
F P R = F P F P + T N FPR = \frac{FP}{FP + TN} FPR=FP+TNFP
表示的是实际为负例的样本中,模型错误分类为正例的比例。
通过调整决策阈值,ROC 曲线展示了在不同假正率下的模型表现。ROC 曲线的点越靠近左上角,假正率越低,真正率越高,表示模型性能越好。
2. AUC
AUC 表示 ROC 曲线下面积的大小(即 “Area Under the Curve”),数值范围在 0 到 1 之间。AUC 越大,模型的性能越好,表示模型区分正负样本的能力越强。
- AUC = 0.5:模型表现和随机猜测差不多,分类能力很弱。
- AUC = 1:模型表现完美,可以完全正确区分所有正负样本。
AUC 直观上反映了模型在随机选择一个正例和一个负例时,正例得分高于负例的概率。因此,AUC 是一个不受类别不平衡影响的衡量标准。
随机森林
随机森林(Random Forest)是一个集成学习算法,主要用于分类和回归任务。它通过构建多个决策树并将它们的结果进行汇总,来提高模型的预测准确性和稳定性。随机森林以其高效性和稳健性,尤其适合处理高维数据和具有缺失值的数据。
1. 随机森林的基本概念
随机森林是由多个决策树组成的集成模型,它结合了袋装法(Bagging)和随机特征选择,从而增强了模型的性能。随机森林的思想可以简单理解为“多个弱学习器联合起来变成强学习器”。
工作流程:
- 从训练数据集中随机采样(有放回的随机抽样,即Bootstrap),构建多个不同的子集。
- 对每个子集训练一个决策树模型。在构建决策树的过程中,每个节点分裂时会随机选择部分特征(而不是使用所有特征)来寻找最佳分裂点,这一过程称为随机特征选择。
- 对于分类任务,通过投票方式汇总各棵决策树的预测结果,选择投票最多的类别作为最终分类结果;对于回归任务,则通过取各棵决策树预测值的均值作为最终结果。
2. 随机森林的优点
- 降低过拟合:由于随机森林结合了多个决策树的结果,单棵树容易过拟合训练数据,而随机森林通过集成多个树的结果有效降低了过拟合的风险。
- 处理高维数据:随机森林能够很好地处理有大量特征的数据,且不需要特征缩放。
- 处理缺失值:它具有一定的鲁棒性,可以处理部分缺失值的数据。
- 自动处理特征选择:通过随机选择部分特征构建树的过程,随机森林天然地具备特征选择的能力,可以帮助识别重要特征。
- 可并行训练:由于每棵决策树的训练互不依赖,随机森林可以并行训练,具有良好的扩展性。
3. 随机森林的缺点
- 训练时间长:由于需要训练多棵决策树,随机森林在大数据集上可能训练时间较长,尤其是当决策树的数量较多时。
- 难以解释:与单棵决策树相比,随机森林的预测结果较难解释,属于黑箱模型。
- 内存消耗大:随机森林模型中的所有树都需要存储,内存消耗较大。
4. 随机森林的关键参数
在使用随机森林时,有几个关键参数需要调节:
-
n_estimators
:决策树的数量。一般来说,树的数量越多,模型的预测性能越好,但同时计算开销也会增加。 -
max_depth
:决策树的最大深度。较深的树可以学习更复杂的模式,但可能导致过拟合;较浅的树则可能导致欠拟合。 -
max_features
:每个决策树分裂节点时可以使用的最大特征数。默认值通常是特征总数的平方根,控制随机特征选择的范围。 -
min_samples_split
和min_samples_leaf
:节点进行分裂的最小样本数和叶节点中的最小样本数,控制树的分裂方式。 -
bootstrap
:是否使用自助法(Bootstrap)进行采样。若为True
,则表示有放回的随机抽样;若为False
,则表示没有放回的随机抽样。
5. 随机森林的应用场景
随机森林广泛应用于各种任务,包括:
- 分类问题:例如疾病诊断、垃圾邮件检测、图像识别等。
- 回归问题:例如房价预测、股票市场预测等。
- 特征选择:由于随机森林天然具备评估特征重要性的能力,可以用于选择对模型预测效果贡献最大的特征。
6. 随机森林在 sklearn 中的使用示例(重点)
最重要的还是看下面的代码和流程,下面是使用 scikit-learn
库中的随机森林分类器进行分类任务的示例代码。
# 导入必要的库
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 定义随机森林模型
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)# 训练模型
rf_model.fit(X_train, y_train)# 进行预测
y_pred = rf_model.predict(X_test)# 评估模型准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"分类准确率:{accuracy}")
解释:
- 加载数据:使用
load_iris()
加载鸢尾花数据集。 - 划分数据:使用
train_test_split()
将数据集分为训练集和测试集。 - 训练模型:通过
RandomForestClassifier
定义随机森林分类器,并训练模型。 - 预测和评估:用测试集进行预测,并使用
accuracy_score()
计算分类的准确率。
7. 特征重要性
随机森林具有评估特征重要性的功能,帮助我们了解哪些特征对模型的预测结果贡献最大。可以使用 feature_importances_
属性来查看特征的重要性。
importances = rf_model.feature_importances_
for i, importance in enumerate(importances):print(f"特征 {i} 的重要性:{importance}")
边界跟踪法(Boundary Following/Tracing Method)是一种用于提取图像中目标轮廓或边界的算法。其基本原理是沿着图像中目标物体的边界进行追踪,直到闭合边界形成。边界跟踪法广泛应用于图像处理、计算机视觉等领域,特别是在二值图像中检测物体的轮廓。
边界跟踪法
原理
边界跟踪法的核心思想是:
- 图像预处理:首先对图像进行二值化,将图像中的目标与背景分离。通常,0表示背景,1表示前景(目标)。
- 起始点选择:找到目标区域的一个边缘像素,作为边界跟踪的起始点。
- 边界追踪:沿着边界逐像素地进行追踪。追踪过程中使用一种邻域搜索策略(通常是8邻域或4邻域),每次寻找下一个边界像素,并继续跟踪,直到回到起始点,形成闭合的边界。
常见步骤
- 图像二值化:通过阈值分割,将图像转换为黑白图像,前景像素设为1,背景像素设为0。
- 边缘检测:寻找边缘像素,通常是值为1并且邻居中有值为0的像素点。
- 追踪过程:从边缘像素开始,沿着边缘逐步移动,采用如“左手法则”或“右手法则”等搜索策略,确保所有的边界点都被找到,并返回到起始点。
- 输出边界:边界跟踪的结果是目标的边界轮廓坐标。
示例
假设我们有一个简单的二值图像,如下:
0 0 0 0 0 0 0
0 1 1 1 0 0 0
0 1 0 1 0 0 0
0 1 1 1 0 0 0
0 0 0 0 0 0 0
这个图像包含一个封闭的目标区域。我们可以应用边界跟踪法来检测这个目标的边界。
1. 二值化图像:
图像已经是二值化的,其中1表示目标,0表示背景。
2. 起始点:
我们可以从左上角的第一个边界像素 (1, 1) 开始追踪。
3. 追踪边界:
按照边界跟踪法,从 (1, 1) 开始,依次追踪到下一个边界点,直到回到起始点。
4. 结果:
边界点的顺序可以是: (1, 1), (1, 2), (1, 3), (2, 3), (3, 3), (3, 2), (3, 1), (2, 1), 回到 (1, 1)。
思路非常直接明白,挺好理解
格雷厄姆扫描法
格雷厄姆扫描法(Graham Scan)是一种用于凸包(Convex Hull)问题的算法。凸包问题是在平面上给定一组点,要求找到这些点中能够构成一个凸多边形的最外层点。这个多边形就是凸包,它的特点是包含所有给定点,且凸包上的任意两点的连线都不会穿过多边形的内部。
格雷厄姆扫描法的时间复杂度为 O ( n log n ) O(n \log n) O(nlogn),主要由排序阶段和扫描阶段决定。它是一种经典的几何算法,广泛应用于计算机图形学、计算几何和地理信息系统等领域。
算法步骤
-
找出最低的点(一般选取 y 坐标最小的点,若有多个点 y 坐标相同,则选择 x 坐标最小的点)。这个点记作 起点 P0。
-
按极角排序:从起点 P0 出发,按与其他点连线的极角(相对于 x 轴的夹角)对所有点进行排序。如果两点的极角相同,则按距离从近到远排序。
-
扫描形成凸包:使用栈保存凸包顶点。遍历所有排序后的点,对于每个新点,检查该点和栈顶的两个点形成的转折方向。如果是右转(即不符合凸包条件),则将栈顶点弹出,直到满足左转为止。然后将新点加入栈中。
-
最终栈中的点就是凸包的顶点。
格雷厄姆扫描法的核心概念
- 极角排序:以起点 P0 为基准,按与其他点形成的极角从小到大排序。这是为了保证遍历时我们是沿着一个单一的方向扫描点。
改成 CSDN 的 Markdown 格式如下:
- 判断转向:对于给定的三点 A、B、C,使用向量叉积来判断它们的转向。如果
A B → × B C → > 0 \overrightarrow{AB} \times \overrightarrow{BC} > 0 AB×BC>0
则表示是左转,这是我们需要的方向;如果
A B → × B C → ≤ 0 \overrightarrow{AB} \times \overrightarrow{BC} \leq 0 AB×BC≤0
则表示是右转,应当弹出栈顶点。
算法复杂度
- 排序阶段:由于需要对所有点按极角排序,这一步的时间复杂度是 O ( n log n ) O(n \log n) O(nlogn)。
- 扫描阶段:遍历每个点进行凸包构建,时间复杂度为 O ( n ) O(n) O(n)。
因此,格雷厄姆扫描法的整体时间复杂度是 O ( n log n ) O(n \log n) O(nlogn),其中 n n n 是点的个数。
示例运行结果:
输入的点集:
(0, 3), (2, 3), (1, 1), (2, 1), (3, 0), (0, 0), (3, 3)
输出的凸包顶点顺序可能为:
(0, 0), (3, 0), (3, 3), (0, 3)
这些点形成了一个包含所有其他点的凸多边形。
总结
格雷厄姆扫描法是一种高效的凸包算法,通过将点按极角排序,再利用扫描和栈操作来构建凸包。它适用于二维平面上的点集,在计算几何学中有广泛应用。
代价敏感
代价敏感(Cost-Sensitive)是一种在机器学习中处理分类问题的方式,关注的是错误分类的代价。通常在标准分类任务中,不同类型的错误(例如将正类预测为负类或将负类预测为正类)被认为具有相同的代价。但在现实应用中,不同的错误可能会带来不同的后果,这就是代价敏感学习需要处理的问题。
代价敏感分类
在传统分类任务中,模型目标是最小化错误分类的数量,不区分不同错误的严重性。而代价敏感分类通过引入代价矩阵,明确不同类型的分类错误带来的代价差异,进而让模型在训练和预测过程中考虑这些差异。
代价矩阵
代价矩阵是代价敏感分类的核心。假设有两个类别 C 1 C_1 C1 和 C 2 C_2 C2,代价矩阵定义如下:
实际 C 1 C_1 C1 | 实际 C 2 C_2 C2 | |
---|---|---|
预测 C 1 C_1 C1 | 0 0 0 | C o s t ( C 1 → C 2 ) Cost(C_1 \to C_2) Cost(C1→C2) |
预测 C 2 C_2 C2 | C o s t ( C 2 → C 1 ) Cost(C_2 \to C_1) Cost(C2→C1) | 0 0 0 |
- C o s t ( C 1 → C 2 ) Cost(C_1 \to C_2) Cost(C1→C2):表示实际为 C 1 C_1 C1,但被预测为 C 2 C_2 C2 时的代价。
- C o s t ( C 2 → C 1 ) Cost(C_2 \to C_1) Cost(C2→C1):表示实际为 C 2 C_2 C2,但被预测为 C 1 C_1 C1 时的代价。
例如,在医疗诊断中,误将患病(正类)预测为健康(负类)的代价可能远高于将健康预测为患病的代价。因此,代价矩阵不再是对称的,这要求分类器在优化时更多考虑那些高代价的错误类型。
代价敏感学习的主要方法
-
代价敏感调整后的算法:
- 针对已有的分类算法进行调整,直接在训练过程中引入代价的权重。比如在决策树、支持向量机等模型中,修改目标函数使其最小化代价敏感的误分类损失,而不是单纯的误分类率。
-
代价敏感的再采样方法:
- 通过改变数据集的分布来反映不同类别的分类代价。例如,针对高代价的类别,增加该类别的样本权重或过采样,低代价的类别则进行欠采样。这种方法的代表是SMOTE(Synthetic Minority Over-sampling Technique)。
-
阈值移动法:
- 在给定的概率预测基础上,调整分类器的决策阈值以反映不同错误分类的代价。例如,通常二元分类的决策阈值是 0.5,但可以根据代价矩阵调整该阈值,以降低高代价的错误。
示例
假设我们有一个简单的二元分类任务,类别 C 1 C_1 C1 表示 “不患病”,类别 C 2 C_2 C2 表示 “患病”。我们知道将患病预测为不患病(假阴性)的代价远高于将不患病预测为患病(假阳性)的代价。因此,假设代价矩阵如下:
实际不患病 ( C 1 C_1 C1) | 实际患病 ( C 2 C_2 C2) | |
---|---|---|
预测不患病 ( C 1 C_1 C1) | 0 0 0 | 10 10 10 |
预测患病 ( C 2 C_2 C2) | 1 1 1 | 0 0 0 |
这里,假阴性的代价是 10 10 10,假阳性的代价是 1 1 1。
在这种情况下,分类器将更倾向于预测成患病( C 2 C_2 C2),即便牺牲一些精度,也要避免高代价的假阴性。
代价敏感学习的应用
- 医疗诊断:误诊可能带来严重后果,因此不同错误分类的代价显然不同。
- 金融欺诈检测:错过一次欺诈(假阴性)的代价可能远高于错报一次正常交易(假阳性)。
- 网络安全:将正常行为错误地标记为攻击的代价较低,而将攻击误标为正常行为的代价很高。
总结
代价敏感学习通过引入代价矩阵,将不同错误分类的代价差异纳入到分类模型中。这样可以有效应对在实际应用中不同错误的不同影响,使得模型在分类时更加精确地权衡代价。
确实挺难的,一点点学起。GPT真是个好东西。
这篇关于YOLO缺陷检测学习笔记(3)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!