当前位置: 首页 > article >正文

【数据挖掘】可信度

【数据挖掘】可信度

  • 目录:
  • 1. 训练和测试
  • 2. 预测性能评估
  • 3. 数据挖掘方法比较
      • 分类方法
      • 聚类方法
      • 关联规则挖掘方法
      • 异常检测方法
  • 4. 预测概率
  • 5. 损失函数
  • 6. 计算成本
  • 7. 成本敏感分类
  • 8. 提升图(Lift Chart)
      • 作用
      • 示例
  • 9. ROC曲线(Receiver Operating Characteristic Curve)
      • 定义与原理
      • 关键指标
      • 作用
      • 示例
  • 10. 召回率精确率曲线(Precision - Recall Curve)
  • 11. 成本曲线(Cost Curve)

目录:

1. 训练和测试

  • 划分方法:通常将数据集按一定比例划分为训练集和测试集,如70%训练集,30%测试集。
  • 目的:训练集用于训练模型,测试集用于评估模型的泛化能力,即模型在新数据上的表现。

2. 预测性能评估

  • 交叉验证
    • k折交叉验证:将数据集分成k个大小相似的子集,每次用k - 1个子集作为训练集,剩余1个子集作为测试集,重复k次,最终将k次的评估结果平均。
    • 留一法(LOOCV):每次只留一个样本作为测试集,其余样本作为训练集,重复n次(n为样本总数)。
    • 数学公式以分类问题准确率为例,设第i次折叠的准确率为 a c c i acc_i acci,k折交叉验证的平均准确率为 a c c ‾ = 1 k ∑ i = 1 k a c c i \overline{acc}=\frac{1}{k}\sum_{i = 1}^{k}acc_i acc=k1i=1kacci
    • 代码示例(Python - sklearn)
from sklearn.model_selection import KFold
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

iris = load_iris()
X = iris.data
y = iris.target
kf = KFold(n_splits = 5)
dtc = DecisionTreeClassifier()
for train_index, test_index in kf.split(X):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
    dtc.fit(X_train, y_train)
    y_pred = dtc.predict(X_test)
    print(accuracy_score(y_test, y_pred))
  • 其他评估方法
    • 混淆矩阵:展示实际类别与预测类别的对应情况,对于二分类问题,矩
预测正例预测反例
实际正例实际反例
真正例(TP)假反例(FN)
假正例(FP)真反例(TN)

准确率(Accuracy) A c c u r a c y = T P + T N T P + T N + F P + F N Accuracy=\frac{TP + TN}{TP + TN+FP + FN} Accuracy=TP+TN+FP+FNTP+TN
精确率(Precision) P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP + FP} Precision=TP+FPTP
召回率(Recall) R e c a l l = T P T P + F N Recall=\frac{TP}{TP + FN} Recall=TP+FNTP
F1值 F 1 = 2 × P r e c i s i o n × R e c a l l P r e c i s i o n + R e c a l l F1 = 2\times\frac{Precision\times Recall}{Precision + Recall} F1=2×Precision+RecallPrecision×Recall
在这里插入图片描述

3. 数据挖掘方法比较

不同的数据挖掘方法(如决策树、朴素贝叶斯、支持向量机等)在不同数据集和任务上表现不同,需通过实验对比它们的预测性能、计算复杂度等指标。

分类方法

  • 决策树

    • 原理:基于树结构进行决策,每个内部节点是一个属性上的测试,分支是测试输出,叶节点是类别或值。
    • 优点:易于理解和解释,不需要大量的预处理,能处理非线性数据和多分类问题。
    • 缺点:容易过拟合,对连续性数据处理效率较低。
    • 应用场景适用于数据特征具有层次结构,且对可解释性要求较高的场景,如医疗诊断、信用评估。
  • 支持向量机

  • 原理:寻找一个最优超平面来分隔不同类别的数据点,最大化数据点到超平面的间隔。
    - 优点:在处理 高维数据时表现良好,泛化能力强,对小样本数据也能有较好的分类效果。
    - 缺点:计算复杂度较高,对大规模数据处理效率较低,难以处理多分类问题。
    - 应用场景:常用于文本分类、图像识别等领域,尤其在数据量不大但特征维度较高的情况下表现出色。
  • 朴素贝叶斯

    • 原理基于贝叶斯定理,假设特征之间相互独立,计算每个类别在给定特征下的后验概率,选择后验概率最大的类别作为预测结果
    • 优点:计算速度快,对缺失值不敏感,在数据量较少的情况下也能有较好的表现。
    • 缺点:特征独立性假设在实际中往往不成立,可能会影响分类准确率
    • 应用场景:适用于文本分类、垃圾邮件过滤等场景,尤其是在数据稀疏的情况下表现较好。

