根据介绍,分类特征表示属于不同群组或标签的数据,例如颜色(红色、绿色、蓝色)或城市(伦敦、东京、纽约)。尽管这些非数值特征对人类来说信息量很大,并可能具有预测性,但当您尝试将它们直接输入到大多数机器学习算法中时,它们会带来即时的问题。根本问题在于,大多数机器学习模型,从线性回归、逻辑回归到支持向量机和神经网络,都建立在数学根基之上。它们通过数值计算进行操作:测量数据点之间的距离、计算梯度、执行矩阵乘法以及优化涉及算术运算的目标函数。思考以下主要难点:数学运算未定义: 您如何对“红色”或“伦敦”等类别执行标准算术运算?您无法有意义地将“红色”+“蓝色”相加,也无法在回归方程中将“东京”乘以系数$ \beta $($ y = \beta_0 + \beta_1 \times \text{'东京'} + ... $),或者像计算数值点之间距离那样计算“绿色”和“红色”之间的欧几里得距离。需要数值输入的算法根本不知道如何直接处理这些字符串表示。通常缺乏固有顺序: 数值数据通常包含大小或顺序信息。我们知道10大于5,并且10和5之间的差异与15和10之间的差异相同。大多数分类特征(名义特征)缺乏这种内在顺序。“红色”比“蓝色”大吗?“伦敦”是否比“纽约”更“接近”“东京”,以至于算法无需上下文就能普遍理解?随意分配数字(例如,红色=1,蓝色=2,绿色=3)可能会无意中强加一种虚假的顺序或大小感,从而误导算法。例如,分配这些数字意味着绿色在某种程度上比红色“多”,并且红色和蓝色之间的“距离”与蓝色和绿色之间的“距离”相同,这通常是不正确的。序数特征(如“低”、“中”、“高”)确实具有顺序,但即便如此,字符串表示也无法以算法可以使用的数值方式直接传达这一点。算法兼容性: 基于距离的算法,如k-近邻(k-NN),在很大程度上依赖于计算特征空间中点之间的距离。这些计算在非数值数据上会失效。基于梯度的优化方法是训练线性模型和神经网络的核心,它们需要数值输入才能有效地计算梯度和更新模型参数。digraph G { rankdir=LR; node [shape=box, style=rounded, fontname="Helvetica", fontsize=10]; edge [fontname="Helvetica", fontsize=9]; subgraph cluster_raw { label = "原始数据"; style=filled; color="#e9ecef"; cat_feat [label="分类特征\n(例如,'城市')\n['London', 'Tokyo', 'NYC']", shape=note, fillcolor="#ffc9c9"]; num_feat [label="数值特征\n(例如,'温度')\n[15, 22, 18]", shape=note, fillcolor="#a5d8ff"]; } subgraph cluster_model { label = "机器学习算法"; style=filled; color="#e9ecef"; ml_model [label="需要数值输入\n(例如,线性回归、\n k-NN、神经网络)", shape=component, fillcolor="#bac8ff"]; } cat_feat -> ml_model [label=" 有问题:\n 数学运算未定义\n 无固有顺序 ", color="#f03e3e", style=dashed, fontcolor="#f03e3e"]; num_feat -> ml_model [label=" 兼容 ", color="#1c7ed6", style=solid]; encoding [label="需要编码", shape=cds, fillcolor="#ffe066", style=filled]; cat_feat -> encoding [style=dotted, arrowhead=none]; encoding -> ml_model [label=" 转换为数字 ", color="#40c057"]; }该图说明了为什么分类特征在被大多数机器学习算法使用前需要进行编码。数值特征可以直接兼容,而分类特征需要转换。因此,在您可以使用分类数据中包含的预测能力之前,您必须将其转换或编码为机器学习算法可以理解和处理的数值格式。本章会介绍执行这种必要转换的多种技术,解决这些问题并为您的数据建模做准备。我们将研究不同的策略,考量它们对不同类型分类数据的适用性以及对模型性能的影响。