如果在一个数字特征列中没有可用的训练数据,预测应该返回0。

问题描述 投票:0回答:1

我试图预测一篇文章是否被卖掉。

我有一个DNNLinearCombined分类器,有描述、类别、尺寸、价格等。而标签0代表未售出,1代表已售出。

    sold    description category_id size_id gender  price   host_id lat long    year    month
0   1   [dünne, jacke, gepunktet, , , , , , ]   9   25  f   3.5 1   48.21534    11.29949    2019    3
1   1   [kleid, pudel, dunkelblau, gepunktet, , , , , ] 9   25  f   4.0 1   48.21534    11.29949    2019    3
2   0   [kleid, rosa, hum, hund, katze, , , , ] 9   24  f   4.0 1   48.21534    11.29949    2019    3
3   1   [kleid, hum, blau, elsa, und, anna, , , ]   9   24  f   4.0 1   48.21534    11.29949    2019    3
4   0   [kleid, blue, seven, lachsfarben, , , , , ] 9   23  f   4.5 1   48.21534    11.29949    2019    3
text_column = tf.feature_column.categorical_column_with_vocabulary_list(key='description',                                                     vocabulary_list=list(word_index))
text_embedding = tf.feature_column.embedding_column(text_column, dimension=50, combiner='sqrtn')

CATEGORICAL_COLUMNS = ['category_id', 'size_id', 'host_id']
NUMERIC_COLUMNS = ['price','lat', 'long', 'year', 'month']
feature_columns = []

for feature_name in CATEGORICAL_COLUMNS:
  vocabulary = dftrain[feature_name].unique()
  feature_columns.append(feature_column.categorical_column_with_vocabulary_list(feature_name, vocabulary))

for feature_name in NUMERIC_COLUMNS:
  feature_columns.append(feature_column.numeric_column(feature_name, dtype=tf.float32))

est = tf.estimator.DNNLinearCombinedClassifier(linear_feature_columns=feature_columns, dnn_hidden_units=[100],dnn_feature_columns=[text_embedding],
    n_classes=2,
    dnn_optimizer=tf.keras.optimizers.Adagrad(lr=0.003))

问题是,价格作为数值列对预测的影响非常小,因为有的文章价格相同,有的文章卖出,有的文章没有卖出。但一般情况下,价格应该与同类别、同尺寸、同描述的已售商品在同一区域。例如,如果一篇文章的价格是2欧元,预测率是39.6%,但如果我把同一篇文章的价格设置为100欧元,预测率是39.4%。但这是不正确的,它必须低于1%。训练数据中没有其他文章有这么高的价格。

如果没有几乎相同价格的训练数据,我如何定义价格列,使完整的预测几乎为零?

请教

tensorflow predict feature-engineering
1个回答
0
投票

这里的一些想法。

  1. 你应该把 "年 "和 "月 "看作是分类特征,而不是数字特征。它们是分类序数特征,而不是标量。

  2. 你为什么不尝试使用DNNLinearCombined Regressor呢?它将预测一个0和1之间的值,你应该找到正确的极限来决定预测值是0还是1。

  3. 如果月号有意义,你可以尝试使用DNNLinearCombined Regressor。时间序列而不是回归。我建议你把 "年 "和 "月 "这两个特征合并成一个日期或整数类型的特征(为每个日期设置一个唯一的整数值)。

  4. 如果你还想使用Classifier,请注意之前对你的训练数据进行ballance。

© www.soinside.com 2019 - 2024. All rights reserved.