Sklearn:具有字符串值和自定义指标的最近邻

Posted

技术标签:

【中文标题】Sklearn:具有字符串值和自定义指标的最近邻【英文标题】:Sklearn: Nearest Neightbour with String-Values and Custom Metric 【发布时间】:2022-01-01 10:50:39 【问题描述】:

我的数据如下所示(都是字符串值)

>>> all_states[0:3]
[['A','B','Empty'],
 ['A', 'B', 'Empty'],
 ['C', 'D', 'Empty']]

我想使用自定义距离指标

def mydist(x, y):
    return 1
neigh = NearestNeighbors(n_neighbors=5, metric=mydist)

但是,当我打电话时

neigh.fit(np.array(all_states))

我得到了错误

ValueError:无法使用 dtype='numeric'

将字节/字符串数组转换为十进制数

我知道我可以使用OneHotEncoderLabelEncoder - 但我也可以不编码数据,因为我有自己的距离度量吗?

【问题讨论】:

【参考方案1】:

据我所知,机器学习模型需要根据数值数据进行训练。如果您的距离度量有办法将您的字符串转换为数字,那么它将起作用。

【讨论】:

【参考方案2】:

在help page,

metrics tr or callable, default='minkowski'

用于树的距离度量。默认度量是 minkowski,并且 p=2 是 相当于标准欧几里得度量。参见文档 可用指标列表的 DistanceMetric。如果指标是 “预先计算”,假设 X 是一个距离矩阵并且必须是正方形 合身期间。 X 可能是一个稀疏图,在这种情况下只有“非零” 元素可以被视为邻居。

您可以使用pdist documentation 并根据输入要求将其设为方形:

all_states = [['A','B','Empty'],
 ['A', 'B', 'Empty'],
 ['C', 'D', 'Empty']]

from scipy.spatial.distance import pdist,squareform
from sklearn.neighbors import NearestNeighbors

dm = squareform(pdist(all_states, mydist))
dm

array([[0., 1., 1.],
       [1., 0., 1.],
       [1., 1., 0.]])

neigh = NearestNeighbors(n_neighbors=5, metric="precomputed")  
neigh.fit(dm)

【讨论】:

以上是关于Sklearn:具有字符串值和自定义指标的最近邻的主要内容,如果未能解决你的问题,请参考以下文章

最近邻算法

NearestNeighbors sklearn 的自定义指标

高维数据中的最近邻?

使用树来加速具有周期性边界条件的 3D 阵列上的最近邻搜索

loadrunner-获取返回值和自定义参数(参数运算)

Sklearn kNN 使用用户定义的指标