Python 用sklearn计算最近邻图?
这个问题是关于从质心数目未知的数据集创建K-最近邻图[KNNG](这与K-means聚类不同) 假设有一个观测数据集存储在数据矩阵Python 用sklearn计算最近邻图?,python,machine-learning,graph,scikit-learn,Python,Machine Learning,Graph,Scikit Learn,这个问题是关于从质心数目未知的数据集创建K-最近邻图[KNNG](这与K-means聚类不同) 假设有一个观测数据集存储在数据矩阵X[n_样本,n_特征]中,每行为观测值或特征向量,每列为特征。现在假设您要使用计算X中点的(加权)值 选择每个样本使用的邻居数量的基本方法是什么?当你有大量的观察数据时,什么算法能很好地进行缩放 我在下面看到过这种蛮力方法,但当样本数据集变大时,它的效果并不好,您必须为n\u neighbories\u max选择一个良好的起始上限。这个算法有名字吗 def aut
X[n_样本,n_特征]
中,每行为观测值或特征向量,每列为特征。现在假设您要使用计算X中点的(加权)值
选择每个样本使用的邻居数量的基本方法是什么?当你有大量的观察数据时,什么算法能很好地进行缩放
我在下面看到过这种蛮力方法,但当样本数据集变大时,它的效果并不好,您必须为n\u neighbories\u max
选择一个良好的起始上限。这个算法有名字吗
def autoselect_K(X, n_neighbors_max, threshold):
# get the pairwise euclidean distance between every observation
D = sklearn.metrics.pairwise.euclidean_distances(X, X)
chosen_k = n_neighbors_max
for k in range(2, n_neighbors_max):
k_avg = []
# loop over each row in the distance matrix
for row in D:
# sort the row from smallest distance to largest distance
sorted_row = numpy.sort(row)
# calculate the mean of the smallest k+1 distances
k_avg.append(numpy.mean(sorted_row[0:k]))
# find the median of the averages
kmedian_dist = numpy.median(k_avg)
if kmedian_dist >= threshold:
chosen_k = k
break
# return the number of nearest neighbors to use
return chosen_k
- 从代码中可以看出,您正在寻找基于最近邻的分类结果。 在这种情况下,您在距离矩阵上的搜索类似于蛮力搜索,并且违背了最近邻算法的目的
- 关于最近邻居数量的选择,这取决于数据的稀疏性。它有助于将最近的邻居视为限制搜索的一种方式。而不是检查所有的样品。它会让你 将搜索范围缩小到前N个(最近邻)样本。后来 您可以对这N个样本应用特定于域的技术,以获得所需的结果