从BigQuery ML中的训练数据中排除列

时间:2018-08-15 09:30:15

标签: machine-learning google-bigquery

我正在使用BigQuery ML训练模型,我的输入有多个字段,其中一个是客户编号,此编号不能用作预测功能,但在最终输出中确实需要它,以便我可以参考哪些用户得分高或低。如何在不将其完全删除的情况下将其从模型训练中排除?

要阅读文档,我唯一能排除列的方法是将其添加到显然不是的input_label_cols或不希望使用的data_split_col中。

1 个答案:

答案 0 :(得分:2)

您不需要将不需要包含在模型中的模型字段包含在内-完全不需要。
相反,您需要在预测期间包括它们

例如在下面的模型中,您只有6个字段作为输入(承运人,原点,目的地,dep_delay,taxi_out,距离)

#standardsql
CREATE OR REPLACE MODEL flights.ontime
OPTIONS
  (model_type='logistic_reg', input_label_cols=['on_time']) AS
SELECT
  IF(arr_delay < 15, 1, 0) AS on_time,
  carrier,
  origin,
  dest,
  dep_delay,
  taxi_out,
  distance
FROM `cloud-training-demos.flights.tzcorr`
WHERE arr_delay IS NOT NULL   

在预测时,您可以使用所有额外字段,如下所示(您可以将它们放在SELECT的任何位置-但请注意,预测列将排在第一位:

#standardsql
SELECT * FROM ml.PREDICT(MODEL `cloud-training-demos.flights.ontime`, (
  SELECT
    UNIQUE_CARRIER,         -- extra column
    ORIGIN_AIRPORT_ID,      -- extra column
    IF(arr_delay < 15, 1, 0) AS on_time,
    carrier,
    origin,
    dest,
    dep_delay,
    taxi_out,
    distance
  FROM `cloud-training-demos.flights.tzcorr`
  WHERE arr_delay IS NOT NULL
  LIMIT 5
))   

显然input_label_cols and data_split_col是出于不同的目的

  

input_label_cols STRING 训练数据中的标签列名称。

     

data_split_col STRING 此选项标识用于将数据拆分为训练和评估集的列。该列不能用作功能部件或标签,并且会自动从功能部件中排除。