页面树结构

2017-11-09 ApacheCN 开源组织,第二期邀请成员活动,一起走的更远 : http://www.apachecn.org/member/209.html


MachineLearning 优酷地址 : http://i.youku.com/apachecn

转至元数据结尾
转至元数据起始

sklearn.metrics.pairwise子模块实现实用程序来评估成组样本的成对距离或亲和度。

该模块包含距离度量和内核。 这里简要介绍一下这两个。
距离度量是函数d(a,b),如果对象a和b被认为比对象a和c“更相似”,则d(a,b)<d(a,c)。 完全相同的两个物体的距离为零。 最受欢迎的例子之一是欧氏距离。 要成为一个“真实的”指标,它必须遵循以下四个条件:

1. d(a, b) >= 0, for all a and b
2. d(a, b) == 0, if and only if a = b, positive definiteness
3. d(a, b) == d(b, a), symmetry
4. d(a, c) <= d(a, b) + d(b, c), the triangle inequality

如果对象a和b被认为比对象a和c“更相似”,则内核是相似性度量,即s(a,b)> s(a,c)。 内核也必须是正半定。
有一些方法可以在距离度量和相似性度量之间进行转换,例如内核。 让D为距离,S为内核:

  1. S = np.exp(-D * gamma)其中一个启发式的选择 gamma1 / num_features
  2. S = 1. / (D / np.max(D))


余弦相似

cosine_similarity计算向量的L2归一化点积。也就是说,如果X并且ÿ是行向量,则它们的余弦相似性ķ被定义为:

这称为余弦相似性,因为欧几里得(L2)归一化将向量投影到单位球上,并且它们的点乘积是由向量表示的点之间的角度的余弦值。

该内核是计算表示为tf-idf向量的文档的相似度的流行选择。 cosine_similarity接受scipy.sparse矩阵。(请注意,tf-idf功能sklearn.feature_extraction.text 可以产生标准化向量,在这种情况下cosine_similarity 相当于linear_kernel仅较慢)。

参考文献:

线性内核

该函数linear_kernel计算线性内核,即polynomial_kernel使用degree=1coef0=0(均匀)的特殊情况。如果xy是列向量,它们的线性内核是:

多项式内核

该函数polynomial_kernel计算两个向量之间的degree-d多项式内核。多项式核表示两个向量之间的相似度。在概念上,多项式内核不仅考虑了相同维度下的向量之间的相似性,而且考虑了跨维度。当用于机器学习算法时,这允许考虑功能交互。

多项式核定义为:

哪里:

  • xy是输入矢量
  • d 是内核程度

如果内核被认为是同质的。 

Sigmoid内核

该函数sigmoid_kernel计算两个向量之间的sigmoid内核。Sigmoid内核也称为双曲正切,或多层感知器(因为在神经网络领域,它通常被用作神经元激活功能)。它被定义为:

哪里:

  • xy是输入矢量
  •  被称为斜坡
  • C_0 被称为拦截

RBF内核

该函数rbf_kernel计算两个向量之间的径向基函数(RBF)核。该内核定义为:

在哪里xy是输入向量。如果 内核被称为高斯内核的方差。 

拉普拉斯内核

该函数laplacian_kernel是径向基函数内核的一个变体,定义如下:

输入向量在哪里xy是输入向量,并且是输入向量之间的曼哈顿距离。

已经证明在ML中应用于无噪声数据是有用的。简单来说,参见量子力学的机器学习

平方内核

卡方内核是计算机视觉应用中训练非线性SVM的非常受欢迎的选择。它可以通过计算chi2_kernel,然后传递给一个sklearn.svm.SVC具有kernel="precomputed"

>>> from sklearn.svm import SVC
>>> from sklearn.metrics.pairwise import chi2_kernel
>>> X = [[0, 1], [1, 0], [.2, .8], [.7, .3]]
>>> y = [0, 1, 0, 1]
>>> K = chi2_kernel(X, gamma=.5)
>>> K                        
array([[ 1.        ,  0.36...,  0.89...,  0.58...],
       [ 0.36...,  1.        ,  0.51...,  0.83...],
       [ 0.89...,  0.51...,  1.        ,  0.77... ],
       [ 0.58...,  0.83...,  0.77... ,  1.        ]])

>>> svm = SVC(kernel='precomputed').fit(K, y)
>>> svm.predict(K)
array([0, 1, 0, 1])

 

它也可以直接用作kernel参数:

>>> svm = SVC(kernel=chi2_kernel).fit(X, y)
>>> svm.predict(X)
array([0, 1, 0, 1])

卡方平方内核由

数据被假设为非负数,并且通常被标准化为具有1的L1范数。通过连接到平方距离(即离散概率分布之间的距离)来归一化。

chi平方内核最常用于视觉词的直方图(袋)。

参考文献:

 

  • 无标签