Scikit中的内核技巧和内核KMeans

2024-09-23 22:28:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在正在尝试实现一个Kernel-K-Means++算法。我想利用这个方法和nystroem在Scikit中为SVR创建一个自定义内核,因为我有一个非常大的数据集,不能用RBF内核计算

我找到了这个Github,它实现了算法的一部分作为参考: https://github.com/farhantandia/Machine-Learning-Practice/blob/master/Kernel%20K-Means%20vs%20Spectral%20Clustering/clustering.py

然后,我继续编写相同的核函数来计算gram矩阵:

from scipy.spatial.distance import squareform,pdist
def kernel_function(array,gamma_s,gamma_c):
    
    n=len(array)
    Spatial_in=np.zeros((n,2))
    for i in range(n):
        Spatial_in[i]=[i//100,i%100]
    K=squareform(np.exp(gamma_s*pdist(Spatial_in,'sqeuclidean')))*squareform(np.exp(-gamma_c*pdist(array,'sqeuclidean')))


    return K

我没有编写自己的k-means++而是将Gram矩阵作为scikit算法的输入:

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=100,init="k-means++",max_iter=500, random_state=352532, n_jobs=-1).fit(Gram)

然而,我不确定这是否是正确的方法,因为我的kmeans.cluster_centers_包含很多零

有什么建议吗


Tags: 方法infromimport算法np矩阵array