我的数据集中有以下特征列:
+-----------+
| 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中是否有任何方法/软件包可以帮助我实现这一目标? 请帮助。
答案 0 :(得分:3)
熊猫解决方案还指定了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+]
答案 1 :(得分:2)
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,您都需要知道的一件事是,您需要按照所需的顺序放置类别。只能手动完成。.