Scikit-learn 微调:在评估前对预测标签进行后处理

Long Le

我想知道是否有一种方法可以在 sklearn 中对预测标签进行后处理。我的训练数据具有以下形式的真实标签0, 1

但是,问题是我目前正在使用 Isolation Forest,它预测:

  • -1 对于异常值,相当于真实标签 1
  • 1 对于普通数据,相当于ground-truth label 0

如果我要编写一个函数来对预测进行后处理,那将非常简单:

def process_anomaly_labels(raw_y_pred):
    y_pred = raw_y_pred.copy()
    y_pred[raw_y_pred == 1] = 0
    y_pred[raw_y_pred == -1] = 1
    return y_pred

但是当我使用 RandomSearchCV 微调模型时,我不知道如何对预测标签进行后处理:

from sklearn.model_selection import RandomizedSearchCV
# fine tuning
forest_params = {
    "n_estimators": [50, 200, 800],
    "max_samples": [1000, 4000, 16000, 64000, 120000],
    "max_features": [1, 5, 15, 30],
    "contamination": [0.001, 0.1, 0.2, 0.5]
}
forest_grid_search = RandomizedSearchCV(
    IsolationForest(),
    param_distributions=forest_params,
    scoring="f1",
    n_jobs=8,
    n_iter=50,
    cv=3,
    verbose=2
)
forest_grid_search.fit(X_train_trans, y_train)

我无法将真实标签转换为与预测标签匹配,因为我想在评估时使用二进制F1 分数。

简·K

按照评论中的建议,编写一个自定义评分器来执行所需的映射。

示例代码

from sklearn.metrics import make_scorer, f1_score
from sklearn.ensemble import IsolationForest
from sklearn.datasets import make_blobs
from sklearn.model_selection import RandomizedSearchCV
import numpy as np

def relabeled_f1_score(y_true, y_pred):
    y_pred_c = y_pred.copy()
    y_pred_c[y_pred_c == 1] = 0
    y_pred_c[y_pred_c == -1] = 1
    return f1_score(y_true=y_true, y_pred=y_pred_c)

n_samples = 1000
n_features = 40

X, _ = make_blobs(n_samples=n_samples, n_features=n_features)
y = np.random.choice([0, 1], n_samples)  # 1 = outlier, 0 = inliner

param_grid = {
    "n_estimators": [50, 200, 800],
    "max_samples": [1000, 4000, 16000, 64000, 120000],
    "max_features": [1, 5, 15, 30],
    "contamination": [0.001, 0.1, 0.2, 0.5]
}

custom_scorer = make_scorer(score_func=relabeled_f1_score, greater_is_better=True)
my_rs = RandomizedSearchCV(IsolationForest(), param_distributions=param_grid, scoring=custom_scorer, verbose=3)

my_rs.fit(X, y)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用 scikit learn 预测目标标签

来自分类Dev

scikit-learn进行回归模型评估

来自分类Dev

处理 scikit-learn MLPClassifier 的分类标签

来自分类Dev

如何使用scikit-learn评估预测的置信度得分

来自分类Dev

使用scikit-learn处理分类特征

来自分类Dev

使用scikit-learn处理分类特征

来自分类Dev

使用Scikit Learn进行Unigram分析

来自分类Dev

如何在scikit-learn中预测时间序列?

来自分类Dev

使用scikit-learn预测有趣的文章

来自分类Dev

Scikit-Learn:使用DBSCAN预测新点

来自分类Dev

使用scikit-learn的Imputer模块预测缺失值

来自分类Dev

使用scikit-learn预测电影评论

来自分类Dev

scikit-learn:如何缩减“ y”预测结果

来自分类Dev

GridSearchCV和预测错误分析(scikit-learn)

来自分类Dev

使用scikit-learn预测单个值会导致ValueError

来自分类Dev

使用scikit-learn预测有趣的文章

来自分类Dev

使用scikit-learn预测电影评论

来自分类Dev

Scikit-Learn:如何检索KFold CV的预测概率?

来自分类Dev

从 scikit-learn 模型列表中迭代预测

来自分类Dev

Scikit-learn:用于群集评估的ARI分数

来自分类Dev

如何使用 scikit-learn 评估基于文本的模型?

来自分类Dev

Scikit-Learn中的分层标签K折叠交叉验证

来自分类Dev

从scikit-learn / numpy中的集群中心计算标签?

来自分类Dev

使用scikit-learn处理太多分类功能

来自分类Dev

scikit-learn中处理nan / null的分类器

来自分类Dev

如何使用scikit-learn加载和处理.txt文件?

来自分类Dev

如何在scikit Learn,Python中处理名义数据?

来自分类Dev

使用scikit-learn进行二次采样+分类

来自分类Dev

使用python scikit-learn进行RFE的装袋(bootstrap)

Related 相关文章

热门标签

归档