我现在正在尝试实现一个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_
包含很多零
有什么建议吗
目前没有回答
相关问题 更多 >
编程相关推荐