《大数据架构和算法实现之路:电商系统的技术实战》——1.4 分类效果评估

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介:

本节书摘来自华章计算机《大数据架构和算法实现之路:电商系统的技术实战》一书中的第1章,第1.4节,作者 黄 申,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.4 分类效果评估

到了这一步,你可能会产生几个疑问:机器的分类准确吗?是否会存在错误?不同的分类算法相比较,孰优孰劣呢?这是个很好的问题,确实,我们无法保证分类算法都是准确有效的。不同的应用场景,不同的数据集合都有可能会影响到算法最终的精准度。为了更加客观地衡量其效果,需要采用一些评估的手段。对于分类问题而言,我们最常用的是离线评估。也就是在系统没有上线之前,使用现有的标注数据集合来进行评测。其优势在于,上线之前的测试更便于设计者发现问题。万一发现了可以改进之处,技术调整后也可以再次进行评估,反复测试的效率非常之高。

值得一提的是,分类有两大类型:二分类和多分类。二分类是指判断数据对象属于或不属于一个给定的分类,而多分类则是指将数据对象判定为多个分类中的一个。多分类的评估策略会更复杂一些,不过,可以将其转化为多个二分类问题来对待。所以,让我们从二分类的评估入手,先了解一下表1-1中的混淆矩阵(Confusion Matrix)这个核心概念。

screenshot

下面就来逐个解释一下这个矩阵中的元素,假设有一组标注好的数据集d,并将其认定为标准答案。其中属于A类的数据称为正例(Positive),不属于A类的另外一部分数据称为负例(Negative),d是正例和负例的并集,而且正例和负例没有交集。这时,可以通过一个分类算法c来判定在这些数据中,是否有一组数据对象属于A类。若c判断属于A类的则称为预测正例(Positive’),而不属于A类的则称为预测负例(Negative’)。如果d标注为正例,c也预测为正例,那么就称为真正例(True Positive,TP)。如果d标注为正例,c预测为负例,那么就称为假负例(False Negative,FN)。如果d标注为负例,c也预测为负例,那么就称为真负例(True Negative,TN)。如果d标注为负例,c预测为正例,那么就称为假正例(False Positive,FP)。

根据混淆矩阵,我们可以依次定义这些指标:精度(Precision)p、召回率(Recall)r、准确率(Accuracy)a和错误率(Error Rate)e。

screenshot

除了定义评估的指标之外,还需要考虑一个很实际的问题:我们该如何选择训练数据集和测试数据集?进行离线评估的时候,并不需要将全部的标注样本都作为训练集,而是可以预留一部分作为测试集。然而,训练和测试的不同划分方式,可能会对最终评测的结论产生很大的影响,主要原因具体如下。

  • 训练样本的数量决定了模型的效果。如果不考虑过拟合的情况,那么对于同一个模型而言,一般情况下训练数据越多,精度就会越高。例如,方案A选择90%的数据作为训练样本来训练模型,剩下10%的数据作为测试样本;而方案B则正好颠倒,只用10%的数据作为训练样本,测试剩下90%的数据。那方案A测试下的模型准确率很可能会比方案B测出的模型准确率要好很多。虽然模型是一样的,但训练和测试的数据比例导致了结论的偏差。
  • 不同的样本有不同的数据分布。假设方案A和B都取90%作为训练样本,但是A取的是前90%的部分,而B取的是后90%的部分,二者的数据分布不同,对于模型的训练效果可能也会不同。同理,这时剩下10%的测试数据其分布也会不相同,这些都会导致评测结果不一致。

鉴于此,人们发明了一种称为交叉验证(Cross Validation)的划分和测试方式。其核心思想是每一轮都拿出大部分数据实例进行建模,然后用建立的模型对留下的小部分实例进行预测,最终对本次预测结果进行评估。这个过程反复进行若干轮,直到所有的标注样本都被预测一次而且仅预测一次。用交叉验证的目的是为了得到可靠稳定的模型,其最常见的形式是留一验证和K折交叉。留一验证(Leave One Out)是交叉验证的特殊形式,意指只使用标注数据中的一个数据实例来当作验证资料,而剩余的则全部当作训练数据。这个步骤一直持续到每个实例都被当作一次验证资料。而K折交叉验证(K-fold Cross Validation)是指训练集被随机地划分为K等分,每次都是采用(K – 1)份样本用来训练,最后1份被保留作为验证模型的测试数据。如此交叉验证重复K次,每个1/K子样本验证一次,通过平均K次的结果可以得到整体的评估值。假设有数据集D被切分为K份(d1, d2, …, dk),则交叉过程可按如下形式表示:

