数据特征转换指南

机器学习项目中,特征转换是提升模型性能的关键步骤之一。有时,它是获得更好评分的唯一途径,因此如何表示和输入数据至模型变得至关重要。本文将探讨常见的数据类型,并分析不同的数据转换方法。将使用一个名为“GlobalLandTemperatures_GlobalLandTemperaturesByMajorCity.csv”的数据集,该数据集记录了1750年至2015年间全球气候变化的数据。

该数据集包含了多种常见的特征类型,如日期、位置、数值和分类列。本文将暂缓讨论特征选择和特征工程的其他方面,专注于编码此类数据的可能方式。本文旨在提供一个模板,供处理类似情况下的特征转换时使用。

首先,让快速查看整个数据集的统计信息:数据集中没有重复的行。这里只有两个数值特征是float64类型,其余都是对象类型(其中一些需要转换为确切的类型)。可以看到,只有这两个数值特征“AverageTemperature”和“AverageTemperatureUncertainty”各有11002个空值。这些温度值的一般统计数据如下:

缺失值的插补

首先,来处理缺失值。在数据有空字段、随机字符甚至错误信息的情况下,这是一个非常常见的问题。这里假设有一个或多或少已经清理过的数据集,其中有一些空值。如果对数据集有所了解,并且知道这些缺失值的来源,那么处理它们将更容易。

另一方面,在很多情况下,并不确定,必须选择一种方法来修复缺失值。为什么要关注这个问题?简单的答案是,并非所有的机器学习算法都能处理缺失值。另一个观点是,通过适当的插补/删除,同样可以获得更好的结果。以下是一些将缺失值转换为更具信息性的想法:

一种方法是用中位数均值众数(最频繁的值)来插补这些缺失值。要在这三个之间选择,只需查看箱线图和分布。如果数据分布对称,那么用均值替换缺失数据可能是一个好主意。如果数据是偏斜的或包含异常值,尝试看看众数或中位数插补选项。

还有一个常见的选项是用0或任何与给定特征中已存在的值差异更大的常数值来替换缺失值。用0填充空值并不总是合适的,因为可能已经有一些零值(如本例中的温度),这将意味着错误的信息。

如果有一个大型数据集,并且只有少量的行包含空值,那么完全删除这些行可能是可以的。否则,还有一个选项是预测缺失值,这时应该问问自己是否值得尝试(在时间和效率方面)。在示例中,选择中位数选项。

数值特征转换

在示例数据集中,“AverageTemperature”是一个连续特征,因为它的值可以假设实数集中的任何值。一个选项是使其更加离散——为几个温度范围创建类别。

一个简单的方法是将浮点数转换为整数,或者按某些小数四舍五入。另一种将特征值分类的方法是应用K-means等量化方法。一种是将值分成k个聚类,每个值属于最近均值的聚类,另一种是将连续数据分箱到k个区间。

这些方法有助于改变初始值的分布,这可能在解决异常值问题时很有用。k聚类/箱数有时可能难以选择,在这种情况下,可以使用轮廓系数肘部方法来找到最优的k值。另一种数值特征转换方法是缩放。当特征在不同的尺度上时,最好将它们都转换到一个尺度上。

在这种情况下,模型的单位系数将是相同的,因此它们都对分析做出了相等的贡献。缩放还可以加快收敛并显示出更好的性能。另一种改变特征的有意义的技术是对数转换。它用于将偏斜的数据转换为更接近正态分布。

对数转换前:

对数转换后:

如果注意到缩放结果不满意,请再次检查数据的分布,以找到更好的特征缩放方法。一旦通过均值或类似技术减少了特征中唯一值的数量,可能想要继续进一步编码,例如,创建虚拟变量:

独热编码有助于使类别对模型平等,通过为每个类别创建一个二进制特征(这样模型就不会比类别编号1赋予类别编号100更多的权重)。或者简单地将特征二值化或只制作两个标签,尽管这会减少很多信息,在某些情况下,这可能是有帮助的。

日期时间特征转换

日期时间是常见的特征类型,可以以不同的方式转换,所以让首先看看它的“日期”部分。

日期

将数据转换为有意义的最有效方式可能是将其划分为年、季节、月、周和日。此外,一天可以被定义为一年中的一天、一周中的一天或一个月中的一天。在这里,应该意识到每个国家/半球的周末/假期/季节可能会有所不同,因此将一条规则应用于所有国家可能不是一个好主意。

时间

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485