处理分类变量:提升模型性能的关键

在数据分析领域,正确处理分类变量对于建立准确模型至关重要。如果忽视这一点,可能会错过模型中最重要的变量。曾经只关注数值变量,导致模型不够精确。后来,意识到自己的错误,并学会了如何处理这些变量。

如果是聪明的数据科学家,会在数据集中寻找分类变量,并尽可能多地挖掘信息。如果是初学者,可能不知道如何巧妙地处理这些情况。别担心,在这里帮助。

在收到许多关于这个话题的请求后,决定写下一个清晰的指南,帮助使用分类变量来提高模型性能。注意:这篇文章最适合初学者和新晋预测模型师。如果是专家,欢迎在下面的评论部分分享一些处理分类变量的有用技巧。

分类变量的主要挑战是什么?

在处理分类变量时有过不愉快的经历。记得在处理一个数据集时,花了超过两天的时间才理解分类变量的科学。遇到过许多这样的情况,错误信息让无法前进。即使是证明过的方法也没有改善情况。

但在这个过程中,学会了如何解决这些挑战。想分享在处理分类变量时遇到的所有挑战。会发现:

  • 分类变量有太多的水平。这降低了模型的性能水平。例如,分类变量“邮政编码”会有无数的水平。
  • 分类变量的水平很少出现。这些水平中的许多对模型拟合几乎没有影响。例如,“疾病”变量可能有一些很少出现的级别。
  • 有一个水平总是出现的,即在数据集中的大多数观察中只有一个水平。具有这种水平的变量由于变异性非常低,无法对模型性能产生积极影响。
  • 如果分类变量被掩盖,破译其含义将是一项艰巨的任务。这种情况通常在数据科学竞赛中发现。
  • 不能以原始形式将分类变量放入回归方程中。它们必须被处理。
  • 大多数算法(或机器学习库)与数值变量产生更好的结果。在Python中,库“sklearn”需要数值数组中的特征。

以下是使用sklearn库在泰坦尼克数据集上应用随机森林时出现的错误,因为特征“性别”是分类的,并且没有被转换为数值形式。

import pandas as pd import numpy as np import sklearn as sklearn from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import confusion_matrix train = pd.read_csv('train.csv') test = pd.read_csv('test.csv') features = ['pclass','sibsp','parch','sex'] x_train = train[list(features)].values y_train = train['survived'].values x_test = test[list(features)].values rf = RandomForestClassifier(n_estimators=50) rf.fit(x_train, y_train) sur=rf.predict(x_test)

处理分类变量的成熟方法

以下是用来处理分类变量的一些方法。从这些方法中获得好结果的秘诀是“迭代”。必须知道,所有这些方法可能不会在所有情况下改善结果,但应该用不同的技术迭代建模过程。稍后,评估模型性能。以下是方法:

如上所述,一些机器学习库不接受分类变量作为输入。因此,将它们转换为数值变量。以下是将分类(字符串)输入转换为数值性质的方法:

  • 标签编码器:它用于将非数值标签转换为数值标签(或名义分类变量)。数值标签总是在0和n_classes-1之间。
  • 将数值区间转换为数字:假设,数据集中有连续变量的区间(如下所示)。

以上,可以看到变量“年龄”有区间(0-17, 17-25, 26-35 …)。可以使用以下方法将这些区间转换为确定的数字:

  • 使用标签编码器进行转换。但这些数值区间将被视为多个级别的非数值特征。因此,不会提供任何额外的信息。
  • 使用每个年龄区间的平均值或众数(最相关值)创建一个新特征。它将包含额外的权重。
  • 创建两个新特征,一个用于年龄的下限,另一个用于上限。在这种方法中,将比前两种方法获得更多关于这些数值区间的信息。

为了避免分类变量中的冗余水平,并处理罕见水平,可以简单地合并不同的水平。合并水平有各种方法。以下是常用的方法:

  • 使用业务逻辑:这是合并水平的最有效方法之一。根据领域或业务经验将类似水平合并到类似的组中也是有意义的。例如,可以将变量“邮政编码”的水平合并到州或地区级别。这将减少水平数量并提高模型性能。
  • 使用频率或响应率:基于业务逻辑合并水平是有效的,但可能并不总是拥有领域知识。想象一下,如果给一个来自美国政府航空部门的数据集,将如何应用业务逻辑?在这种情况下,根据频率分布或响应率合并水平。

要使用它们的频率合并水平,首先查看每个水平的频率分布,并合并频率低于总观察的5%的水平(5%是标准,但可以根据自己的分布进行更改)。这是一种处理罕见水平的有效方法。

还可以通过考虑每个水平的响应率来合并水平。可以简单地将具有相似响应率的水平合并到同一组中。

最后,还可以同时查看频率和响应率来合并水平。首先根据响应率合并水平,然后将罕见水平合并到相关组中。

虚拟编码是一种常用的方法,用于将分类输入变量转换为连续变量。“虚拟”这个名字意味着一个代表分类变量一个水平的复制变量。水平的存在由1表示,缺席由0表示。对于每个存在的水平,将创建一个虚拟变量。

注意:假设在分类变量中有500个水平。然后,应该创建500个虚拟变量吗?如果可以自动化它,非常好。否则,建议首先使用合并方法减少水平,然后使用虚拟编码。这将节省时间。这种方法也被称为“独热编码”。

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