目前我正在做一个可能需要使用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
Run Code Online (Sandbox Code Playgroud)
我已经定义了一个名为mydist = max(xy)的度量,然后使用DistanceMetric.get_metric使其成为DistanceMetric对象:
dt=DistanceMetric.get_metric('pyfunc',func=mydist)
Run Code Online (Sandbox Code Playgroud)
从文档中,该行应该如下所示
nbrs = NearestNeighbors(n_neighbors=4, algorithm='auto',metric='pyfunc').fit(A)
distances, indices = nbrs.kneighbors(A)
Run Code Online (Sandbox Code Playgroud)
但我dt在哪里可以放入?谢谢
我有一个NxM矩阵,我想计算点NxN之间的欧几里德距离矩阵M.在我的问题中,N大约是100,000.由于我计划将此矩阵用于k近邻算法,我只需要保持k最小距离,因此得到的NxN矩阵非常稀疏.这与dist()例如导致密集矩阵(并且可能存在我的尺寸的存储问题N)的情况形成对比.
我到目前为止发现的kNN包(knnflex,kknn,等)均出现使用密集矩阵.此外,该Matrix包装不提供成对距离功能.
更接近我的目标,我发现该spam软件包具有一个nearest.dist()功能,允许人们只考虑小于某个阈值的距离,delta.然而,在我的情况下,特定值delta可能会产生太多的距离(因此我必须NxN密集地存储矩阵)或距离太远(因此我不能使用kNN).
我之前已经看到过尝试使用包执行k-means聚类的讨论bigmemory/biganalytics,但在这种情况下我似乎不能利用这些方法.
有人知道在R中以稀疏方式计算距离矩阵的函数/实现吗?我的(可怕的)备份计划是有两个for循环并将结果保存在一个Matrix对象中.
我正在尝试使用cv2(python 2.7)和opencv 3.0运行k最近邻居.我使用http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_ml/py_knn/py_knn_understanding/py_knn_understanding.html等代码复制了相同的错误消息:
import cv2
import numpy as np
import matplotlib.pyplot as plt
# Feature set containing (x,y) values of 25 known/training data
trainData = np.random.randint(0,100,(25,2)).astype(np.float32)
# Labels each one either Red or Blue with numbers 0 and 1
responses = np.random.randint(0,2,(25,1)).astype(np.float32)
# Take Red families and plot them
red = trainData[responses.ravel()==0]
plt.scatter(red[:,0],red[:,1],80,'r','^')
# Take Blue families and plot them
blue = trainData[responses.ravel()==1]
plt.scatter(blue[:,0],blue[:,1],80,'b','s')
plt.show()
newcomer = np.random.randint(0,100,(1,2)).astype(np.float32)
plt.scatter(newcomer[:,0],newcomer[:,1],80,'g','o')
#The following line is modified for OpenCV 3.0
knn …Run Code Online (Sandbox Code Playgroud) 也许我相当愚蠢,但我找不到令人满意的答案:使用KNN算法,比如k = 5.现在我尝试通过获取其最近的5个邻居来对未知对象进行分类.该怎么做,如果在确定4个最近邻居后,接下来的2个(或更多)最近的物体具有相同的距离?应该选择这两个或更多的哪个对象作为第五个最近邻居?
提前致谢 :)
我有以下 python 代码来构建 knn 图,但我有一个错误:AttributeError: 'Graph' object has no attribute 'node'。似乎 nx.Graph() 没有节点属性,但我不知道我应该用它替换什么。
import networkx as nx
def knn_graph(df, k, verbose=False):
points = [p[1:] for p in df.itertuples()]
g = nx.Graph()
if verbose: print ("Building kNN graph (k = %d)" % (k))
iterpoints = tqdm(enumerate(points), total=len(points)) if verbose else enumerate(points)
for i, p in iterpoints:
distances = map(lambda x: euclidean_distance(p, x), points)
closests = np.argsort(distances)[1:k+1] # second trough kth closest
for c in closests:
g.add_edge(i, c, weight=distances[c])
g.node[i]['pos'] = p …Run Code Online (Sandbox Code Playgroud) 我正在使用具有欧几里德距离的KNN对简单数据进行分类.我已经看到了一个关于我想用MATLAB knnsearch函数完成的例子,如下所示:
load fisheriris
x = meas(:,3:4);
gscatter(x(:,1),x(:,2),species)
newpoint = [5 1.45];
[n,d] = knnsearch(x,newpoint,'k',10);
line(x(n,1),x(n,2),'color',[.5 .5 .5],'marker','o','linestyle','none','markersize',10)
Run Code Online (Sandbox Code Playgroud)
上面的代码采用了一个新点,即[5 1.45]找到与新点最接近的10个值.任何人都可以给我看一个MATLAB算法,详细解释该knnsearch函数的作用吗?有没有其他方法可以做到这一点?
我正在创建一个基于Java的OCR.我的目标是从视频文件中提取文本(后处理).
这是一次艰难的搜索,试图找到纯粹基于Java的免费开源OCR.我发现Tess4J是唯一受欢迎的选项,但考虑到对原生界面的需求,我不知何故感到倾向于从头开发算法.
我需要创建一个可靠的OCR,只要预先定义了文本位于视频帧中的区域,就能以合理的准确度正确识别英文字母(仅限计算机化字体,而不是手写文本).我们还可以假设给出了文本的颜色.
到目前为止我做了什么:
(使用Java绑定为openCV完成的所有图像处理)
我使用以下方法提取了训练分类器的功能:
A.将字符图像下采样到12 X 12分辨率后的像素强度.(144个特征向量)
B.对于所有这些角度,使用信号的均方值,跨越8个不同角度(0,11.25,22.5 ......等)的Gabor小波变换和计算的能量.(8个特征向量)
A + B给出了图像的特征向量.(共152个特征向量)
我有62个课程用于分类,即.0,1,2 ... 9 | a,b,c,d ... y,z | A,B,C,d ... Y,Z
我使用20 x 62个样本(每个类别20个)训练分类器.
为了分类,我使用了以下两种方法:
A. ANN有1个隐藏层(120个节点).输入层有152个节点,输出有62个.隐藏和输出层具有sigmoid激活功能,网络使用弹性反向传播进行训练.
B.整个152维度的kNN分类.
我站着的地方:
k-Nearest Neighbor搜索结果是比神经网络更好的分类器(到目前为止).然而,即使使用kNN,我发现很难对以下字母进行分类:
要么
.
而且,它正在分类
作为Z ...举几个异常.
我在找什么:
我想找出以下内容:
为什么ANN表现不佳?我应该使用什么配置的网络来提高性能?我们可以微调ANN以比kNN搜索更好吗?
我可以使用哪些其他特征向量来使OCR更加健壮?
欢迎任何其他性能优化建议.
我有一个看起来像这样的数据集
1908 January 5.0 -1.4
1908 February 7.3 1.9
1908 March 6.2 0.3
1908 April NaN 2.1
1908 May NaN 7.7
1908 June 17.7 8.7
1908 July NaN 11.0
1908 August 17.5 9.7
1908 September 16.3 8.4
1908 October 14.6 8.0
1908 November 9.6 3.4
1908 December 5.8 NaN
1909 January 5.0 0.1
1909 February 5.5 -0.3
1909 March 5.6 -0.3
1909 April 12.2 3.3
1909 May 14.7 4.8
1909 June 15.0 7.5
1909 July 17.3 10.8
1909 August 18.8 …Run Code Online (Sandbox Code Playgroud) 我正在使用KNN对手写数字进行分类.我现在也已经实施了PCA以减少维数.从256我到200.但我只注意到,~0.10%的信息丢失.我删了56维.损失不应该更大吗?只有当我跌到5维时,才会有20%的损失.这是正常的吗?
我正在忙着一个涉及k-最近邻回归的项目.我混合了数字和分类领域.分类值是序数(例如银行名称,帐户类型).数字类型,例如工资和年龄.还有一些二元类型(例如,男性,女性).
如何将分类值纳入KNN分析?
据我所知,人们不能简单地将每个分类字段映射到数字键(例如,银行1 = 1;银行2 = 2等),因此我需要一种更好的方法来使用分类字段.我听说可以使用二进制数 - 这是一种可行的方法吗?建议将不胜感激.