机器学习的应用领域十分广泛,本文将详细介绍机器学习项目的整体框架,并着重讨论数据建模的流程。
首先,明确几个关键概念。
机器学习、人工智能和数据科学有何区别?
这三个领域没有严格的界限,但为了便于理解,本文认为机器学习是从数据中发现规律,以解决某些问题或预测未来事件。
读者在阅读以下步骤时,建议边学边做,通过实践来验证学习成果。
一个机器学习项目通常分为三个主要步骤:数据收集、数据建模和模型应用。这三个步骤相互影响,环环相扣。
在启动项目时,可能会经历这样的循环:收集数据、对其进行建模、发现数据质量差,重新收集数据、再建模、应用模型、发现模型效果不佳,重复以上过程。
这里有几个关键概念需要解释:模型是什么?模型应用又是什么?如何收集数据?
好的问题。
数据收集的方式取决于具体问题。下文将提供一些示例,比如查看电子表格中的顾客购买记录。
建模是指利用机器学习算法从收集的数据中提取有用的知识。
普通算法与机器学习算法的主要区别是什么?
普通算法就像菜谱,是一系列将原材料转换成美味佳肴的指令。
机器学习的独特之处在于,它不是提供指令,而是根据原材料和最终产品来推导出指令。
机器学习算法种类繁多,不同算法在处理不同类型的问题时各有优势,但其共同目标是寻找数据中的模式或规则。
模型应用则是将找到的规则付诸实践。它可以应用于各种场景,例如向顾客推荐商品,或为医疗机构提供更好的疾病检测方案。
尽管每个项目的具体细节可能有所不同,但其基本原理是相似的。
本文将重点介绍数据建模。假设读者已经收集了数据,正在准备构建一个机器学习模型。这个过程可以分为以下几个步骤:
机器学习项目可分为三个阶段:数据收集、数据建模和模型应用。本文主要关注建模阶段,并假设读者已经拥有了数据。
问题定义——要解决的商业问题是怎样的?如何将其转化为机器学习问题?
数据——既然机器学习依赖于数据,那么数据是什么类型?它与问题的关系如何?数据是结构化的还是非结构化的?是静态的还是动态的?
模型评估——什么样的模型算是成功的?准确率95%的机器学习模型足够吗?
特征选择——需要使用哪些数据?已知信息如何影响数据的选择?
建模——选择哪种模型?如何改进模型?如何比较不同模型的性能?
实验——还有哪些尝试的空间?模型表现是否符合预期?已知信息如何影响其他步骤?
接下来,我们将详细探讨这些问题。
判断是否采用机器学习的第一步是将待解决的商业问题转化为机器学习问题。
机器学习技术主要有监督学习、无监督学习、迁移学习和强化学习。其中,监督学习、无监督学习和迁移学习最常用于商业项目。
监督学习
监督学习是指在已知数据和标签的情况下,机器学习算法旨在研究影响标签的因素。监督发生在训练阶段。如果算法预测错误,它会尝试自我纠正。
举例来说,如果我们想检测一个人是否有心脏病,可以使用100份匿名病历作为数据,是否患有心脏病作为标签。
机器学习算法可以从病历(输入)和病人是否患有心脏病(标签)中学习,然后判断病历中的哪些因素会导致心脏病。
训练好算法后,我们可以将新的病历(输入)传递给算法,算法将预测患者是否有心脏病(标签)。算法返回的结果只是患病的概率,而不是绝对结论。
算法会告诉你:“根据观察,这个人与心脏病人的病历相似度达到了70%。”
无监督学习
无监督学习是指在没有标签的情况下进行机器学习。例如,在线电子游戏商店的顾客支付记录。我们可以利用机器学习算法将顾客分组,以便提供个性化的服务。
通过观察分组情况后,我们可以人为地给出标签。有些组可能对电脑游戏感兴趣,有些组可能更喜欢独立游戏,还有一些组只购买打折游戏。这个过程称为聚类。
需要注意的是,算法不会提供标签,它只是寻找相似顾客间的规律。标签需要由专业人士根据专业知识给出。
迁移学习
迁移学习是利用在一个领域的机器学习模型发现的规律,应用到另一个领域的新任务。
从头开始训练机器学习模型可能会消耗大量的时间和资源。幸运的是,并非总是需要自己构建模型。已有的机器学习算法在一个领域的规律可以应用于另一个领域。
例如,一家汽车保险公司想要建立一个文本分类模型,以判断保险申请者是否应承担责任。
可以使用一个已经读过维基百科并记住了单词间规律的现有模型。然后使用保险申请书(数据)及其结果(标签)对模型进行微调,就可以将其应用于实际问题。
商业项目中使用的机器学习技术很可能属于上述三种类型。
接下来,我们再细分为分类、回归和推荐。
• 分类——预测事物所属的类别。例如,预测顾客是否会购买某种商品,或者某人是否患有心脏病。注意,类别可以多于两种。两个类别的称为二元分类,三个及以上的称为多元分类。多标签表示同一个事物可以同时属于多个类别。
• 回归——预测具体的数值。例如,预测房屋的价格或下个月网站的访问量。
• 推荐——向某人推荐某物。例如,基于购买记录向顾客推荐商品,或基于阅读记录向读者推荐书籍。
了解这些后,下一步就是用机器学习术语描述商业问题。
以汽车保险为例。保险公司每天需要阅读成千上万的申请书,并判断申请人是否应承担责任。
然而,现在申请数量已经超过了员工的处理能力。公司拥有成千上万的申请书记录,每一份都标明了申请人是否应承担责任。
机器学习可以发挥作用吗?
读者应该已经知道答案。但还是让我们来验证一下。这个问题是否属于分类、回归或聚类?
重新描述这个问题。
一家汽车保险公司希望将收到的保险申请分为申请人应承担责任和不应承担责任两类。
看到分类这个词了吗?
分析表明,这可能是一个潜在的机器学习分类问题。“潜在”是因为机器学习也可能无法解决这个问题。
在将商业问题转化为机器学习问题时,尽量从简单入手。最初,超过一个句子的问题描述都是多余的。必要时再逐步增加复杂度。
所需的数据取决于要解决的问题。
已有的数据可能是结构化的或非结构化的。这两类数据又可以进一步分为静态或动态数据。
结构化数据:例如由许多行和列组成的表格,记录顾客交易信息的电子表格,存储病历的数据库。数据可以是数值,例如平均心率;也可以是类别,例如性别;或者等级,例如胸痛程度。
非结构化数据:无法简单地制成表格的数据,例如图片、音频文件和自然语言文本。
静态数据:历史数据,不可更改。例如顾客购买记录。
动态数据:经常更新的数据,可以修改旧记录或不断增加新记录。
这四类数据可以相互组合。
静态的结构化信息表也可以包含不断更新的文本和照片。
用于预测心脏病的数据表中可能包含性别、平均心率、平均血压和胸痛程度等信息。
在保险申请书的例子中,可能存在发送的文本、照片以及申请结果等数据。随着新申请的输入和旧申请的更新,表格将不断变化。
两种不同类型的结构数据。表格1.0包含数值和类别数据。表格2.0以结构化方式包含图片和自然语言文本等非结构化数据。
尽管数据类型不同,基本原则是一致的,即利用数据获取知识或进行预测。
有监督学习使用特征变量来预测目标变量。例如,预测心脏病可能需要用到性别这一特征变量,目标变量可以是病人是否患有心脏病。
表格1.0分为ID栏(不用于构建机器学习模型)、特征变量和目标变量。机器学习模型识别特征变量中的规律,用这些规律预测目标变量。
无监督学习没有标签,但仍然需要发现规律。这意味着将相似的样本分为一组,并找出异常值。
迁移学习和有监督学习处理相同的问题,除非需要对从其他地方获取的机器学习算法进行修改。
记住,使用客户数据改进业务模式或服务质量时,必须告知他们。这就是为什么到处都能看到“本网站使用cookies”的提示。这些网站研究用户的浏览习惯,并使用机器学习来改善服务。
已经将商业问题转化为机器学习问题,并拥有数据。接下来要考虑如何判断模型是否成功。
分类、回归和推荐问题的评估标准不同,选择哪种标准取决于问题类型。
要使项目成功,模型的准确率至少需要达到95%。
使用准确率95%的模型分析保险申请的责任人可能已经足够。但对于心脏病检测,可能需要更高的准确性。
以下是分类问题中需要考虑的其他因素。
假阴性——模型预测结果为阴性,但实际结果为阳性。例如,在垃圾邮件检测中,假阴性可能很重要。但在自动驾驶车辆的计算机视觉系统中,未能检测到行人可能导致严重后果。
假阳性——模型预测结果为阳性,但实际结果为阴性。例如,某人被诊断为心脏病但实际上并未患病。只要不对病人的生活习惯造成负面影响或进行不必要的治疗,这种错误可能无关紧要。
真阴性——模型预测结果为阴性,实际结果也为阴性。这是理想的结果。
真阳性——模型预测结果为阳性,实际结果也为阳性。这也是理想的结果。
准确率——阳性预测符合实际结果的比例。一个没有假阳性结果的模型准确率为1.0。
召回率——检测出的阳性结果占所有阳性结果的比例。一个没有假阴性结果的模型召回率为1.0。
F1值——准确率和召回率的综合指标,数值越接近1越好。
ROC曲线和AUC——ROC曲线用于比较真阳性率和假阳性率。AUC是ROC曲线下的面积。完全错误的模型AUC为0.0,完全正确的模型AUC为1.0。
回归问题(关于数值预测)需要减少预测结果与实际值之间的误差。预测房屋价格时,模型的预测结果越接近实际价格越好。使用MAE或RMSE来衡量误差。
平均绝对误差(MAE)——模型预测结果与实际值之间的平均误差。
均方根误差(RMSE)——模型预测结果与实际值之间的平均平方误差。
如果希望较大的误差更加显著,则使用RMSE来衡量。例如,预测房价为20万美元,实际价格为30万美元,差值为10万,比差值为5万的情况要糟糕一倍以上。如果希望差值为10万和差值为5万的情况相差一倍,可以使用MAE来衡量。
推荐问题的解决方案更难测试。一种方法是在建模时隐藏部分数据。建模完成后,再预测这部分数据的推荐结果,观察其与实际结果的相关性。
例如,在向顾客推荐网店商品时,已知2010年至2019年的购买记录。可以使用2010年至2018年的数据来构建模型,然后用模型预测2019年的结果。这样就将问题转化为分类,因为目标变成了预测某人是否会购买某种商品。
然而,传统的分类方法并不是推荐问题的最佳解决方案。准确率和召回率没有等级区分。
如果你的机器学习模型推荐了十个商品,你肯定希望页面上首先显示最符合顾客需求的商品,对吗?
数据各不相同。特征是指数据集中不同种类的数据。
特征主要可以分为类别特征、连续特征和衍生特征。
类别特征——特征值可以分为不同的种类。例如,心脏病预测中患者的性别。或者网店问题中某人是否购买了商品。
连续特征(数值特征)——可以用数值度量的特征,如平均心率或登录次数。
衍生特征——从数据中派生出来的特征,通常称为特征工程。特征工程是某一领域的专家运用知识生成数据。例如,将登录次数和时间戳结合起来,计算出距离上次登录的时间这一新特征。或将日期转换为是否为工作日这一新特征。
任何文本、图像都可以成为特征。任何特征都需要转换成数值才能被机器学习算法用于构建模型。
以下是一些关于特征的注意事项。
确保特征在训练和测试过程中一致——尽量使用接近真实系统的特征来训练模型。
与领域专家合作——已知信息有哪些,它们如何影响选择使用的特征?与机器学习工程师和数据科学家分享这些信息。
特征是否有价值?——如果只有10%的样本包含这一特征,它是否适合用于建模?优先选择覆盖率高的特征,即大多数样本都包含这些特征的数据。
完美意味着错误——准确率100%的模型往往是过度拟合训练数据的结果。没有完美的模型。
可以简单地使用特征设立基本标准。例如,客户流失专家可能知道,三周未登录的客户有80%的可能性会流失。
或者,房地产中介可能知道,卧室超过5个且浴室超过5个的房屋售价超过50万美元。
这些标准经过了简化,不一定非常精确。但你可以尝试用它们来改进机器学习模型。
定义好问题、确定好数据、评估标准和特征后,就可以开始建模了。
建模分为三部分:选择模型、改进模型和比较模型。
选择模型
选择模型时需要考虑可读性、可维护性、数据量以及训练和预测方面的限制。
可读性和可维护性——模型如何做出决策?如何修复错误?
数据量——数据的规模有多大?数据规模会改变吗?
训练和预测方面的限制——这项与前两项无关,有多少时间和资源可用于训练和预测?
首先,简化这些问题。一个完美模型可能很有吸引力,但2%的性能提升可能需要10倍的计算资源和5倍的时间,可能不值得。
线性模型如逻辑回归通常易于理解和快速训练,而深度模型如神经网络则需要更长的时间和更多的计算资源。
但现实世界中的数据并不总是线性的。
那该怎么办?
集成决策树和梯度提升算法在处理Excel表格和数据帧等结构化数据方面效果最佳。了解随机森林、XGBoost和CatBoost算法。
深度学习模型如神经网络适用于图像、音频文件和自然语言文本,代价是它们需要更长的训练和预测时间,并且更难调试。但这并不意味着不应该使用它们。
迁移学习结合了深度学习模型和线性模型的优点。它使用预先训练好的深度学习模型,将识别的模式输入线性模型,大大节省了训练时间。
在哪里可以找到预先训练好的模型?
预训练模型可以在PyTorch Hub、TensorFlow Hub、Model Zoo和Fast.ai框架等网站上找到。
其他类型的模型呢?
构建模型原型时无需从头开始构建机器学习模型。前人已经留下了许多模型代码。
重要的是确保输入(数据)与已有模型兼容。这意味着严格定义模型和标签,了解要解决的问题。
微调和改进模型
模型的最终结果并不意味着一切。可以像调试汽车一样调试并改进机器学习模型。
微调模型需要调整超参数,例如学习率或优化器。或者是特定模型中的构建要素,例如随机森林中的树的数量和神经网络的层数。
这一过程已经逐渐从人工转向自动化,并将成为常态。
通过迁移学习调用预训练模型可以综合上述步骤的优势。
调试模型时应优先考虑可重复性和效率。其他人应该能够重现你的步骤来改进他们的模型。主要目标是减少训练时间,而不是提出新思路,因此调试过程应该是效率导向的。
比较模型
将苹果与苹果比较。
使用数据X训练模型1,使用数据Y进行评估。
使用数据X训练模型2,使用数据Y进行评估。
必须使用相同的数据训练和评估不同模型。模型1和2是可变的,而数据X和Y则固定不变。
这一步涵盖了所有其他步骤。因为机器学习是一个高度迭代的过程,必须确保实验可以执行。
主要目标是尽量减少线下实验和线上实验之间的差距。
线下实验发生在项目尚未面向用户时。线上实验发生在机器学习模型开始批量生产后。
每次实验都必须使用数据的不同部分。
训练数据集——用于训练模型,通常占整个数据集的70%-80%。
验证/开发数据集——用于微调模型,通常占整个数据集的10%-15%。
测试数据集——用于测试和比较模型,通常占整个数据集的10%-15%。
这些数据集的大小可以根据问题和数据类型稍作调整。
如果模型在训练集上的表现不佳,说明它没有很好地学习。解决方案是尝试不同的模型、改进现有模型或收集更多高质量数据。
如果模型在测试集上的表现不佳,说明它难以推广。模型可能发生了过拟合。可以使用更简单的模型或收集更多数据。
如果模型在真实数据上的表现不佳,说明真实数据与训练集和验证集存在较大差异。需要重复上述步骤。确保数据与待解决问题相符。
在进行重大调整时,记录调整的内容和原因。记住,就像在模型微调中一样,任何人都可以重复你的操作,包括未来的你自己。
这意味着需要定期保存最新的模型和数据集。
结合上述步骤,制作项目原型
许多企业在机器学习方面有所了解,但不知道如何开始应用。最好的方法是按照以下六个步骤制作概念原型。
此类尝试的目的是探索使用机器学习为公司创造商业价值的可能性,而不是彻底改变商业运营模式。
毕竟,目标不是追求时髦,而是获得真正有价值的解决方案。
规定好项目原型的期限,两周、六周和十二周都是较为合适的。有了高质量的数据,一个优秀的机器学习和数据科学家可以在短时间内完成大部分建模工作。
行业专家、机器学习工程师和数据科学家应协同合作。否则可能会构建出一个用于错误对象的优秀模型,这是一个非常糟糕的结果。
如果可能的话,告诉网络设计师改进在线商店的设计,以支持机器学习实验。
由于项目原型的性质,您的企业可能无法立即从机器学习中获益。项目经理必须清楚这一点。机器学习工程师或数据科学家也应该做好白费努力的心理准备。
但无法获利并不意味着失败。
无用的模型也有价值,您可以通过它们了解到哪些无效,从而将精力放在其他方向。这就是为什么设定实验期限的原因。时间总是不够用,但截止日期推动了生产力。
如果机器学习模型表现良好,可以进入下一步,否则应回到上一步。在实践中学习比空想更快。
注意
数据是核心。没有高质量的数据,任何机器学习模型都将徒劳无功。使用机器学习应从收集高质量数据开始。
应用改变一切。离线表现良好的模型在线上可能会表现不佳。本文的重点是数据建模。一旦模型投入使用,将面临架构管理、数据验证、模型再训练和分析等一系列挑战。云服务提供商可以提供这些服务,但将它们整合起来仍然是一个技术难题。如果您是老板,请给数据工程师高薪。如果您是数据工程师,请与老板分享您的知识。
数据收集和模型应用是机器学习管道中耗时最长的部分。本文仅讨论了建模,但仍有大量数据预处理的细节未提及。
商业工具有很多。机器学习是一个由许多小工具组成的系统。从代码库和框架到不同的应用架构。每个问题都有许多不同的解决方案。最佳方法总是在不断变化,但本文讨论的主题始终不变。