scikit-learn 中聚类的混淆矩阵

2024-03-02

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

我知道我可以轻松获得分类问题测试集的混淆矩阵。我已经尝试过了this http://scikit-learn.org/stable/auto_examples/model_selection/plot_confusion_matrix.html.

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

行 - 实际标签

列 - 新集群名称(即 cluster-1、cluster-2 等)

有没有办法做到这一点?

Edit: 这里有更多细节。

In sklearn.metrics.confusion_matrix http://scikit-learn.org/stable/modules/generated/sklearn.metrics.confusion_matrix.html,它期望y_test and y_pred具有相同的值,并且labels成为这些值的标签。

这就是为什么它给出的矩阵的行和列具有相同的标签,如下所示。

但在我的例子(KMeans Clustering)中,实际值是字符串,估计值是数字(即簇数)

因此,如果我打电话confusion_matrix(y_true, y_pred)它给出以下错误。

ValueError: Mix of label input types (string and number)

这才是真正的问题。对于分类问题,这是有道理的。但对于聚类问题,这种限制不应该存在,因为真实的标签名称和新的聚类名称不需要相同。

有了这个,我知道我正在尝试使用一个应该用于分类问题的工具来解决聚类问题。所以,我的问题是,有没有办法为可能的聚类数据获得这样的矩阵。

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


我自己写了一段代码。

# 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]))

Edit:(Dayyyuumm)刚刚发现我可以轻松地做到这一点熊猫交叉表 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.crosstab.html :-/.

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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scikit-learn 中聚类的混淆矩阵 的相关文章

随机推荐

  • 支持不可变类的 ORM

    哪个 ORM 支持以下领域模型不可变的 types 我想编写如下所示的类 或 Scala 等效项 class A private final C c not mutable A B b init c A doSomething B b bu
  • 更新由另一个减速器管理的状态

    在我的 React 应用程序中 我的appReducer管理全局内容 例如通知 用户信息等 应用程序中的模块之一是库存模块 它有自己的减速器 即inventoryReducer 在 redux 商店中 我组合了所有减速器 当用户输入库存时
  • FactoryGirl 创建用户,但保存点在测试开始前被释放

    我正在为spec requests user pages specs运行rspec测试 require spec helper describe User pages do subject page describe home page d
  • 我可以从 Chrome 扩展程序访问站点的 localStorage 吗?

    我的 chrome 扩展有两种状态 1 某些站点在localStorage 另一个域 中有身份验证数据 所以我必须显示主窗口 2 没有身份验证数据 因此我必须显示带有登录名和密码表单的窗口 为了定义是否提供身份验证数据 我想检查他的 loc
  • 如何使用pdfkit ios 11打开pdf文件?

    我正在尝试使用新的 iOS 11 框架 pdfkit 打开 PDF 文件 但我无法做到这一点 所以帮助我使用 pdfkit 框架打开文件 先感谢您 这是基于 Objective C 的示例 Ensure PDFKit framework i
  • 推送通知警报文本的最大长度是多少?

    iOS 推送通知的警报文本的最大长度是多少 The 文档 https developer apple com go id push notifications指出通知有效负载总共必须低于 256 字节 https developer app
  • PWA 的推送通知或 Web 推送通知

    首先 我想说我一直在研究推送通知和网络通知 但我有点困惑 我从这里读到 PWA 的推送通知不适用于 Safari 上的 iOS iPhone 从 PWA 向 iOS 发送推送通知 https stackoverflow com questi
  • 如何拥有一个写入服务总线队列的异步函数?

    使用 Azure WebJobs SDK 我想创建一个异步函数 该函数将接收 ServiceBus 队列输入并写入 ServiceBus 队列输出 异步方法不能有 out 参数 例如在 BlobStorage 上 似乎可以通过使用 Stre
  • 解析 nmap 结果

    我正在 Linux 上使用 Python 2 6 开发一个项目 我在终端使用 nmap 来获取这些扫描结果 我在一个字符串中得到了这个结果 Starting Nmap 6 47 http nmap org at 2015 06 28 23
  • 创建 AMI 需要很长时间

    我正在为具有 100G 文件的服务器创建 AMI 已经过去一个多小时了 事情还没有结束 AMI 仍然显示待处理 有什么问题吗 我应该怎么办 只是为了让其他人知道 这个过程可能需要非常非常长的时间 我的 100 GB AMI 大约需要 2 5
  • Excel 2010:查找两个日期时间之间的秒数

    我有一个专栏Cal Date time 其中包含通话的日期和时间 如下所示 A B C D Number Call Date Time Duration in Sec 123 2010 01 10 01 07 24 465000 123 2
  • Android 中应用程序“资产”文件夹的路径是什么?

    我正在开发一个 Android 应用程序 希望在 apk 中捆绑一个视频文件 mp4 以便在启动应用程序时我可以播放简短的介绍视频 不幸的是 我无法弄清楚应该将该视频文件放置在项目文件夹中的哪个位置 以及如何访问它 文件的路径 我在用vid
  • Pandas:iterrow 循环的替代方案

    我有一个在 pandas 中运行的小函数 当我运行时会抛出 ValueErrorif x in y陈述 我看到了类似的问题 建议使用布尔索引 isin and where 但我无法将任何示例适应我的情况 任何建议将非常感激 附加说明 gro
  • jQuery :包含 html

    我有一个表 其中包含逗号分隔的数字列表 如下所示 td 72 76 81 td 我正在尝试选择表格单元格don t包含特定的数字 该选择器有效 td not contains 76 table 问题是可能存在包含 576 或 761 等的行
  • 如何编写无分支 std::vector 扫描?

    我想对数组编写一个简单的扫描 我有一个std vector
  • CouchDB 视图:MapReduce 中可以接受多少处理?

    我一直在尝试使用 CouchDB 进行 MapReduce 一些示例显示了映射归约函数中可能存在的一些繁重逻辑 在一种特殊情况下 他们在映射内执行 for 循环 在发出您选择的文档之前 MapReduce 是否会在每个可能的文档上运行 如果
  • void Function(int) 不是 void Function(dynamic) 的有效重写

    class Parent
  • Powershell XML:属性是否存在会改变获取值的方式

    我在 Windows 8 PC 上使用 Powershell 3 0 我有一些简单的 XML 文件 其内容如下 没有 foobar 部分 稍后会出现
  • 将数据插入通过外键链接的表中

    我正在使用 PostgreSQL Customer Customer ID Name Order Order ID Customer ID Price 要插入订单 这是我通常需要做的 例如 John 下了 1 34 价格的订单 1 Get
  • scikit-learn 中聚类的混淆矩阵

    我有一组带有已知标签的数据 我想尝试聚类 看看是否可以获得已知标签给出的相同聚类 为了测量准确性 我需要得到类似混淆矩阵的东西 我知道我可以轻松获得分类问题测试集的混淆矩阵 我已经尝试过了this http scikit learn org