Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用sklearn计算最近邻图?_Python_Machine Learning_Graph_Scikit Learn - Fatal编程技术网

Python 用sklearn计算最近邻图?

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

这个问题是关于从质心数目未知的数据集创建K-最近邻图[KNNG](这与K-means聚类不同)

假设有一个观测数据集存储在数据矩阵
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个样本应用特定于域的技术,以获得所需的结果

n_neighbors似乎也是sklearn.neighbors.kneighbors分类器的输入参数。我正在寻找一种根据经验推导n_近邻的方法。不幸的是,没有可靠的方法来选择K(Num_近邻)。这取决于您的数据集。最好的经验解决方案是使用许多不同的K值运行超参数搜索,并在保留一个测试集上选择给出最佳结果的值。如果你有很多数据,你可以建立一个k倍评估管道来搜索k。