1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > sklearn svm如何选择核函数_使用python+sklearn实现成对度量 相关性和核函数

sklearn svm如何选择核函数_使用python+sklearn实现成对度量 相关性和核函数

时间:2023-07-20 03:18:39

相关推荐

sklearn svm如何选择核函数_使用python+sklearn实现成对度量 相关性和核函数

sklearn.metrics.pairwise子模块实现了评估样本集的成对距离或相关性。此模块包含距离度量和内核。这里对这两个问题作了简要的总结。距离度量是函数d(a, b),如果对象ab被认为比对象ac“更相似”,则d(a, b) < d(a, c)。两个完全相似的对象距离为零。使用最为广泛的距离度量是欧几里德距离,要成为“真实的”度量,它必须遵守以下四个条件:

1. 对于所有的 a 和 b,d(a, b) >= 02. 半正定性:d(a, b) == 0, 当且仅当 a = b3. 对称性:d(a, b) == d(b, a)4. 三角不等性:d(a, c) <= d(a, b) + d(b, c)

核函数是相似性的度量,即如果对象ab被认为比对象ac“更相似”,则s(a, b) > s(a, c)。核函数也必须是半正定的(positive semi-definite)。有很多方法可以在距离度量和相似度量(如核函数)之间进行转换。设D为距离,S为核函数:

S = np.exp(-D * gamma), 其中gamma的一种选择是1 / num_featuresS = 1. / (D / np.max(D))
X的行向量和Y的行向量之间的距离可以用pairwise_distances来计算,如果省略Y,则是计算X行向量的成对距离。类似地,pairwise.pairwise_kernels可使用不同的核函数计算XY之间的 kernel 。有关更多详细信息,请参阅API参考。

>>> import numpy as np>>> from sklearn.metrics import pairwise_distances>>> from sklearn.metrics.pairwise import pairwise_kernels>>> X = np.array([[2, 3], [3, 5], [5, 8]])>>> Y = np.array([[1, 0], [2, 1]])>>> pairwise_distances(X, Y, metric='manhattan')array([[ 4., 2.],[ 7., 5.],[12., 10.]])>>> pairwise_distances(X, metric='manhattan')array([[0., 3., 8.],[3., 0., 5.],[8., 5., 0.]])>>> pairwise_kernels(X, Y, metric='linear')array([[ 2., 7.],[ 3., 11.],[ 5., 18.]])

1. 余弦相似度(cosine similarity)

cosine_similarity计算L2标准化(L2-normalized)向量的点积。即,如果x和y是行向量,则其余弦相似性k定义为:这被称为余弦相似性,因为欧几里德(L2)标准化将向量投影到单位球面上,然后它们的点积就是由向量所表示的点之间的角度余弦。该核函数是计算文档(以tf-idf向量表示的)间相似度的常用选择。cosine_similarity接受scipy.sparse矩阵。(请注意,sklearn.feature_extraction.text中的 tf-idf 函数可以生成标准化向量,在这种情况下,cosine_similarity等同于linear_kernel,速度较慢。)参考文献:C.D. Manning, P. Raghavan and H. Schütze (). Introduction to Information Retrieval. Cambridge University Press. https://nlp.stanford.edu/IR-book/html/htmledition/the-vector-space-model-for-scoring-1.html

2. 线性核函数

linear_kernel函数计算线性核函数,即degree=1coef0=0(齐次)的polynomial_kernel的一种特殊情况。如果xy是列向量,则它们的线性核函数为:

3. 多项式核函数

polynomial_kernel函数计算两个向量之间的 d 次(degree-d)多项式核函数。多项式核函数表示两个向量之间的相似性,从概念上讲,多项式核函数不仅考虑了同一维数下向量之间的相似性,而且还考虑了跨维数向量之间的相似性,当用于机器学习算法时,可以考虑特征交互性(feature interaction)。多项式核函数定义为:其中:
x,y是输入向量dis 是核函数的次数(degree)
如果,则称内核是齐次的(homogeneous)。

4. Sigmoid 核函数

sigmoid_kernel函数计算两个向量之间的sigmoid核函数。sigmoid核函数也被称为双曲正切(hyperbolic tangent)或多层感知器(因为在神经网络领域,它经常被用作神经元激活函数)。定义如下:其中:
x,y是输入向量 为斜率 为截距

5. RBF 核函数

rbf_kernel函数计算两个向量之间的径向基函数(RBF)核。此核函数定义为:其中xy是输入向量。如果,则该核函数称为方差为的高斯核函数。

6. Laplacian 核函数

laplacian_kernel函数是径向基函数核的变体,定义如下:其中xy是输入向量,是输入向量之间的曼哈顿距离。它在无噪数据的最大似然估计中得到了很好的应用。参阅量子力学的机器学习。

7. Chi-squared (卡方)核函数

chi-squared 核函数是计算机视觉应用中训练非线性支持向量机的一种常用方法。它可以使用chi2_kernel进行计算,然后通过kernel="precomputed"传递给sklearn.svm.SVC

>>> 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)>>> Karray([[1. , 0.36787944, 0.89483932, 0.58364548],[0.36787944, 1. , 0.51341712, 0.83822343],[0.89483932, 0.51341712, 1. , 0.7768366 ],[0.58364548, 0.83822343, 0.7768366 , 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])

chi squared 核函数定义为:假设数据是非负的,并且通常被标准化为L1范数。标准化是通过与卡方距离(即离散概率分布之间的距离)的连接进行合理化的。卡方距离核函数是最常用的可视化直方图(袋)。参考文献:Zhang, J. and Marszalek, M. and Lazebnik, S. and Schmid, C. Local features and kernels for classification of texture and object categories: A comprehensive study International Journal of Computer Vision /en-us/um/people/manik/projects/trade-off/papers/ZhangIJCV06.pdf

文壹由“伴编辑器”提供技术支持

☆☆☆为方便大家查阅,小编已将scikit-learn学习路线专栏文章统一整理到公众号底部菜单栏,同步更新中,关注公众号,点击左下方“系列文章”,如图:

欢迎大家和我一起沿着scikit-learn文档这条路线,一起巩固机器学习算法基础。(添加微信:mthler备注:sklearn学习,一起进【sklearn机器学习进步群】开启打怪升级的学习之旅。)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。