聚类方法

  • K-Means
  • 原理:给定聚类数K,随机选择K个初始聚类中心,将数据点分配到距离最近的聚类中心所在的簇,然后更新聚类中心,重复此过程直到聚类中心不再变化。
    • 优点算法简单,计算速度快,对处理大规模数据有较高的效率
    • 缺点:需要事先指定聚类数K,对初始聚类中心敏感,可能会陷入局部最优。
    • 应用场景:常用于客户细分、图像分割等领域,适用于数据分布较为均匀的情况。
  • DBSCAN
  • 原理:基于密度的概念,将密度相连的数据点划分为一个聚类,如果一个区域内的数据点密度超过某个阈值,则认为这些点属于同一个聚类。
    • 优点:不需要事先知道要形成的簇类的数量,能够发现任意形状的簇,能够识别出数据集中的噪声点。
    • 缺点:不能很好反映高维数据及数据集变化的密度,计算密度时距离计算开销大。
    • 应用场景:适用于空间数据的聚类分析,如地理信息系统中的城市聚类、生物信息学中的基因聚类等。

关联规则挖掘方法

  • Apriori算法

    • 原理:基于频繁项集的先验性质,即如果一个项集是频繁的,那么它的所有子集也一定是频繁的。通过多次扫描数据库,生成频繁项集,然后从频繁项集中生成关联规则。
    • 优点是最经典的关联规则挖掘算法,具有较好的理论基础,能够有效地挖掘出频繁项集和关联规则
    • 缺点:需要多次扫描数据库,计算复杂度较高,在处理大规模数据时效率较低。
    • 应用场景:广泛应用于购物篮分析、市场趋势预测等领域,如分析顾客购买商品的关联关系,以便进行商品推荐和货架摆放优化。
  • FP-Growth算法

    • 原理:采用分治策略,将数据库压缩到一棵频繁模式树(FP-tree)中,然后从FP-tree中挖掘频繁项集,避免了多次扫描数据库。
    • 优点挖掘效率高,不需要生成候选频繁项集,在处理大规模数据时比Apriori算法更高效
    • 缺点构建FP-tree需要较大的内存空间,对长模式的挖掘效率较低
    • 应用场景:与Apriori算法类似,尤其适用于处理大规模的交易数据,如电商平台的订单数据挖掘。

异常检测方法

  • 基于统计的方法
  • 原理:假设数据符合某种概率分布,根据数据的分布情况来判断是否为异常值,如通过计算数据点的概率密度函数值或与均值、标准差的偏离程度来确定异常。
    • 优点:理论基础扎实,对于符合特定分布的数据能够有效地检测出异常值。
    • 缺点:对数据分布的假设要求较高,当数据分布不符合假设时,检测效果可能较差。
    • 应用场景:适用于数据具有明确分布规律的场景,如网络流量监测、金融交易异常检测等。
  • 基于密度的方法
  • 原理:如果一个数据点的局部密度明显低于其周围的数据点,则认为该数据点是异常点。
    • 优点不需要事先知道数据的分布情况,能够发现任意形状的异常区域
    • 缺点:计算密度的开销较大,对于高维数据可能存在维度灾难问题。
    • 应用场景:常用于图像识别、入侵检测等领域,如检测图像中的异常物体、网络中的异常访问行为。

4. 预测概率

  • 许多分类算法(如逻辑回归、朴素贝叶斯)可以输出样本属于某类别的概率。例如逻辑回归通过Sigmoid函数 σ ( z ) = 1 1 + e − z \sigma(z)=\frac{1}{1 + e^{-z}} σ(z)=1+ez1将线性组合的结果映射到[0, 1]区间得到概率。

5. 损失函数

  • 二次损失函数(Quadratic Loss Function):常用于回归问题,对于单个样本 ( x i , y i ) (x_i,y_i) (xi,yi)预测值为 y ^ i \hat{y}_i y^i,损失为 L ( y i , y ^ i ) = ( y i − y ^ i ) 2 L(y_i,\hat{y}_i)=(y_i - \hat{y}_i)^2 L(yi,y^i)=(yiy^i)2,对于n个样本的平均损失为 L = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 L=\frac{1}{n}\sum_{i = 1}^{n}(y_i - \hat{y}_i)^2 L=n1i=1n(yiy^i)2
  • 信息损失函数(Information Loss Function):如交叉熵损失函数,对于二分类问题,设真实标签为 y y y(0或1),预测概率为 p ^ \hat{p} p^,损失为 L ( y , p ^ ) = − y log ⁡ ( p ^ ) − ( 1 − y ) log ⁡ ( 1 − p ^ ) L(y,\hat{p})=-y\log(\hat{p})-(1 - y)\log(1 - \hat{p}) L(y,p^)=ylog(p^)(1y)log(1p^)

