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

Posted

技术标签:

【中文标题】结合 scikit-learn 模型使用 TensorFlow 预处理(tf.feature_column)【英文标题】:Using TensorFlow pre-processing (tf.feature_column) in combination with scikit-learn model 【发布时间】:2020-11-10 00:12:01 【问题描述】:

对于我最近的工作,我必须针对给定的非线性问题尝试不同的机器学习模型。我使用 TensorFlow 和 Keras 构建了逻辑回归和神经网络的工作版本。现在我必须为同样的问题构建一个 SVM 分类器。由于我在 TensorFlow 中找不到有效的 SVM 估计器,因此我正在考虑使用 scikit-learn 代替。在我的前两个模型中,我使用 tf.feature_column 来预处理我的数据(bucketized_column、embedding_column、crossed_column 等)。由于这种预处理有点复杂并且效果很好,我想知道是否可以将 TensorFlow 预处理与 scikit-learn 结合使用。

这有可能吗?或者我可以在 TensorFlow 中以某种方式使用 scikit-learn(类似于 Keras),所以我也可以使用 TensorBoard 来分析我的结果?

这里是我代码中相关部分的概述:

(feature_columns, train_ds, val_ds, test_ds) = preprocessing.getPreProcessedData(args.data, args.zip, args.batchSize)

在模型模块中,我使用此函数调用来获取预处理数据。 feature_columns 是 tf.feature_column 的不同类型映射的数组。 train_ds 等是 TensorFlow 数据集。

借助数组 feature_columns 创建 DenseFeature:

feature_layer = tf.keras.layers.DenseFeatures(feature_columns, trainable=False)

利用预处理构建 Keras 模型:

    model = tf.keras.models.Sequential([
        feature_layer,
        tf.keras.layers.Dense(1, activation=tf.nn.sigmoid)
    ])

模型的拟合:

    model.fit(train_ds,
              validation_data=val_ds,
              epochs=args.epoch,
              callbacks=[tensorboard_callback])

【问题讨论】:

您能解释一下您创建的模型中的feature_layer 是什么吗?只要格式正确且有效,TensorFlow 或 Keras 就不会创建您创建数据的方式。所以,假设train_ds 是所需的格式,应该没问题。假设您在创建模型时传递了正确的输入形状 感谢您的回答!我忘了首先添加这一行(现在我已经编辑了问题)。如您现在所见,它是tensorflow.python.feature_column.dense_features_v2.DenseFeatures 类的对象。 【参考方案1】:

我可以解决我的问题。 我写了一个新函数(feature_columns, train, val, test) = preprocessing.getPreProcessedDataframes(args.data, args.zip, args.batchSize),它返回熊猫数据帧而不是TensorFlow数据集。 之后我使用feature_layer 对作为 sklearn 分类器训练输入的数据帧应用预处理。

对数据帧应用预处理:

x_train = feature_layer(dict(train)).numpy()
x_test = feature_layer(dict(test)).numpy()

培训:

model.fit(x_train, y_train)

【讨论】:

以上是关于结合 scikit-learn 模型使用 TensorFlow 预处理(tf.feature_column)的主要内容,如果未能解决你的问题,请参考以下文章

结合Scikit-learn介绍几种常用的特征选择方法

无法使用 joblib 保存 scikit-learn 模型?

干货:结合Scikit-learn介绍几种常用的特征选择方法

如何使用 scikit-learn 将多项式曲线拟合到数据中?

结合sklearn的可视化工具Yellowbrick:超参与行为的可视化带来更优秀的实现

在 scikit-learn 中将 RandomizedSearchCV(或 GridSearcCV)与 LeaveOneGroupOut 交叉验证相结合