Rand Index函数(聚类性能评估)

2024-02-17

据我所知,python 中没有可用于 Rand Index 的软件包,而对于调整后的 Rand Index,您可以选择使用sklearn.metrics.adjusted_rand_score(labels_true, labels_pred).

我编写了兰德分数的代码,我将与其他人分享它作为该帖子的答案。


from scipy.misc import comb
from itertools import combinations
import numpy as np

def check_clusterings(labels_true, labels_pred):
    """Check that the two clusterings matching 1D integer arrays."""
    labels_true = np.asarray(labels_true)
    labels_pred = np.asarray(labels_pred)    
    # input checks
    if labels_true.ndim != 1:
        raise ValueError(
            "labels_true must be 1D: shape is %r" % (labels_true.shape,))
    if labels_pred.ndim != 1:
        raise ValueError(
            "labels_pred must be 1D: shape is %r" % (labels_pred.shape,))
    if labels_true.shape != labels_pred.shape:
        raise ValueError(
            "labels_true and labels_pred must have same size, got %d and %d"
            % (labels_true.shape[0], labels_pred.shape[0]))
    return labels_true, labels_pred

def rand_score (labels_true, labels_pred):
"""given the true and predicted labels, it will return the Rand Index."""
    check_clusterings(labels_true, labels_pred)
    my_pair = list(combinations(range(len(labels_true)), 2)) #create list of all combinations with the length of labels.
    def is_equal(x):
        return (x[0]==x[1])
    my_a = 0
    my_b = 0
    for i in range(len(my_pair)):
            if(is_equal((labels_true[my_pair[i][0]],labels_true[my_pair[i][1]])) == is_equal((labels_pred[my_pair[i][0]],labels_pred[my_pair[i][1]])) 
               and is_equal((labels_pred[my_pair[i][0]],labels_pred[my_pair[i][1]])) == True):
                my_a += 1
            if(is_equal((labels_true[my_pair[i][0]],labels_true[my_pair[i][1]])) == is_equal((labels_pred[my_pair[i][0]],labels_pred[my_pair[i][1]])) 
               and is_equal((labels_pred[my_pair[i][0]],labels_pred[my_pair[i][1]])) == False):
                my_b += 1
    my_denom = comb(len(labels_true),2)
    ri = (my_a + my_b) / my_denom
    return ri

举个简单的例子:

labels_true = [1, 1, 0, 0, 0, 0]
labels_pred = [0, 0, 0, 1, 0, 1]
rand_score (labels_true, labels_pred)
#0.46666666666666667

可能有一些方法可以改进它并使其更加Pythonic。如果您有什么建议,可以改进。

I found 这个实现 https://stats.stackexchange.com/questions/89030/rand-index-calculation这看起来更快。

import numpy as np
from scipy.misc import comb
def rand_index_score(clusters, classes):
    tp_plus_fp = comb(np.bincount(clusters), 2).sum()
    tp_plus_fn = comb(np.bincount(classes), 2).sum()
    A = np.c_[(clusters, classes)]
    tp = sum(comb(np.bincount(A[A[:, 0] == i, 1]), 2).sum()
             for i in set(clusters))
    fp = tp_plus_fp - tp
    fn = tp_plus_fn - tp
    tn = comb(len(A), 2) - tp - fp - fn
    return (tp + tn) / (tp + fp + fn + tn)

举个简单的例子:

labels_true = [1, 1, 0, 0, 0, 0]
labels_pred = [0, 0, 0, 1, 0, 1]
rand_index_score (labels_true, labels_pred)
#0.46666666666666667
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rand Index函数(聚类性能评估) 的相关文章

  • 使用 psycopg2 在 python 中执行查询时出现“编程错误:语法错误位于或附近”

    我正在运行 Python v 2 7 和 psycopg2 v 2 5 我有一个 postgresql 数据库函数 它将 SQL 查询作为文本字段返回 我使用以下代码来调用该函数并从文本字段中提取查询 cur2 execute SELECT
  • 通过 Scrapy 抓取 Google Analytics

    我一直在尝试使用 Scrapy 从 Google Analytics 获取一些数据 尽管我是一个完全的 Python 新手 但我已经取得了一些进展 我现在可以通过 Scrapy 登录 Google Analytics 但我需要发出 AJAX
  • 将数据从 python pandas 数据框导出或写入 MS Access 表

    我正在尝试将数据从 python pandas 数据框导出到现有的 MS Access 表 我想用已更新的数据替换 MS Access 表 在 python 中 我尝试使用 pandas to sql 但收到错误消息 我觉得很奇怪 使用 p
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip

