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'
将字节/字符串数组转换为十进制数我知道我可以使用OneHotEncoder
或LabelEncoder
- 但我也可以不编码数据,因为我有自己的距离度量吗?
【问题讨论】:
【参考方案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:具有字符串值和自定义指标的最近邻的主要内容,如果未能解决你的问题,请参考以下文章