Почему поле embarkation_point_2 добавляется, когда one_hot_encoder применяется к обучающим данным

#machine-learning #vertica #one-hot-encoding

#машинное обучение #vertica #one-hot-encoding

Вопрос:

Следуя примеру vertica at https://www.vertica.com/docs/11.0.x/HTML/Content/Authoring/AnalyzingData/MachineLearning/DataPreparation/EncodingCategoricalColumns.htm?tocpath=Analyzing Data|Machine Learning for Predictive Analytics|Data Preparation|_____3

в котором используются титанические данные из kaggle ,

ONE_HOT_ENCODER_FIT функция перекрывает категориальные данные и создает модель, которая представляет новое представление категориальных данных

 SELECT one_hot_encoder_fit('public.titanic_encoder','titanic_training','sex, embarkation_point'  USING PARAMETERS exclude_columns='', output_view='', extra_levels='{}');

==================
varchar_categories
==================
  category_name  |category_level|category_level_index
----------------- -------------- --------------------
embarkation_point|      C       |         0
embarkation_point|      Q       |         1
embarkation_point|      S       |         2 <- note S is 2
embarkation_point|              |         3
       sex       |    female    |         0
       sex       |     male     |         1 <-- note male is 1
 

Затем, применяя titanic_encoder подобную модель к titanic_training данным, почему embarkation_point_2 добавляется? Должен ли вывод содержать только категориальное значение (скажем S ) и его закодированное значение? Почему я вижу значения 0 и 1 и нет 2 (для чего кодируется значение S ? Аналогично sex M и sex_1 1

 dbadmin@2e4e746b3e6c(*)=> select * from titanic_training limit 1;
 passenger_id | survived | pclass |          name           | sex  | age | sibling_and_spouse_count | parent_and_child_count |  ticket   | fare | cabin | embarkation_point
-------------- ---------- -------- ------------------------- ------ ----- -------------------------- ------------------------ ----------- ------ ------- -------------------
            1 |        0 |      3 | Braund, Mr. Owen Harris | male |  22 |                        1 |                      0 | A/5 21171 | 7.25 |       | S <-- note S
(1 row)



dbadmin@2e4e746b3e6c(*)=> SELECT APPLY_ONE_HOT_ENCODER(* USING PARAMETERS model_name='titanic_encoder') from titanic_training limit 1;
 passenger_id | survived | pclass |          name           | sex  | sex_1 | age | sibling_and_spouse_count | parent_and_child_count |  ticket   | fare | cabin | embarkation_point | embarkation_point_1 | embarkation_point_2 (<-- why this is here)?
-------------- ---------- -------- ------------------------- ------ ------- ----- -------------------------- ------------------------ ----------- ------ ------- ------------------- --------------------- ---------------------
            1 |        0 |      3 | Braund, Mr. Owen Harris | male <- note male|     1 <- note  encoded value of male |  22 |                        1 |                      0 | A/5 21171 | 7.25 |       | S <- note S                 |                   0 <- why this is here |                   1 <-- why this is here. Where is 2?
(1 row)
 

Почему нет embarkation_point_3 ?

Ответ №1:

Есть много причин для вашего вывода. Сначала ознакомьтесь с документацией APPLY_ONE_HOT_ENCODER: https://www.vertica.com/docs/11.0.x/HTML/Content/Authoring/SQLReferenceManual/Functions/MachineLearning/APPLY_ONE_HOT_ENCODER.htm?tocpath=SQL Reference Manual|SQL Functions|Machine Learning Functions|Transformation Functions|_____5

Два параметра позволяют достичь ваших целей:

  • drop_first: установите для него значение false, чтобы получить все столбцы. Один отбрасывается из-за целей корреляции. Вы можете прочитать эту статью: https://inmachineswetrust.com/posts/drop-first-columns / Есть свои плюсы и минусы.
  • column_naming: установите для него значения, но будьте осторожны. Если у вас есть категории со специальными символами, вы можете столкнуться с некоторыми трудностями.

Badr