Python:rbf_kernel()径向基核函数 调包法实现

\LARGE K(x,y)=exp(-\gamma \left \| x-y \right \|^2)

调包偷个懒 

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]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeniuHe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值