随机推荐

  • 选择具有时间格式的日期查询不适用于 JDBCTemplate 和 util.Date

    我正在使用 Spring JDBCTemplate 连接数据库 当我使用下面的查询在数据库中选择日期时 select to date valid to DD MM YYYY HH24 MI SS from composition 输出为 3
  • 为什么FILE *不存储打开文件的地址

    include
  • 带有条件group by语句的MongoDB查询

    我需要从 mongoDB 数据库导出客户记录 导出的客户记录不应具有重复的值 firstName lastName code 是对记录进行重复数据删除的关键 如果数据库中存在两条具有相同键的记录 那么我需要优先考虑具有电子邮件以外的值的源字
  • 打开下载的 PDF 文件不会触发 ActivityNotFoundException

    我想从某个网址下载 PDF 并且还想触发catch如果未检测到 PDF 查看器 则使用短语 这是我的代码 try startActivity new Intent Intent ACTION VIEW Uri parse materialP
  • 请求被中止:无法创建 SSL/TLS 安全通道 [重复]

    这个问题在这里已经有答案了 可能的重复 请求被中止 无法创建 SSL TLS 安全通道 https stackoverflow com questions 2859790 the request was aborted could not
  • 如何在Excel之外执行vba宏

    我有一个 Excel 电子表格 其中包含大量 VBA 和宏 其中包括一个按钮 如何从Python 例如 在Excel之外执行Excel中的VBA代码 特别是单击按钮并触发其onclick事件 Note 我愿意接受不同语言的答案 例如 C C
  • Sharepoint UserProfileManager 没有管理用户配置文件权限

    我有一个让我有点抓狂的问题 使用 UserProfileManager 作为未经授权的用户 问题 用户没有 管理用户配置文件 权限 但我仍然想使用 UserProfileManager 使用 SPSecurity RunWithElevat
  • 反转 HList 并转换为类?

    我使用 Shapeless 在 Akka 中累积物化值作为 HList 并将其转换为案例类 对于这个问题 您不必了解 Akka 太多 但默认方法将物化值累积为递归嵌套的 2 元组 这并不是很有趣 因此 Shapeless HLists 似乎
  • 通过 Socket 连接使用 PrintWriter 将 PDF 文件打印到打印机

    我必须使用具有特定 IP 地址的打印机打印 pdf 文件 我可以打印特定的文本 但我想打印文件或 html 解析的文本 My Code try Socket sock new Socket 192 168 0 131 9100 PrintW
  • NetFSMountURLSync 无法使用自定义安装点?

    我正在尝试以编程方式挂载一些 WebDAV 和 SMB 共享 并且我想为卷指定除默认名称之外的特定名称 例如 如果我安装 https my sharepoint school edu personal grigutis https my s
  • Android AppWidget 配置 - 在新任务中启动

    我一直在寻找这个 所以我有一个应用程序小部件 它有一个配置活动 我可以在按下应用程序上的按钮时打开该活动 场景是 打开应用程序 使用主页按钮关闭应用程序 选择添加我的小部件 我已经配置了小部件 放置在我的主屏幕上 然后使用小部件上的按钮再次
  • 如何在perl中读取匹配字符串上方的n行?

    假设我有一个文件 xx txt 它包含数据 1 I am here 2 to work in 3 Perl for writing 4 a script for 5 myself 假设我想搜索字符串脚本并想显示三个 上面有几行 我该怎么办
  • int a=1, b=a++; 是否调用未定义的行为?

    Does int a 1 b a 调用未定义的行为 初始化之间没有序列点介入a及其在初始化程序中的访问和修改b 但据我所知 初始化不是对象的 修改 指定初始值设定项来给出对象的 初始值 根据 6 7 8 初始化 第 8 段 初始化器指定存储
  • 可以直接用二进制写程序吗?我怎样才能让计算机执行它?

    我知道这可能看起来很奇怪并且自找麻烦 但我认为体验古代程序员以前经历过的事情是很有趣的 那么如何执行仅用二进制编写的程序呢 假设我知道我在做什么 当然不使用汇编 我只想写一系列像111010111010101010101并执行它 那么我该怎
  • 如何使用 WPF 后台工作者

    在我的应用程序中 我需要执行一系列初始化步骤 这些步骤需要 7 8 秒才能完成 在此期间我的 UI 变得无响应 为了解决这个问题 我在一个单独的线程中执行初始化 public void Initialization Thread initT
  • -XX:+PrintGC 和 -verbose:gc 之间的区别

    我想了解以下之间的区别 XX PrintGC and verbose gc显然这些看起来很相似 本文没有列出verbose gc http www oracle com technetwork articles java vmoptions
  • 如何使用 TFS 构建服务器中的模板运行 NUnit 测试

    我需要使用 TFS Server 2010 中的工作流模板运行 nUnit 测试 我找到了下面所有解释如何配置构建服务器的参考资料 http morten lyhr dk 2008 05 using nunit and ncover wit
  • Error62:在 VBA 脚本中输入文件末尾以搜索目录中包含关键字的文件

    希望有人能够指出我误入歧途的地方 我创建了一个脚本来搜索目录中的所有文件 并返回包含已输入到单元格中的特定关键字的任何文件的文件路径和文件名 该脚本似乎适用于我在桌面上设置的测试文件夹 但是当我尝试搜索包含更多文件的另一个目录时 我收到 输
  • 自定义活动设计器中的参数验证

    我在验证自定义活动的设计器中正常工作时遇到问题 重现该行为的最简单示例如下 我有一个自定义 WF4 活动 其中包含存储在字典中的动态参数集合 Designer typeof DictionaryActivityDesigner public
  • Rand Index函数(聚类性能评估)

    据我所知 python 中没有可用于 Rand Index 的软件包 而对于调整后的 Rand Index 您可以选择使用sklearn metrics adjusted rand score labels true labels pred