screenshot

如果标注样本的数量足够多,K的值一般取5到30,其中10最为常见。随着K值的增大,训练的成本就会变高,但是模型可能会更精准。当标注集的数据规模很大时,K值可以适当小一些,反之则建议K值适当取值大一些。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
2月前
|
机器学习/深度学习 数据采集 搜索推荐
大数据与金融风控:信用评估的新标准
【10月更文挑战第31天】在数字经济时代,大数据成为金融风控的重要资源,特别是在信用评估领域。本文探讨了大数据在金融风控中的应用,包括多维度数据收集、智能数据分析、动态信用评估和个性化风控策略,以及其优势与挑战,并展望了未来的发展趋势。
|
4月前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
127 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
3月前
|
存储 缓存 分布式计算
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
这篇文章是关于数据结构与算法的学习指南,涵盖了数据结构的分类、数据结构与算法的关系、实际编程中遇到的问题以及几个经典的算法面试题。
45 0
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
|
3月前
|
移动开发 算法 前端开发
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
41 0
|
4月前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
在 Python 编程中,算法的性能至关重要。本文将带您深入了解算法复杂度的概念,包括时间复杂度和空间复杂度。通过具体的例子,如冒泡排序算法 (`O(n^2)` 时间复杂度,`O(1)` 空间复杂度),我们将展示如何评估算法的性能。同时,我们还会介绍如何优化算法,例如使用 Python 的内置函数 `max` 来提高查找最大值的效率,或利用哈希表将查找时间从 `O(n)` 降至 `O(1)`。此外,还将介绍使用 `timeit` 模块等工具来评估算法性能的方法。通过不断实践,您将能更高效地优化 Python 程序。
75 4
|
4月前
|
机器学习/深度学习 算法 数据挖掘
决策树算法大揭秘:Python让你秒懂分支逻辑,精准分类不再难
【9月更文挑战第12天】决策树算法作为机器学习领域的一颗明珠,凭借其直观易懂和强大的解释能力,在分类与回归任务中表现出色。相比传统统计方法,决策树通过简单的分支逻辑实现了数据的精准分类。本文将借助Python和scikit-learn库,以鸢尾花数据集为例,展示如何使用决策树进行分类,并探讨其优势与局限。通过构建一系列条件判断,决策树不仅模拟了人类决策过程,还确保了结果的可追溯性和可解释性。无论您是新手还是专家,都能轻松上手,享受机器学习的乐趣。
59 9
|
5月前
|
数据采集 机器学习/深度学习 算法
【python】python客户信息审计风险决策树算法分类预测(源码+数据集+论文)【独一无二】
【python】python客户信息审计风险决策树算法分类预测(源码+数据集+论文)【独一无二】
|
5月前
|
算法 5G Windows
OFDM系统中的信号检测算法分类和详解
参考文献 [1]周健, 张冬. MIMO-OFDM系统中的信号检测算法(I)[J]. 南京工程学院学报(自然科学版), 2010. [2]王华龙.MIMO-OFDM系统传统信号检测算法[J].科技创新与应用,2016(23):63.
90 4
|
5月前
|
机器学习/深度学习 算法 数据挖掘
决策树算法大揭秘:Python让你秒懂分支逻辑,精准分类不再难
【8月更文挑战第2天】决策树算法以其直观性和解释性在机器学习领域中独具魅力,尤其擅长处理非线性关系。相较于复杂模型,决策树通过简单的分支逻辑实现数据分类,易于理解和应用。本示例通过Python的scikit-learn库演示了使用决策树对鸢尾花数据集进行分类的过程,并计算了预测准确性。虽然决策树优势明显,但也存在过拟合等问题。即便如此,无论是初学者还是专家都能借助决策树的力量提升数据分析能力。
54 4
|
6月前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
【7月更文挑战第23天】在Python编程中,掌握算法复杂度—时间与空间消耗,是提升程序效能的关键。算法如冒泡排序($O(n^2)$时间/$O(1)$空间),或使用Python内置函数找最大值($O(n)$时间),需精确诊断与优化。数据结构如哈希表可将查找从$O(n)$降至$O(1)$。运用`timeit`模块评估性能,深入理解数据结构和算法,使Python代码更高效。持续实践与学习,精通复杂度管理。
68 9