如何在二元分类中对线性分类器应用类权重?

我正在使用以下线性分类器进行二元分类,这里是代码片段:

my_optimizer = tf.train.AdagradOptimizer(learning_rate = learning_rate)my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer,5.0)# 创建线性分类器对象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)

回答:

我假设你使用的是sklearn中的log_loss函数来计算你的损失。如果是这样的话,你可以通过使用sample_weight参数并传递一个包含每个数据点权重的数组来添加类权重。sample_weightclass_weights的展开版本。你可以按照这里给出的方法,通过传递样本权重来计算sample_weight数组。

在你的代码中添加以下几行:

sample_wts = compute_sample_weight("balanced", training_targets)training_log_loss = metrics.log_loss(training_targets, training_probabilities, sample_weight= sample_wts)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注