Python机器学习:SVM007高斯核函数

Python机器学习:SVM007高斯核函数_第1张图片
径向基/RBF/高斯核 都是这种形式
Python机器学习:SVM007高斯核函数_第2张图片
为了感性理解,模拟一下。。。过程
Python机器学习:SVM007高斯核函数_第3张图片
Python机器学习:SVM007高斯核函数_第4张图片
高斯核本质
l1 l2 两个地标
Python机器学习:SVM007高斯核函数_第5张图片

Python机器学习:SVM007高斯核函数_第6张图片
显然这样就线性可分了
Python机器学习:SVM007高斯核函数_第7张图片
我们只去了地标点l1 l2
高斯核去了len(x)个地标点
Python机器学习:SVM007高斯核函数_第8张图片

本质是将原本数据,映射到一个无穷维空间(样本理论上有无穷多个) 计算开销特别大~~~~~~ 有些应用适合 初始样本数据样本维度高 数量却不多 m < n 通常 就是自然语言处理领域 构建高维特征空间,然而样本的数量不多。

遗留问题
γ作用是什么?
通过代码直观理解

#直观理解高斯核函数
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-4,5,1)
x
array([-4, -3, -2, -1,  0,  1,  2,  3,  4])
y =  np.array((x >= -2) & (x <= 2),dtype= 'int')
y
array([0, 0, 1, 1, 1, 1, 1, 0, 0])
x > -2
array([False, False, False,  True,  True,  True,  True,  True,  True])
x < 2
array([ True,  True,  True,  True,  True,  True, False, False, False])
plt.scatter(x[y == 0],[0] * len(x[y == 0]))
plt.scatter(x[y == 1],[0] * len(x[y == 1]))

Python机器学习:SVM007高斯核函数_第9张图片

使用高斯核函数将数据映射到二维

#使用高斯核函数将数据映射到二维
def gaussian(x,l):
    gamma = 1.0
    return np.exp(-gamma * (x - l ) ** 2)
l1, l2 = -1,1

X_new = np.empty((len(x),2))

for i,data in enumerate(x):
    X_new[i , 0] = gaussian(data , l1)
    X_new[i , 1] = gaussian(data , l2)
print(X_new)
[[1.23409804e-04 1.38879439e-11]
 [1.83156389e-02 1.12535175e-07]
 [3.67879441e-01 1.23409804e-04]
 [1.00000000e+00 1.83156389e-02]
 [3.67879441e-01 3.67879441e-01]
 [1.83156389e-02 1.00000000e+00]
 [1.23409804e-04 3.67879441e-01]
 [1.12535175e-07 1.83156389e-02]
 [1.38879439e-11 1.23409804e-04]]
plt.scatter(X_new[y == 0,0],X_new[y == 0,1])
plt.scatter(X_new[y == 1,0],X_new[y == 1,1])

Python机器学习:SVM007高斯核函数_第10张图片

你可能感兴趣的:(Python机器学习)