feature_columns 的项目必须是 _FeatureColumn 给定:_VocabularyListCategoricalColumn

Posted

技术标签:

【中文标题】feature_columns 的项目必须是 _FeatureColumn 给定:_VocabularyListCategoricalColumn【英文标题】:Items of feature_columns must be a _FeatureColumn Given: _VocabularyListCategoricalColumn 【发布时间】:2018-02-05 01:36:51 【问题描述】:

我正在尝试从 this dataset 创建 my_feature_columns 列表。我正在用这段代码阅读它:

train = pd.read_csv(train_path, names=CSV_COLUMN_NAMES, header=0)
train = train.drop(['Name', 'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'], axis=1)
train.fillna(0, inplace=True)

我只想使用“Pclass”、“Sex”和“Age”。由于Sex 只有 2 个可能的值,我编写了这段代码:

my_feature_columns = [
    tf.feature_column.numeric_column(key='Pclass'),
    tf.feature_column.categorical_column_with_vocabulary_list(key="Sex", vocabulary_list=["male", "female"]),
    tf.feature_column.numeric_column(key='Age'),
]

然后我实例化分类器:

classifier = tf.estimator.DNNClassifier(
        feature_columns=my_feature_columns,
        hidden_units=[10, 10],
        n_classes=2)

但我得到了

ValueError:feature_columns 的项目必须是 _DenseColumn。您可以使用 embedding_column 或 indicator_column 包装分类列。给定:_VocabularyListCategoricalColumn(key='Sex', words_list=('male', 'female'), dtype=tf.string, default_value=0, num_oov_buckets=0)

我是 TensorFlow 的新手,我不知道发生了什么。我会感谢各种帮助,在此先感谢,对我的英语感到抱歉。

【问题讨论】:

【参考方案1】:

再次阅读the documentation我意识到了

指标列和嵌入列从不直接作用于特征

所以我更正了我的代码:

categorical_column = tf.feature_column.categorical_column_with_vocabulary_list(key="Sex", vocabulary_list=["male", "female"], default_value=0)

my_feature_columns = [
    tf.feature_column.numeric_column(key='Pclass'),
    tf.feature_column.indicator_column(categorical_column),
    tf.feature_column.numeric_column(key='Age')
]

而且像魅力一样工作!

【讨论】:

第一次知道indicator_column怎么用,谢谢!【参考方案2】:

还有另一种方式根据This Source Code:

所以:

categorical_column = tf.feature_column.categorical_column_with_vocabulary_list(key="Sex", vocabulary_list=["male", "female"], default_value=0)

my_feature_columns = [
    tf.feature_column.numeric_column(key='Pclass'),
    embedded_group_column = tf.feature_column.embedding_column(categorical_column,dimension=number_of_categories)
    tf.feature_column.numeric_column(key='Age')
]

祝你好运!

【讨论】:

酷!谢谢!

以上是关于feature_columns 的项目必须是 _FeatureColumn 给定:_VocabularyListCategoricalColumn的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:feature_columns 的项目必须是 DenseColumn 或 CategoricalColumn

使用 Tensorflow 嵌入列会引发 All feature_columns must be _FeatureColumn instances 错误

结合 scikit-learn 模型使用 TensorFlow 预处理(tf.feature_column)

tf.feature_column实用特征工程总结

Tensorflow:如何为 numpy 矩阵输入创建 feature_columns

TensorFlow feature_column 介绍与体验