在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
。但是,似乎这种操作仅适用于两类分类数据集,即yes
或no
,1
或0
问题。
现在我希望将更广泛的模型应用于更多类,特别是数字数据而不是字符串数据。但是我得到了
TypeError: argument of type 'float' is not iterable
我还尝试删除将标签列转换为int
的代码
如上所示,我得到了
tensorflow.contrib.learn.python.learn.monitors.NanLossDuringTrainingError: NaN loss during training.
那么我该如何解决这些问题呢? Wide_n_deep模型不能用于多分类吗?
答案 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)。对于任意标签值(例如字符串 标签),首先转换为类索引。