结合 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)的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 joblib 保存 scikit-learn 模型?
干货:结合Scikit-learn介绍几种常用的特征选择方法
如何使用 scikit-learn 将多项式曲线拟合到数据中?
结合sklearn的可视化工具Yellowbrick:超参与行为的可视化带来更优秀的实现
在 scikit-learn 中将 RandomizedSearchCV(或 GridSearcCV)与 LeaveOneGroupOut 交叉验证相结合