核方法

一般而言,线性模型可以用一条直线或者一个超平面将数据分隔开,是比较容易解释和理解的。 数据若是非线性的就无法使用线性模型,但要是数据被转换成线性相关性的空间,则可以使用线性模型。

满足上述条件需要进行高昂的数学运算。选择核函数

核函数是一种相似度函数,需要两个输入参数,这两个输入参数之间的相似度即核函数的输出结果。


In [1]:
import numpy as np
# 三维的输入向量
x = np.array([10,20,30])
y = np.array([8,9,10])

定义一个映射函数来进行转换空间
phi(x1,x2,x3) = (x1x2,x1x3,x2x3,x1x1,x2x2,x3x3)
上述转换将三维空间转换成6维


In [4]:
def mapping_function(x):
    out_list = []
    for i in range(len(x)):
        out_list.append(x[i]*x[i])
    out_list.append(x[0]*x[1])
    out_list.append(x[0]*x[2])
    out_list.append(x[1]*x[0])
    out_list.append(x[1]*x[2])
    out_list.append(x[2]*x[0])
    out_list.append(x[2]*x[1])
    return np.array(out_list)

In [5]:
# 主函数
if __name__ == '__main__':
    # 应用映射函数
    tranf_x = mapping_function(x)
    tranf_y = mapping_function(y)
    # print the result
    print tranf_x
    print np.dot(tranf_x,tranf_y)
    
    # 这个和上面的核函数是等价的
    output = np.power((np.dot(x,y)),2)
    print output


[100 400 900 200 300 200 600 300 600]
313600
313600