Кажется, что все эти функции выполняют довольно похожие операции. OneHotEncoderEstimator
в сочетании с VectorAssembler
кодирует и помещает в вектор. FeatureHasher
, кажется, выполняет кодирование и использует трюк хеширования, чтобы поместить его в вектор, а VectorIndexer
, кажется, делает то же самое, что и OneHotEncoder
+ VectorAssembler
, но может обрабатывать как непрерывные, так и категориальные переменные.
У меня есть 2 вопроса. Во-первых, помимо разницы в хитрости, есть ли практическая разница, если конечной целью является кодирование, а затем векторизация? Во-вторых, есть ли минус всегда использовать FeatureHasher
?
Одно потенциальное предостережение, о котором я подумал, это то, что FeatureHasher
и VectorIndexer
могут маркировать кодирование вместо одного горячего кодирования, но я не думаю, что в документации это указано. И если VectorIndexer
будет кодировать только метки, разве это не сделает StringIndexer
избыточным / менее универсальным по сравнению, кроме различий в типах данных?