这是我用来执行二进制分类的线性分类器,下面是代码片段:
my_optimizer = tf.train.AdagradOptimizer(learning_rate = learning_rate)
my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer,5.0)
# Create a linear classifier object
linear_classifier = tf.estimator.LinearClassifier(
feature_columns = feature_columns,
optimizer = my_optimizer
)
linear_classifier.train(input_fn = training_input_fn, steps = steps)
数据集是不平衡的,只有两个类是/否。NO类示例的数量为36548,而YES类示例的数量为4640。
我如何将平衡应用到这些数据上呢?我一直在四处搜索,我可以找到与类权重等相关的东西,但我找不到如何创建类权重以及如何应用到tensorflow 的训练方法。
下面是我计算损失的方法:
training_probabilities = linear_classifier.predict(input_fn = training_predict_input_fn)
training_probabilities = np.array([item['probabilities'] for item in training_probabilities])
validation_probabilities = linear_classifier.predict(input_fn=validation_predict_input_fn)
validation_probabilities = np.array([item['probabilities'] for item in validation_probabilities])
training_log_loss = metrics.log_loss(training_targets, training_probabilities)
validation_log_loss = metrics.log_loss(validation_targets, validation_probabilities)
1条答案
按热度按时间50few1ms1#
我假设您使用sklearn中的
log_loss
函数来计算损失。如果是这种情况,您可以使用参数sample_weight
添加类权重,并传递一个包含每个数据点的权重的数组。sample_weight
是class_weights
的推出版本。您可以通过传递给定here的样本权重来计算sample_weight
数组。将下列行添加到代码中: