小编afs*_*rov的帖子

使用 GridSearchCV scikit-learn 进行管道中的 KMeans

我想对我的文本数据执行聚类。为了找到最佳的文本预处理参数,我制作了管道并将其放入 GridSearchCV:

text_clf = Pipeline([('vect1', CountVectorizer(analyzer = "word"),
                   ('myfun', MyLemmanization(lemmatize=True,
                                           leave_other_words = True)),
                   ('vect2', CountVectorizer(analyzer = "word",
                                          max_df=0.95, min_df=2,
                                          max_features=2000)),
                   ('tfidf', TfidfTransformer()),
                   ('clust',   KMeans(n_clusters=10, init='k-means++',
                                      max_iter=100, n_init=1, verbose=1))])
parameters = {'myfun__lemmatize': (True, False),
              'myfun__leave_other_words': (True, False)}
gs_clf = GridSearchCV(text_clf, parameters, n_jobs=1, scoring=score)
gs_clf = gs_clf.fit(text_data)
Run Code Online (Sandbox Code Playgroud)

在哪里 score

score = make_scorer(my_f1, greater_is_better=True)
Run Code Online (Sandbox Code Playgroud)

my_f1具有以下形式:

def my_f1(labels_true, labels_pred):
    # fancy stuff goes here
Run Code Online (Sandbox Code Playgroud)

并且专为聚类设计

所以我的问题是:如何使它起作用?如何通过labels_pred,作为一个自然人,我只能做

gs_clf.fit(data)
Run Code Online (Sandbox Code Playgroud)

而在分类中有可能:

gs_clf.fit(data, labels_true)
Run Code Online (Sandbox Code Playgroud)

我知道我可以编写我的自定义函数,就像我做的那样MyLemmanization

class MyLemmanization(BaseEstimator, TransformerMixin):

    def __init__(self, …
Run Code Online (Sandbox Code Playgroud)

python pipeline cluster-analysis k-means scikit-learn

5
推荐指数
1
解决办法
3231
查看次数

解释不平衡数据集上的 AUC、准确度和 f1 分数

我试图了解在数据集不平衡的情况下,AUC 为何是比分类准确性更好的指标。
假设数据集包含 3 个类别的 1000 个示例,如下所示:

a = [[1.0, 0, 0]]*950 + [[0, 1.0, 0]]*30 + [[0, 0, 1.0]]*20
Run Code Online (Sandbox Code Playgroud)

显然,这个数据是不平衡的。
一个幼稚的策略是预测属于第一类的每个点。
假设我们有一个具有以下预测的分类器:

b = [[0.7, 0.1, 0.2]]*1000
Run Code Online (Sandbox Code Playgroud)

使用列表中的真实标签a和列表中的预测b,分类精度为 0.95。
因此,人们会认为该模型确实在分类任务上表现良好,但这并不是因为该模型正在预测一个类别中的每个点。
因此,建议使用 AUC 指标来评估不平衡的数据集。如果我们使用 TF Keras AUC
指标 预测 AUC ,我们会得到 ~0.96。 如果我们通过设置 来使用 sklearn f1-score指标来预测 f1-score ,我们会得到 0.95。
b=[[1,0,0]]*1000

现在我有点困惑,因为所有指标(准确度、AUC 和 f1-score)都显示出很高的价值,这意味着该模型非常擅长预测任务(但这里的情况并非如此)。

我在这里遗漏了哪一点以及我们应该如何解释这些价值观?
谢谢。

python scikit-learn auc multiclass-classification tensorflow2.0

2
推荐指数
1
解决办法
1548
查看次数