sklearn最近邻与分组数据

我正在尝试使用 k-最近邻分类器进行基于组的离开一个交叉验证 (LOOCV) 的泛化。标准 LOOCV 查找每个数据点的 k-最近邻,不包括点本身。在我的场景中,每个数据点除了其特征之外还与组变量 (如收集日期) 相关联。我想找到每个数据点的 k-最近邻,不包括同一组中的所有点 (例如,以获取

我正在尝试使用 k-最近邻分类器进行基于组的离开一个交叉验证 (LOOCV) 的泛化。标准 LOOCV 查找每个数据点的 k-最近邻,不包括点本身。在我的场景中,每个数据点除了其特征之外还与组变量 (如收集日期) 相关联。我想找到每个数据点的 k-最近邻,不包括同一组中的所有点 (例如,以获取

这是简单的实现(下面),但我正在寻找一个更清洁的解决方案,理想情况下几个标准库调用,这也是有效的,即利用 sklearn 的优化 NearestNeighbors 搜索像“球树”算法。

设置示例数据和导入库:

import pandas as pd
import numpy as np
from sklearn.neighbors import NearestNeighbors
np.random.seed(0)
group = pd.Series(['a', 'b', 'a', 'c', 'b', 'c'])
X = pd.DataFrame(np.random.rand(len(group), 2))

标准 LOOCV 所需的 k 最近邻可以通过单个库调用轻松计算:

# k nearest neighbor of query point, excluding query point
k = 2
nbrs = NearestNeighbors(n_neighbors=k)
nbrs.fit(X)
nbrs.kneighbors(return_distance=False)

但是找到基于组的排除的 k 最近邻居似乎需要迭代组,当有许多组时,这将是缓慢的:

# Inefficient for large number of groups: uses each group of data number_of_groups^2 times.
def kneighbors(X, group, k):
    """k nearest neighbors of each query point, excluding all points in query point's group."""
    def kneighbors_group(g):
        """k nearest neighbors of all points in group g, excluding points in group g."""
        Xg = X.loc[group==g, :]
        Xnotg = X.loc[group!=g, :]
        obj = NearestNeighbors(n_neighbors=min(k, Xnotg.shape[0]))  # prevent number of neighbors from exceeding size of remaining data
        obj.fit(Xnotg)
        nbrs_notg_local = obj.kneighbors(X=Xg, return_distance=False)  # locally indexed neighbors
        nbrs_notg = [list(Xnotg.index[a]) for a in nbrs_notg_local]    # globally indexed neighbors
        return pd.Series(nbrs_notg, index=Xg.index)
    # concatenate neighbors of each group and restore initial data order
    return pd.concat([kneighbors_group(g) for g in group.unique()], axis=0).loc[X.index]
kneighbors(X, group, k)

我正在考虑的另一个选择是使用自定义距离度量,其中同一组中的点将被定义为具有距离无穷大。但我认为这在较大的数据集上太慢,因为它不能利用 sklearn 的高效搜索算法。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(651)
Word内容控件-字段:从字段中的数据在文档上自动执行 QR码
上一篇
FileMakerPro和Onedrive
下一篇

相关推荐

  • python机器学习sklearn代码moshPython课程中的语法错误。如果有人可以帮助我 我将不胜感激

    我正在使用 Mosh 编程进行 Python 课程,并且在某些机器学习代码中出现错误…

    2022-11-11 15:12:26
    0 33 86
  • 结婚程序安排表:数据在2并排表laravel

    关于结婚程序安排表的问题,在side table python中经常遇到,我有一个数据库有 4 列和数据多达 50 个条目...我不想显示表全页宽度只有 4 列。所以想并排显示 2 个表,这将显示第一个表中的数据,然后继续到 2 个表。参考附加的图像。表中的数据对于每个 ID 都是不同的。…

    2022-12-05 09:02:55
    0 82 86
  • Sql数据库有什么用:sql注入中orderby有什么用

    关于Sql数据库有什么用的问题,在sql injection order by中经常遇到,我正在学习 SQL 注入,我似乎无法完全理解语句的顺序。这里在 wwwschools 中的定义是,这按升序或降序排序给定的表。当我使用整数时会发生什么?…

    2022-12-24 11:27:52
    0 51 76
  • 东北石油大学代码:石油公告每周燃料数据:进口到R

    关于东北石油大学代码的问题,在oil bulletin中经常遇到,Background…

    2022-12-11 12:32:13
    0 12 40
  • 创建数据库的表:Artisan 在数据库中创建表

    关于创建数据库的表的问题,在laravel migrations中经常遇到,我正在尝试在 Laravel 5 中创建 mysql 表。我在/project/database/migrations中创建了一个名为users.php的文件:…

    2022-12-06 07:57:25
    0 84 48
  • E sun:Sun着色器不工作(sun shader)

    关于E sun的问题,在sun shader中经常遇到,我试图让一个太阳着色器工作,但我不能让它工作。我目前得到的是我屏幕左下角四分之一的圆圈 / elipsis,那真的卡在我的屏幕上了 (如果我移动相机,它也会移动)。…

    2022-11-28 09:57:26
    0 88 95
  • 外文文献检索数据库:如何从Firebase数据库中检索数据

    关于外文文献检索数据库的问题,在firebase data中经常遇到,我试图创建一个简单的程序,从用户获取姓名,手机号码和电子邮件地址,然后将数据放在 Firebase 实时数据库上。…

    2022-12-29 03:54:04
    0 94 63
  • Transverse:最大整数的横向数组(transversed)

    关于Transverse的问题,在transversed中经常遇到,更新:我知道 BASIC java,嗯...基本的基础。我真的不明白任何答案,因为我们在课程的早期。我知道这应该是一次学习经历,但是给我答案对我有所帮助,因为我能够推导出大多数东西的含义和学习,因为我以前不知道“max”或任何东西。…

    2022-12-27 08:55:39
    0 89 11

发表评论

登录 后才能评论

评论列表(50条)