这是一个开放式的WHY TO或WHEN TO问题,而不是关于如何将数字编码为分类数据的问题。
我目前正在研究 来自kaggle的Telco Customer Churn数据集。
这是预测客户是否会流失的分类问题。
它共有7043 行和21 列,混合了分类列和数字列。其中一列是Tenure,其数据分布在范围内
> df.tenure.unique()
array([ 1, 34, 2, 45, 8, 22, 10, 28, 62, 13, 16, 58, 49, 25, 69, 52, 71,
21, 12, 30, 47, 72, 17, 27, 5, 46, 11, 70, 63, 43, 15, 60, 18, 66,
9, 3, 31, 50, 64, 56, 7, 42, 35, 48, 29, 65, 38, 68, 32, 55, 37,
36, 41, 6, 4, 33, 67, 23, 57, 61, 14, 20, 53, 40, 59, 24, 44, 19,
54, 51, 26, 39])
在一个公共内核中,我看到那个人把它变成了一个分类列。
> pd.cut(df['tenure'], bins=[0,12,24,48, 60, df['tenure'].max()], labels=['Tenure_0-12', 'Tenure_12-24', 'Tenure_24-48','Tenure_48-60','Tenure_gt_60'])
0 Tenure_0-12
1 Tenure_24-48
2 Tenure_0-12
3 Tenure_24-48
4 Tenure_0-12
...
7027 Tenure_12-24
7028 Tenure_gt_60
7029 Tenure_0-12
7030 Tenure_0-12
7031 Tenure_gt_60
Name: tenure, Length: 7032, dtype: category
对一些数字列进行分组/分箱是一种常见的做法(通常使用日期/时间列,如年龄、季节性)。我不太确定在各种传统 ML 算法中这样做的好处。
一些对维度敏感的算法可能会表现不佳,因为新创建的分类列的 One-Hot 编码会增加维度的数量。
合理地,将列分组到 bin 中,将目标聚类以供 K-NearestNeighbour 或 SVM 等算法查找平面非常困难。
请!让我们讨论一下这种技术对不同 ML 算法的影响(不仅限于传统或分类算法)。