Kernel(核函数)

1.kernel介绍

机器学习有两个常见问题:1.加权。2.求相似性(距离)。

一般来说,相似性高了权值就大了,但是具体怎么求?
可以用
1.k近邻(距离越近权越大)
2.Nadaraya-Watson估计(距离越远权越大)
f(x) = wTy
其中w是 wii= К(xi,μ)
其中К(xi,μ)是核函数,这里又叫相似函数。也就是求距离的一个方法。这也就是xi和其他x的距离。

讲几个常用的kernel形式:
1.基本高斯kernel:
К(xi,μ)
2.如果∑是对角矩阵那么可以写成:
在这里插入图片描述
3.如果对角矩阵上的值都一样那么可以写成:
在这里插入图片描述
4.在这里插入图片描述
这个经常用在NLP里,xi在里面表示一个向量,向量里的元素xij表示里第j个word在i篇出现的次数,这样效果其实不好。很多词没有区分度,后来我们就用TF-IDF(一个上面这个算法的优化)做这个。

2.怎么学kernel

-Maximizing likelihood(最大似然估计)
-MKL (multiple kernel learning)
К(x,x) = ∑jwjКj(x,x)
Кj(x,x) 是一个第j个小kernel,咱们要用的是加权结果К(x,x) 。
-Adaptive basis function model (ABM)
在这里插入图片描述
这个式子里咱们要学的是w0和Φ我们都要学。

3.代码

# -*- coding: utf-8 -*-
"""
Created on Thu Nov 19 22:26:36 2020

@author: 13056
"""
from sklearn import svm,datasets
import numpy as np
import matplotlib.pyplot as plt

iris = datasets.load_iris();
print("iris的类型",type(iris))
print('iris的属性',iris.keys())

X = iris.data[:,:2]
#拿二维属性
Y = iris.target

# create instances of svm
linear = svm.SVC(kernel = 'linear').fit(X,Y)#W'x
rbf = svm.SVC(kernel = 'rbf', gamma = 0.7).fit(X,Y)
poly = svm.SVC(kernel = 'poly', degree = 3).fit(X,Y)

# create a mesh
x0_min, x0_max = X[:,0].min()-0.1, X[:,0].max()+0.1
x1_min, x1_max = X[:,1].min()-0.1, X[:,1].max()+0.1
h = .02 # step size in the mesh
xx,yy = np.meshgrid(np.arange(x0_min,x0_max,h),np.arange(x1_min,x1_max,h))

titles = ['linear','rbf','poly']
for i,clf in enumerate((linear,rbf,poly)):
    plt.subplot(1,3,i+1)
    plt.subplots_adjust(wspace = 0.4, hspace = 0.4)
    Z = clf.predict(np.c_[xx.ravel(),yy.ravel()])
    Z = Z.reshape(xx.shape)
    #Z = np.random.randint(0,3,xx.shape)
    
    #draw decision boundary
    plt.contourf(xx,yy,Z,cmap = plt.cm.cool)
    plt.scatter(X[:,0],X[:,1],c = Y, cmap = plt.cm.cool)
    plt.title(titles[i])
plt.show()

结果:在这里插入图片描述
不同颜色的是不同类的。

猜你喜欢

转载自blog.csdn.net/weixin_45743162/article/details/109826996
今日推荐