6. 计算成本

  • 包括时间成本和空间成本。例如决策树的构建时间与数据集大小和属性数量有关,空间上需存储树的节点结构;而朴素贝叶斯计算成本相对较低,主要计算概率表。

7. 成本敏感分类

考虑不同类型错误分类的成本不同,例如在医疗诊断中,将有病误诊为无病的成本远高于将无病误诊为有病的成本。在模型训练时,通过调整损失函数或样本权重来考虑成本因素。

8. 提升图(Lift Chart)

  • 原理:展示模型相对于随机猜测在提升预测准确性方面的效果。横坐标为累计样本比例,纵坐标为累计响应比例与随机响应比例的比值。

作用

  • 评估模型性能:直观地展示模型在不同数据子集上的表现,帮助判断模型是否有效以及在哪些数据范围内表现更好。如果提升图的曲线越高,说明模型相对于随机猜测的提升效果越明显,模型性能越好。
  • 确定最佳应用场景:可以帮助确定模型最适合应用于哪些数据段,例如在某些业务场景中,可能只关注高价值客户群体,通过提升图可以找到模型对这部分客户的提升效果,从而更好地制定营销策略。
  • 比较不同模型:在比较多个不同的预测模型时,提升图是一个很有用的工具。通过对比不同模型的提升图,可以快速直观地看出哪个模型的提升效果更优,从而选择最合适的模型。

示例

假设我们有一个营销响应预测模型,用于预测客户是否会对营销活动做出响应(购买产品或服务)。我们将客户数据按照模型预测的响应概率从高到低排序,然后分成10组,每组包含10%的客户。计算每组客户的实际响应率和随机响应率,得到如下数据:

分组实际响应率随机响应率提升度
10.60.32.0
20.50.31.67
30.40.31.33
40.350.31.17
50.320.31.07
60.30.31.0
70.280.30.93
80.250.30.83
90.220.30.73
100.20.30.67

根据以上数据绘制提升图,横坐标为数据分组(1 - 10组),纵坐标为提升度。可以看到,在第1组中,模型的提升度最高,为2.0,说明模型在预测这部分高概率响应客户时,效果是随机猜测的2倍。随着分组的增加,提升度逐渐降低,到第6组时,提升度为1.0,说明在这一组中,模型的预测效果与随机猜测相同。通过这个提升图,我们可以清楚地了解模型在不同客户群体中的表现,从而有针对性地进行营销活动。

在这里插入图片描述

9. ROC曲线(Receiver Operating Characteristic Curve)

定义与原理

  • 定义ROC曲线是基于真正例率(True Positive Rate,TPR)和假正例率(False Positive Rate,FPR)这两个指标绘制出的曲线。TPR表示实际为正例且被模型正确预测为正例的比例,FPR表示实际为负例但被模型错误预测为正例的比例。
  • 原理:模型在进行二分类预测时,会根据预测结果的概率或得分设置一个阈值来判断样本属于正类还是负类。通过不断改变这个阈值,得到一系列不同阈值下的TPR和FPR值,将这些值在平面直角坐标系中描点并连接起来,就形成了ROC曲线

关键指标

  • 真正例率(TPR):计算公式为 T P R = T P T P + F N TPR = \frac{TP}{TP + FN} TPR=TP+FNTP,其中 T P TP TP是真正例的数量,即实际为正例且被模型预测为正例的样本数; F N FN FN是假反例的数量,即实际为正例但被模型预测为负例的样本数。TPR也被称为灵敏度(Sensitivity)或召回率(Recall)。
  • 假正例率(FPR):计算公式为 F P R = F P F P + T N FPR = \frac{FP}{FP + TN} FPR=FP+TNFP,其中 F P FP FP是假正例的数量,即实际为负例但被模型预测为正例的样本数; T N TN TN是真反例的数量,即实际为负例且被模型预测为负例的样本数。

