我目前有一个reddit-clone类型的网站.我正在尝试根据用户之前喜欢的帖子推荐帖子.
似乎K最近邻居或k均值是最好的方法.
我似乎无法理解如何实际实现这一点.我已经看到了一些数学公式(比如k上的那个就意味着维基百科页面),但它们对我来说并没有多大意义.
有人可能会推荐一些伪代码,或者看看这些地方,以便我可以更好地了解如何做到这一点?
我有7个类需要分类,我有10个功能.在这种情况下我是否需要使用k的最佳值,或者我必须运行KNN以获得介于1和10(大约10)之间的k值,并在算法本身的帮助下确定最佳值?
我希望对具有大多数分类功能的数据进行分类.为此目的,欧几里德距离(或任何其他数字假定距离)不适合.
我在寻找[R]的kNN实现,可以选择不同的距离方法,如汉明距离.有没有办法使用常见的kNN实现,如{class}中具有不同距离度量函数的实现?
我正在使用R 2.15
是否有一个包或一种简单的方法来使用R来搜索一个点的k-最近邻居(特别是kd树)?提供此功能的所有包(例如RANN或FNN ...)计算矩阵中所有点的knn,我只需要一个点.
例如,我有一个10点"A"到"E"的矩阵,我想在"A"中找到4个其他点("B"到"E")之间的2个最近邻居,而不对所有人做同样的计算数据集中的行(不计算"B","C","D","E"的knn)
我希望我的问题很明确,我的英语不好.
谢谢你的帮助,
通过将PCA添加到算法中,我正在努力提高kaggle数字识别教程的%96.5 SKlearn kNN预测分数,但基于PCA输出的新kNN预测非常可怕,如23%.
下面是完整的代码,如果你指出我错在哪里,我感激不尽.
import pandas as pd
import numpy as np
import pylab as pl
import os as os
from sklearn import metrics
%pylab inline
os.chdir("/users/******/desktop/python")
traindata=pd.read_csv("train.csv")
traindata=np.array(traindata)
traindata=traindata.astype(float)
X,y=traindata[:,1:],traindata[:,0]
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test= train_test_split(X,y,test_size=0.25, random_state=33)
#scale & PCA train data
from sklearn import preprocessing
from sklearn.decomposition import PCA
X_train_scaled = preprocessing.scale(X_train)
estimator = PCA(n_components=350)
X_train_pca = estimator.fit_transform(X_train_scaled)
# sum(estimator.explained_variance_ratio_) = 0.96
from sklearn.neighbors import KNeighborsClassifier
neigh = KNeighborsClassifier(n_neighbors=6)
neigh.fit(X_train_pca,y_train)
# scale & PCA test …Run Code Online (Sandbox Code Playgroud) 我要求调用将颜色值的样本集与已知的值集匹配,以找到完全匹配或匹配在可接受的距离内.我不完全确定哪种算法最适合这个,我正在寻找建议.
我考虑使用SQL查询,因为我认为这将是一种简单的方法,但是,理想情况下,这将在应用程序服务器上内存或甚至在GPU上以最大速度完成.
示例:
假设我们给出了一组三个RGB颜色值,两个蓝色和一个橙色:
样品组:
颜色1:81,177,206(蓝色)
颜色2:36,70,224(蓝色)
颜色3:255,132,0(橙色)
这组3个颜色值必须与更大的颜色值集匹配,以查看该集合是否存在于其中,或者对于3种颜色中的每种颜色具有相同的精确RGB值 - 或者 - 如果存在RGB值的任何模式颜色的变化程度可以接受.假设任何RGB分量的值可以高达或高3位.
假设我们要搜索的大量已知颜色值如下所示:
已知集:
Color 1 Color 2 Color 3
Sample A: [25, 25, 25], [10, 10, 10], [100, 100, 100]
Sample B: [125, 125, 125], [10, 10, 10], [200, 200, 200]
Sample C: [13, 87, 255], [10, 10, 10], [100, 100, 100]
Sample D: [67, 111, 0], [10, 10, 10], [200, 200, 200]
Sample E: [255, 255, 255], [10, 10, 10], [100, 100, 100]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,当我们运行我们的样本集时,我们会发现零匹配,因为没有任何已知颜色的颜色1接近我们的样本集值.然而,让我们的另一种颜色添加到组已知这将返回正匹配: …
在MATLAB中,有没有办法更新KDTreeSearcher中的数据点?
我从一个带有所有N个数据点(也就是观察点)的树开始,并且在选择一个点之后迭代地从树中搜索一个点,我需要使该点无效直到后一阶段.
使用所有数据(如createns)构建树的能力以及将标记点标记为有效/无效或启用/禁用的能力就足够了.
当所有点无效时,过程结束时,将有大量删除(失效)和更少的添加(重新验证).
我见过关于scikit-learn kd-tree的类似问题,但它没有答案.
这个问题涉及KDTrees的KNN搜索的实现。遍历KDTree来找到单个最佳匹配(最近邻居)很简单,类似于修改后的二进制搜索。
如何修改遍历以详尽有效地找到k个最佳匹配(KNN)?
编辑以澄清问题:找到最接近输入查询I的节点M之后,遍历算法如何继续查找剩余的K-1最接近查询的匹配项?是否有一个遍历模式可以确保以与查询最佳或最差的顺序访问节点?
我已经在KNN分类算法上训练了模型,并且获得了约97%的准确度。但是,后来我发现我错过了对数据进行归一化的工作,对数据进行了归一化并重新训练了模型,现在我的准确率仅为87%。可能是什么原因?我应该坚持使用未规范化的数据,还是应该切换到规范化版本。
我已经设置了简单的实验来检查运行sklearn GridSearchCV时多核CPU的重要性KNeighborsClassifier.我得到的结果令我感到惊讶,我想知道我是否误解了多核的好处或者我没有做对.
2-8个工作的完成时间没有差异.怎么会 ?我注意到CPU性能选项卡上的差异.当第一个单元运行时,CPU使用率为~13%,并且最后一个单元逐渐增加到100%.我期待它完成得更快.也许不是线性更快,即8个工作比4个工作快2倍,但速度要快一些.
我就是这样设置的:
我使用的是jupyter-notebook,cell指的是jupyter-notebook cell.
我已加载MNIST并使用0.05测试大小来3000表示数字X_play.
from sklearn.datasets import fetch_mldata
from sklearn.model_selection import train_test_split
mnist = fetch_mldata('MNIST original')
X, y = mnist["data"], mnist['target']
X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]
_, X_play, _, y_play = train_test_split(X_train, y_train, test_size=0.05, random_state=42, stratify=y_train, shuffle=True)
Run Code Online (Sandbox Code Playgroud)
在下一个单元格中我设置KNN了一个GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
knn_clf = KNeighborsClassifier()
param_grid = [{'weights': ["uniform", "distance"], 'n_neighbors': [3, 4, 5]}]
Run Code Online (Sandbox Code Playgroud)
然后我为8个n_jobs值完成了8个单元格.我的CPU是i7-4770,有4个内核8个线程.
grid_search …Run Code Online (Sandbox Code Playgroud)