当前位置: 首页 > 面试题库 >

Sklearn kNN用法与用户定义的指标

萧明贤
2023-03-14
问题内容

目前,我正在做一个项目,可能需要使用kNN算法查找给定点的前k个最近的邻居,例如P.
im使用python,sklearn包来完成这项工作,但我们的预定义指标不是默认指标之一指标。因此我必须使用sklearn文档中的用户定义指标,可以在此处和此处找到。

看来sklearn kNN的最新版本支持用户定义的指标,但是我找不到如何使用它:

import sklearn
from sklearn.neighbors import NearestNeighbors
import numpy as np
from sklearn.neighbors import DistanceMetric
from sklearn.neighbors.ball_tree import BallTree
BallTree.valid_metrics

说我已经定义了一个名为mydist =
max(xy)的度量,然后使用DistanceMetric.get_metric使其成为DistanceMetric对象:

dt=DistanceMetric.get_metric('pyfunc',func=mydist)

在文档中,该行应如下所示

nbrs = NearestNeighbors(n_neighbors=4, algorithm='auto',metric='pyfunc').fit(A)
distances, indices = nbrs.kneighbors(A)

但是我可以放在哪里dt?谢谢


问题答案:

您将指标作为metric参数传递,并将其他指标参数作为关键字参数传递给NN构造函数:

>>> def mydist(x, y):
...     return np.sum((x-y)**2)
...
>>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])

>>> nbrs = NearestNeighbors(n_neighbors=4, algorithm='ball_tree',
...            metric='pyfunc', func=mydist)
>>> nbrs.fit(X)
NearestNeighbors(algorithm='ball_tree', leaf_size=30, metric='pyfunc',
         n_neighbors=4, radius=1.0)
>>> nbrs.kneighbors(X)
(array([[  0.,   1.,   5.,   8.],
       [  0.,   1.,   2.,  13.],
       [  0.,   2.,   5.,  25.],
       [  0.,   1.,   5.,   8.],
       [  0.,   1.,   2.,  13.],
       [  0.,   2.,   5.,  25.]]), array([[0, 1, 2, 3],
       [1, 0, 2, 3],
       [2, 1, 0, 3],
       [3, 4, 5, 0],
       [4, 3, 5, 0],
       [5, 4, 3, 0]]))


 类似资料:
  • 我正在试图找出为什么我不能在<code>的“消息”: 当我试图解析模式时,我得到了以下错误: 线程“main” org.apache.avro.SchemaParseException中的异常:未定义的名称:“media_type”at org.apache.avro.Schema.parse(Schema.java:1162) at org.apache.avro.Schema.parse(Sc

  • 常用指标定义 一、用户类指标 启动用户:启动过该应用的用户(以独立设备为判断标准),通常也叫活跃用户。 注:用户定义以独立设备为准,其中可能会用到包括imei、mac id、Android id、IDFA、IDFV等综合设备维度指标,生成长期有效彼此不冲突的唯一设备ID 新用户:首次下载安装并激活该应用的用户。在渠道或版本统计中,仅在第一次下载时被记为渠道新用户,后续重新下载或升级版本,不算新用户

  • 我正试图通过PipelineOptions自定义用于不同GCP调用的用户代理。setUserAgent。 然而,它似乎总是回到。 看看Beam代码库,用户代理似乎是由数据流转轮强制的:https://github.com/apache/beam/blob/ce9ee0b034cef66ea3845ca049770b9a354a4fd4/runners/google-cloud-dataflow-j

  • 在我的中,我有一个名为testDB的数据库,用我的命令行我试图导出数据库,但是每次我试图运行这个命令时,我都会得到错误1449: 错误是:“使用锁表时,指定为定义器('myuser'@'')的用户不存在” 我分析了sql文件,发现该用户名只在文件底部出现一次: 如果不导出数据库,也不创建新用户,因为我无法创建新用户,我该如何解决此问题? 是否可以为我的数据库使用特定的SQL命令替换此值? 我的服务

  • 我安装了新系统(Ubuntu20.04),我安装了LAMP和克隆的Laravel项目。我创建了数据库博客,我想迁移,但我有这个错误。 SQLSTATE[HY000]:一般错误:1449指定为定义者的用户('mysql.infoschema'@'localhost')不存在(SQL:select*from information\u schema.tables,其中table\u schema=bl

  • 问题内容: 我正在寻找如下创建模型,如何在spring-data-cassandra中使用用户定义的类型? 问题答案: Spring Data Cassandra现在支持用户定义的数据类型。最新版本1.5.0.RELEASE使用Cassandra Data stax驱动程序3.1.3,因此现在可以工作。请按照以下步骤操作 如何在Spring Data Cassandra中使用UserDefined