调包偷个懒
gamma默认值为X的维度倒数,即 1/X.shape[0]
import numpy as np
from sklearn.datasets import load_iris
from sklearn.metrics.pairwise import rbf_kernel
import pandas as pd
if __name__ == '__main__':
X, y = load_iris(return_X_y=True)
a = [1,2,3,4,5,6,7,8]
b = [110,111]
A = X[a]
B = X[b]
K = rbf_kernel(X=A,Y=B)
print(K)
c = [110]
C = X[c]
print(C)
K = rbf_kernel(X=A,Y=C)
print(K)
跟射命丸咲学到的rbf kernel 矩阵的如下计算方式:
import numpy as np
from sklearn.metrics.pairwise import rbf_kernel
from sklearn import datasets
from time import time
gamma = 0.1
def rbf(x,y,gamma):
return np.exp(-gamma * np.sum((x[...,None,:] - y) ** 2, axis=2))
X, y = datasets.load_iris(return_X_y=True)
s_time = time()
for _ in range(10000):
gram1 = rbf(X,X,gamma)
e_time = time()
t1 = e_time - s_time
s_time = time()
for _ in range(10000):
gram2 = rbf_kernel(X=X,Y=X,gamma=gamma)
e_time = time()
t2 = e_time - s_time
print(gram1[15,2])
print(gram2[15,2])
print(t1)
print(t2)
关于gamma参数,调包时默认为1.0/nFeature
import numpy as np
from sklearn.metrics.pairwise import rbf_kernel
from scipy.spatial.distance import pdist, squareform
A = np.array([[1,2],[3,4],[5,6],[7,8]])
print(rbf_kernel(A,gamma=0.1))
dist_matrix = squareform(pdist(A,metric='euclidean'))
dist_matrix = dist_matrix ** 2
dist_matrix = np.exp(-0.1*dist_matrix)
print(" ")
print(dist_matrix)
[[1.00000000e+00 4.49328964e-01 4.07622040e-02 7.46585808e-04]
[4.49328964e-01 1.00000000e+00 4.49328964e-01 4.07622040e-02]
[4.07622040e-02 4.49328964e-01 1.00000000e+00 4.49328964e-01]
[7.46585808e-04 4.07622040e-02 4.49328964e-01 1.00000000e+00]]
[[1.00000000e+00 4.49328964e-01 4.07622040e-02 7.46585808e-04]
[4.49328964e-01 1.00000000e+00 4.49328964e-01 4.07622040e-02]
[4.07622040e-02 4.49328964e-01 1.00000000e+00 4.49328964e-01]
[7.46585808e-04 4.07622040e-02 4.49328964e-01 1.00000000e+00]]