如何转换分类特征

时间:2017-11-20 06:18:10

标签: apache-spark machine-learning linear-regression apache-spark-mllib logistic-regression

我是机器学习的新手,我正在研究分类/回归问题。

在数据集中,有一个天气特征需要一些分类值,如:晴天,下雨,有风,多云等。

有两种可选的方法可以转换此功能,

1.给每个类别一个数字索引,如

date           weather        indexedWeather
2017-11-01      Sunny              0
2017-11-02      Cloudy             1
2017-11-03      Snow               3
2017-11-04      Cloudy             1
2017-11-05      Windy              2
2017-11-06      Sunny              0
2017-11-07      Snow               3
2017-11-08      Cloudy             1

Spark MLLib有一个VectorIndexer转换器来执行此任务

2.将此功能转换为二进制矢量:

date           weather         indexedWeather
2017-11-01      Sunny              1 0 0 0
2017-11-02      Cloudy             0 1 0 0
2017-11-03      Snow               0 0 1 0
2017-11-04      Cloudy             0 1 0 0
2017-11-05      Windy              0 0 0 1
2017-11-06      Sunny              1 0 0 0
2017-11-07      Snow               0 0 1 0
2017-11-08      Cloudy             0 1 0 0

Spark MLLib不为此类任务提供转换器。

哪一个更受欢迎?看起来这两个选项都在实践中使用,但在我看来,我更喜欢第二种选择,但我会听到你们的理解。

1 个答案:

答案 0 :(得分:3)

对于第二种方法,Spark中实际上有一个变换器可以为您完成:OneHotEncoder。在这种情况下,它应与StringIndexer一起使用,请参阅here以获取文档。

至于哪一个更合适,因为天气是严格分类的,你不能对它们进行排序,所以使用二元向量更合适。在算法需要连续特征并根据值(例如Logistic回归)分割数据的情况下,情况确实如此。如果您希望算法考虑没有明确排名或可排序顺序,则应使用单热编码器。

相关问题