作用

  • 直观评估模型性能ROC曲线越靠近左上角,说明模型的性能越好,因为在这种情况下,模型能够在保持较低FPR的同时,获得较高的TPR,即模型能够准确地识别正例,同时误判负例的情况较少。
  • 比较不同模型通过比较不同模型的ROC曲线,可以直观地判断哪个模型的性能更优。如果一个模型的ROC曲线完全位于另一个模型的ROC曲线的上方,那么这个模型的性能更好。
  • 确定最佳阈值:虽然ROC曲线本身不直接确定最佳阈值,但可以帮助分析在不同阈值下模型的性能表现,从而根据具体业务需求选择合适的阈值。例如,在一些对误判正例代价较高的场景中,可以选择一个使FPR较低的阈值。

示例

假设我们有一个用于预测客户是否会违约的二分类模型,对一组测试数据进行预测后,得到如下不同阈值下的TPR和FPR数据:

阈值TPRFPR
0.90.20.05
0.80.40.1
0.70.60.2
0.60.80.4
0.50.90.6

以FPR为横坐标,TPR为纵坐标,将上述数据点在坐标系中绘制出来,并连接成曲线,就得到了该模型的ROC曲线。从这个简单的示例可以看出,随着阈值的降低,TPR逐渐升高,FPR也逐渐升高。通过观察ROC曲线的形状和走势,可以评估模型在不同阈值下的性能表现,进而选择合适的阈值来应用模型。

在实际应用中,通常使用专门的工具或库来计算和绘制ROC曲线,如Python中的sklearn库。以下是使用sklearn库绘制ROC曲线的简单示例代码:

from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve, auc
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt

# 生成模拟二分类数据
X, y = make_classification(n_samples=1000, n_features=10, random_state=42)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)

# 预测测试集的概率
y_pred_proba = model.predict_proba(X_test)[:, 1]

# 计算ROC曲线的FPR、TPR和阈值
fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba)

# 计算AUC值
roc_auc = auc(fpr, tpr)

# 绘制ROC曲线
plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()

上述代码首先生成了模拟的二分类数据,然后使用逻辑回归模型进行训练和预测,接着计算了ROC曲线的相关指标,并绘制出了ROC曲线,同时还计算并显示了曲线下面积(AUC)的值,AUC是评估ROC曲线性能的一个重要指标,AUC值越大,说明模型的性能越好。

在这里插入图片描述

在这里插入图片描述

  • 代码示例(Python - sklearn)
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt

X, y = make_classification(n_samples = 1000, n_classes = 2)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3)
lr = LogisticRegression()
lr.fit(X_train, y_train)
y_score = lr.predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = roc_curve(y_test, y_score)
roc_auc = auc(fpr, tpr)

plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()

10. 召回率精确率曲线(Precision - Recall Curve)

  • 原理:以召回率为横坐标,精确率为纵坐标,通过改变分类阈值,得到不同的(Recall, Precision)点,连接这些点得到曲线。
  • 作用在正负样本不平衡时,比ROC曲线更能反映模型性能

11. 成本曲线(Cost Curve)

  • 原理:横坐标为假正率,纵坐标为期望成本。用于评估不同分类器在不同错误分类成本下的性能。

在这里插入图片描述

这些评估方法和指标从不同角度评估模型性能,在实际应用中需根据具体问题和数据特点选择合适的方法。


http://www.kler.cn/a/556236.html

相关文章:

  • 图论 之 最小生成树
  • 大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(3)
  • 【rt-thread】rt-thread 控制 led 的两种方式
  • 深入浅出GraphQL:现代API设计的未来
  • Unity 全局屏幕点击特效
  • Chatgpt论文润色指令整理
  • 在PyTorch中使用插值法来优化卷积神经网络(CNN)所需硬件资源
  • 小结:策略路由(Policy-based Routing,PBR)
  • 相机开发调中广角和焦距有什么不一样
  • 智能网络感知,打造极致流畅的鸿蒙原生版中国移动云盘图文体验
  • 1287. 有序数组中出现次数超过25%的元素
  • OkHttp使用和源码分析学习(二)
  • vue,vue3 keepalive没有效果,无法缓存页面include无效,keep-alive
  • PHP.INI的作用以及如何设置
  • 软著申请都需要哪些材料
  • Python中的Flask深入认知搭建前端页面?
  • ubuntu22.04离线安装K8S
  • 将Neo4j用于Python学习的创新方法
  • deepseek清华大学第二版 如何获取 DeepSeek如何赋能职场应用 PDF文档 电子档(附下载)
  • 【Qt】数据库编程(SQLite API)