首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scikit学习中聚类的混淆矩阵

scikit学习中聚类的混淆矩阵
EN

Stack Overflow用户
提问于 2017-12-08 06:25:48
回答 2查看 11.7K关注 0票数 7

我有一套有已知标签的数据。我想尝试聚类,看看是否可以得到已知标签给出的相同的集群。为了测量准确性,我需要得到一个类似于混淆矩阵的东西。

我知道,对于一个分类问题的测试集,我可以很容易地得到一个混淆矩阵。我已经像一样尝试过了。

但是,它不能用于聚类,因为它期望列和行都具有相同的标签集,这对于分类问题是有意义的。但是对于一个集群问题,我所期望的是这样的事情。

行-实际标签 列-新的集群名称(即集群-1、集群-2等)

有办法这样做吗?

编辑:下面是更多细节。

矩阵中,它希望y_testy_pred具有相同的值,而labels则是这些值的标签。

这就是为什么它给出了一个矩阵,它对这样的行和列都有相同的标签。

但在我的例子中(KMeans聚类),实际值是String,估计值是数字(即集群数)。

因此,如果我调用confusion_matrix(y_true, y_pred),它会给出以下错误。

代码语言:javascript
复制
ValueError: Mix of label input types (string and number)

这才是真正的问题。对于分类问题,这是有意义的。但是对于集群问题,这个限制不应该存在,因为真正的标签名称和新的集群名称不需要相同。

有了这个,我知道我正在尝试使用一个工具,这个工具应该用于分类问题,用于一个聚类问题。所以,我的问题是,有什么方法可以得到这样一个矩阵,用于可能聚类数据。

希望这个问题现在更清楚了。如果不是,请告诉我。

EN

Stack Overflow用户

回答已采纳

发布于 2017-12-10 06:48:59

我自己写的代码。

代码语言:javascript
复制
# Compute confusion matrix
def confusion_matrix(act_labels, pred_labels):
    uniqueLabels = list(set(act_labels))
    clusters = list(set(pred_labels))
    cm = [[0 for i in range(len(clusters))] for i in range(len(uniqueLabels))]
    for i, act_label in enumerate(uniqueLabels):
        for j, pred_label in enumerate(pred_labels):
            if act_labels[j] == act_label:
                cm[i][pred_label] = cm[i][pred_label] + 1
    return cm

# Example
labels=['a','b','c',
        'a','b','c',
        'a','b','c',
        'a','b','c']
pred=[  1,1,2,
        0,1,2,
        1,1,1,
        0,1,2]
cnf_matrix = confusion_matrix(labels, pred)
print('\n'.join([''.join(['{:4}'.format(item) for item in row])
      for row in cnf_matrix]))

编辑: (Dayyyuumm)刚刚发现,我可以轻松地使用熊猫交叉表 :-/。

代码语言:javascript
复制
labels=['a','b','c',
        'a','b','c',
        'a','b','c',
        'a','b','c']
pred=[  1,1,2,
        0,1,2,
        1,1,1,
        0,1,2]   

# Create a DataFrame with labels and varieties as columns: df
df = pd.DataFrame({'Labels': labels, 'Clusters': pred})

# Create crosstab: ct
ct = pd.crosstab(df['Labels'], df['Clusters'])

# Display ct
print(ct)
票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47708865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档