如何在多类分类问题上应用wide_n_deep教程?

时间:2016-09-22 04:11:51

标签: python tensorflow

在wide_n_deep教程代码中,以下两行:

df_train[LABEL_COLUMN] = (df_train["label"].apply(lambda x: '>50K' in x)).astype(int)
df_test[LABEL_COLUMN] = (df_test["label"].apply(lambda x: '>50K' in x)).astype(int)

将标签列从string更改为int。但是,似乎这种操作仅适用于两类分类数据集,即yesno10问题。

现在我希望将更广泛的模型应用于更多类,特别是数字数据而不是字符串数据。但是我得到了 TypeError: argument of type 'float' is not iterable

我还尝试删除将标签列转换为int的代码 如上所示,我得到了 tensorflow.contrib.learn.python.learn.monitors.NanLossDuringTrainingError: NaN loss during training.

那么我该如何解决这些问题呢? Wide_n_deep模型不能用于多分类吗?

3 个答案:

答案 0 :(得分:0)

如果您生成的标签大于0或1,则广泛和深度估算器确实支持多类分类。

答案 1 :(得分:0)

您可以在浮点列上执行此操作:

df_train[LABEL_COLUMN] = df_train["float_column"].astype(float)

但我有0.0准确度......也许这不是正确的答案,但它没有显示任何错误。

答案 2 :(得分:0)

如果您仍在寻求解决此问题。 tf r1.1有一个参数n_classes

estimator = DNNLinearCombinedClassifier(
# common settings
n_classes=n_classes,
weight_column_name=weight_column_name,
# wide settings
linear_feature_columns=[sparse_feature_a_x_sparse_feature_b],
linear_optimizer=tf.train.FtrlOptimizer(...),
# deep settings
dnn_feature_columns=[sparse_feature_a_emb, sparse_feature_b_emb],
dnn_hidden_units=[1000, 500, 100],
dnn_optimizer=tf.train.AdagradOptimizer(...))
  

n_classes:标签类的数量。默认为二进制分类。   请注意,类标签是表示类索引的整数(即   值从0到n_classes-1)。对于任意标签值(例如字符串   标签),首先转换为类索引。

Link to doc's