在数据分析领域,正确处理分类变量对于建立准确模型至关重要。如果忽视这一点,可能会错过模型中最重要的变量。曾经只关注数值变量,导致模型不够精确。后来,意识到自己的错误,并学会了如何处理这些变量。
如果是聪明的数据科学家,会在数据集中寻找分类变量,并尽可能多地挖掘信息。如果是初学者,可能不知道如何巧妙地处理这些情况。别担心,在这里帮助。
在收到许多关于这个话题的请求后,决定写下一个清晰的指南,帮助使用分类变量来提高模型性能。注意:这篇文章最适合初学者和新晋预测模型师。如果是专家,欢迎在下面的评论部分分享一些处理分类变量的有用技巧。
在处理分类变量时有过不愉快的经历。记得在处理一个数据集时,花了超过两天的时间才理解分类变量的科学。遇到过许多这样的情况,错误信息让无法前进。即使是证明过的方法也没有改善情况。
但在这个过程中,学会了如何解决这些挑战。想分享在处理分类变量时遇到的所有挑战。会发现:
以下是使用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-17, 17-25, 26-35 …)。可以使用以下方法将这些区间转换为确定的数字:
为了避免分类变量中的冗余水平,并处理罕见水平,可以简单地合并不同的水平。合并水平有各种方法。以下是常用的方法:
要使用它们的频率合并水平,首先查看每个水平的频率分布,并合并频率低于总观察的5%的水平(5%是标准,但可以根据自己的分布进行更改)。这是一种处理罕见水平的有效方法。
还可以通过考虑每个水平的响应率来合并水平。可以简单地将具有相似响应率的水平合并到同一组中。
最后,还可以同时查看频率和响应率来合并水平。首先根据响应率合并水平,然后将罕见水平合并到相关组中。
虚拟编码是一种常用的方法,用于将分类输入变量转换为连续变量。“虚拟”这个名字意味着一个代表分类变量一个水平的复制变量。水平的存在由1表示,缺席由0表示。对于每个存在的水平,将创建一个虚拟变量。
注意:假设在分类变量中有500个水平。然后,应该创建500个虚拟变量吗?如果可以自动化它,非常好。否则,建议首先使用合并方法减少水平,然后使用虚拟编码。这将节省时间。这种方法也被称为“独热编码”。