Apache spark 如何转换分类特征

Apache spark 如何转换分类特征,apache-spark,machine-learning,linear-regression,apache-spark-mllib,logistic-regression,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

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

在数据集中,有一个天气特征采用几个分类值,如:晴天、雨天、大风、多云等

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

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有一个
矢量索引器
转换器来执行此任务

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不为此类任务提供转换器


哪一个比较好?看起来这两个选项在实践中都被使用了,但在我看来,我更喜欢第二个选项,但我会听到你们的理解。

对于第二种方法,实际上Spark中有一个变压器为您实现了这一点:
OneHotEncoder
。在这种情况下,它应该与
StringIndexer
一起使用,有关文档,请参阅

至于哪一个更合适,因为天气是严格分类的,你不能对它们进行排序,所以使用二进制向量更合适。在算法需要连续特征并根据值分割数据(如逻辑回归)的情况下,这是正确的。如果有强> >没有明确的秩或可排序的< <强> >,则需要使用一个热编码器。