#encoding=utf8 import numpy as np #实现核函数 def kernel(x,sigma=1.0): ''' input:x(ndarray):样本 output:x(ndarray):转化后的值 ''' #********* Begin *********# #********* End *********# return x
时间: 2025-05-23 21:20:54 浏览: 18
### 使用 NumPy 实现核函数
#### 核函数的定义
核函数是一种将低维空间中的数据映射到高维空间的方法,使得原本线性不可分的数据变得可分。一种常见的核函数是高斯径向基函数(Gaussian Radial Basis Function, RBF),其数学表达式如下:
\[
K(x, z) = \exp\left(-\frac{\|x - z\|^2}{2\sigma^2}\right)
\]
其中 \(x\) 和 \(z\) 是输入样本,\(\sigma\) 是控制平滑程度的参数。
---
#### 使用 NumPy 实现 RBF 核函数
以下是基于 NumPy 的 RBF 核函数实现代码:
```python
import numpy as np
def gaussian_kernel(x, sigma=1.0):
"""
高斯径向基函数 (RBF) 实现
参数:
x: 输入样本,形状为 (n_samples, n_features) 的二维数组
sigma: 控制平滑程度的参数,默认值为 1.0
返回:
K: 转化后的值,形状与输入相同
"""
norm_squared = np.linalg.norm(x, axis=1)**2 # 计算每个样本的范数平方
result = np.exp(-norm_squared / (2 * sigma**2)) # 应用高斯公式
return result
```
在这段代码中:
- `np.linalg.norm(x, axis=1)**2` 计算了每一行(即每一个样本)的欧几里得范数平方。
- 将范数平方代入高斯公式的指数部分,并除以 \(2\sigma^2\) 后取负号。
- 最终通过 `np.exp()` 得到转化后的值。
---
#### 扩展:计算两个样本集之间的核矩阵
如果需要计算两个样本集之间所有的两两核值,可以扩展为以下形式:
```python
def rbf_kernel_matrix(X, Z, sigma=1.0):
"""
计算两个样本集之间的 RBF 核矩阵
参数:
X: 第一个样本集,形状为 (n_samples_X, n_features)
Z: 第二个样本集,形状为 (n_samples_Z, n_features)
sigma: 控制平滑程度的参数,默认值为 1.0
返回:
K: 核矩阵,形状为 (n_samples_X, n_samples_Z)
"""
XX = np.sum(X**2, axis=1, keepdims=True) # X 中每个样本的范数平方
ZZ = np.sum(Z**2, axis=1, keepdims=True).T # Z 中每个样本的范数平方
inner_product = np.dot(X, Z.T) # X 和 Z 的内积
pairwise_distances = XX + ZZ - 2 * inner_product # 两两距离平方
K = np.exp(-pairwise_distances / (2 * sigma**2))
return K
```
在此实现中:
- `XX` 和 `ZZ` 分别存储了 \(X\) 和 \(Z\) 中每个样本的范数平方。
- 利用广播机制和矩阵乘法高效地计算两两样本的距离平方。
- 最后应用高斯公式得到完整的核矩阵。
---
#### 测试代码示例
以下是对上述函数的测试代码:
```python
# 单样本测试
sample = np.array([[1, 2], [3, 4]])
sigma_value = 1.0
result_single = gaussian_kernel(sample, sigma=sigma_value)
print("单样本测试结果:", result_single)
# 核矩阵测试
X = np.array([[1, 2], [3, 4]])
Z = np.array([[5, 6], [7, 8]])
kernel_matrix_result = rbf_kernel_matrix(X, Z, sigma=sigma_value)
print("核矩阵测试结果:\n", kernel_matrix_result)
```
运行结果会显示单样本的转化值以及两个样本集之间的核矩阵。
---
#### 总结
上述代码实现了基于 NumPy 的高斯径向基函数及其对应的核矩阵计算方法。这种方法不仅适用于单一样本的处理,还能够高效地应对批量数据的情况[^1]。
---
阅读全文
相关推荐



















