你如何为高斯相似核设置 sigma?

数据挖掘 相似 图表 方差
2021-10-15 15:02:26

假设我们有n二维向量:

x1,,xi,,xn=(x11,x12)T,,(xi1,xi2)T,,(xn1,xn2)T
你怎么设置σ对于高斯相似核:
s(xi,xj)=exp(||xixj||22σ2)

2个回答

更新的答案

根据 Spectral Clustering ( von Luxburg ) 中的参考论文,σ 简单地设置为 1。可以通过一些可视化检查应用进一步的调整,但我没有找到有关设置此参数的任何讨论。

使用下面的代码片段可以看到效果:

import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial.distance import pdist

def gausker(x1,x2,sigma):
    dist = np.linalg.norm(x1-x2)
    return np.exp(-dist**2/(2.*(sigma**2.)))

data = np.array([[0,0],[1,1],[1,0],[0,1],[10,10],[10,9],[9,10],[9,9]])
plt.figure()
plt.plot(data[:,0],data[:,1],'o',ms=20)
plt.show()
s = np.std(pdist(data))
for sigma in [1, s, 10, 100]:
    gaus = np.zeros((8,8))
    for ii in range(8):
        for jj in range(8):
            gaus[ii,jj] = gausker(data[ii,:],data[jj,:],sigma)
    plt.figure()
    plt.imshow(gaus,extent=[0, 1, 0, 1])
    plt.colorbar()
    plt.title(str(sigma))
    plt.show()

对于机器学习算法来说最好有更多的区别。高斯相似性核关心局部相似性。图像显示内核σ=1 在此处输入图像描述

在概念上类似于 k 近邻图,因为它考虑了局部邻域并且几乎忽略了相距较远的两个节点之间的关系。

数据 $\sigma 1$ 标准开发 $\sigma 10$ $\sigma 100$

如果您进行谱聚类,您可能会发现以下感兴趣的论文:

https://papers.nips.cc/paper/2619-self-tuning-spectral-clustering.pdf

作者使用了一个 sigma,它使每个样本在本地适应本地环境。根据我的经验,在处理多尺度数据时很有用。