如何转换分类特征
How to transform the categorical feature
我是机器学习的新手,我正在研究 classification/regression 问题。
在数据集中,有一个天气特征需要几个分类值,如:Sunny、Rainy、Windy、Cloudy 等
有两种可选的方法来转换此功能,
1.Give每个类别一个数字索引,如
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.Tranform这个特征转化为二元向量:
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 不为此类任务提供转换器。
首选哪一个?看起来这两个选项都在实践中使用,但在我看来,我更喜欢第二个选项,但我想听听你们的理解。
对于第二种方法,Spark 中实际上有一个转换器可以为您完成:OneHotEncoder
。在这种情况下,它应该与 StringIndexer
一起使用,请参阅 here 文档。
至于哪个更合适,因为天气是严格分类的,你不能对它们进行排序,所以使用二元向量更合适。在算法期望连续特征并将根据值拆分数据(例如逻辑回归)的情况下,这是正确的。如果您希望算法考虑没有明确的排名或可排序顺序,则应使用单热编码器。
我是机器学习的新手,我正在研究 classification/regression 问题。
在数据集中,有一个天气特征需要几个分类值,如:Sunny、Rainy、Windy、Cloudy 等
有两种可选的方法来转换此功能,
1.Give每个类别一个数字索引,如
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.Tranform这个特征转化为二元向量:
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 不为此类任务提供转换器。
首选哪一个?看起来这两个选项都在实践中使用,但在我看来,我更喜欢第二个选项,但我想听听你们的理解。
对于第二种方法,Spark 中实际上有一个转换器可以为您完成:OneHotEncoder
。在这种情况下,它应该与 StringIndexer
一起使用,请参阅 here 文档。
至于哪个更合适,因为天气是严格分类的,你不能对它们进行排序,所以使用二元向量更合适。在算法期望连续特征并将根据值拆分数据(例如逻辑回归)的情况下,这是正确的。如果您希望算法考虑没有明确的排名或可排序顺序,则应使用单热编码器。