如何预处理特征值为数字范围的有序特征,并对其进行相应的排序或编码



我的数据集中有以下特征列:

+-----------+
|   size    |
+-----------+
| 10-90     |
| <10       |
| 100-200   |
| 10-90     |
| 500-800   |
| 10000+    |
| <10       |
| 1000-4999 |
+-----------+

我是机器学习的新手,发现很难处理这样的特征集。

当我这样做时:

import pandas as pd
y = pd.Categorical(train['size'],ordered=True)

y的输出为:

[10-90, <10, 100-200, 10-90, 500-800, 10000+, <10, 1000-4999]
Categories (6, object): [10-90 < 100-200 < 1000-4999 < 10000+ < 500-800 < <10]

这是错误的,因为<10应该得到最低的排名,500-800也得到了错误的排名。根据这一特征,>10000或10000+应该获得最高排名。

我需要相应地对该数据进行排序或编码,使得如果我的测试数据得到值5,或者<5,它应该得到与<10,因为那是最近的一个。

python或R中有没有任何方法/包可以帮助我实现这一点?请帮忙。

Pandas解决方案还指定categories为预期订单:

cats= ['<10', '10-90' , '100-200','500-800', '1000-4999', '10000+']
y = pd.Categorical(train['size'],ordered=True, categories=cats)
print (y)
[10-90, <10, 100-200, 10-90, 500-800, 10000+, <10, 1000-4999]
Categories (6, object): [<10 < 10-90 < 100-200 < 500-800 < 1000-4999 < 10000+]

R解决方案:

cats = c('<10', '10-90' , '100-200','500-800', '1000-4999', '10000+')
factor(train$size,levels = cats,ordered = TRUE)
[1] 10-90     <10       100-200   10-90     500-800   10000+    <10       1000-4999
Levels: <10 < 10-90 < 100-200 < 500-800 < 1000-4999 < 10000+

ordered(train[['size']], levels=cats)
[1] 10-90     <10       100-200   10-90     500-800   10000+    <10       1000-4999
Levels: <10 < 10-90 < 100-200 < 500-800 < 1000-4999 < 10000+

无论你使用python还是R,你需要知道的一件事是,你需要按照你想要的顺序排列类别。只能手动完成。。

相关内容

  • 没有找到相关文章

最新更新