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为核函数:

  1. S = np.exp(-D * gamma), 其中gamma 的一种选择是 1 / num_features
  2. S = 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 (2008). 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 是输入向量
  • d is 是核函数的次数(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 2007 https://research.microsoft.com/en-us/um/people/manik/projects/trade-off/papers/ZhangIJCV06.pdf

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

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

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

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

  1. sklearn svm如何选择核函数_文本挖掘篇|利用SVM进行短文本分类

    何为数据挖掘,顾名思义就是从大量数据中挖掘或抽取出知识.在实际中,进行数据挖掘的数据不仅仅有数值型数据,还有图片型数据,文本型数据等.而所谓文本挖掘,就是从大量文本数据中,提取出对信息使用者有价值的信 ...

  2. sklearn svm如何选择核函数_机器学习之支持向量机多种核模型对比

    机器学习 xueyifeiyun1989zx,公众号:围着围巾的小黑机器学习之监督学习实战 前文我们提到机器学习中的监督学习,其中有一个模型是我们提到的但是没有训练测试的,叫做支持向量机(简称SVM) ...

  3. python网格搜索核函数_(转载)Python机器学习笔记GridSearchCV(网格搜索)

    转载声明 介绍 在机器学习模型中,需要人工选择的参数称为超参数.比如随机森林中决策树的个数,人工神经网络模型中隐藏层层数和每层的节点个数,正则项中常数大小等等,他们都需要事先指定.超参数选择不恰当,就 ...

  4. sklearn实现lda模型_使用python+sklearn实现模型复杂性的影响

    本示例演示了模型复杂性是如何影响预测精度和计算性能的.数据集是用于回归(或者分类)的波士顿住房(Boston Housing)数据集(或者20 Newsgroups).对于每一类模型,我们通过选择相关 ...

  5. 高斯拟合 vc++代码_使用python+sklearn实现核岭回归和高斯回归的比较

    核岭回归(KRR)和高斯回归(GPR)都通过在内部采用"内核技巧"来学习目标函数.KRR学习使用相应核函数(该核函数对应于原始空间中的非线性函数)将目标函数映射到内核空间中的线性函 ...

  6. python 拟合sigmoid曲线_使用python+sklearn实现概率校准曲线

    注意:单击此处https://urlify.cn/muQBjy下载完整的示例代码,或通过Binder在浏览器中运行此示例 在进行分类时,人们经常不仅要预测分类标签,还要预测相关的概率.预测概率可以让人 ...

  7. python one hot编码_对python sklearn one-hot编码详解

    one-hot编码的作用 使用one-hot编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点 将离散特征通过one-hot编码映射到欧式空间,是因为,在回归,分类,聚类 ...

  8. python打包成可执行文件给 别人用下载_调试Python程序打包成可执行文件

    用Python编好了程序,如果给别人运行,别人的电脑不一安装了Python,而且这些源程序也不利于代码的保持.因此很有需要把Python程序打包成EXE可执行文件. 查阅了相关文章,开始了我的调试之路 ...

  9. python pos函数_使用python+sklearn实现特征提取

    sklearn.feature_extraction模块可用于以机器学习算法支持的格式从原始数据集(如文本和图像)中提取特征.**注意:**特征提取与特征选择有很大不同:前者是将任意数据(例如文本或图 ...

最新文章

  1. IIS弹出服务没有及时响应启动或控制请求
  2. java炒黄金_炒黄金追单的一些问题分析
  3. 【bzoj2324】[ZJOI2011]营救皮卡丘 最短路-Floyd+有上下界费用流
  4. HTML、CSS、JavaScript能实现的功能汇总!
  5. PHP利用P3P实现跨域
  6. java 弹出下载_java如何实现下载弹出的对话框
  7. Core Data 迁移
  8. 幅度和幅值有区别吗_克拉克 (Clark) 变换中等幅值 (2/3) 和等功率 (sqrt(2/3)) 变换的公式推导...
  9. 浅入浅出数据结构(20)——快速排序
  10. ioread32函数有关知识
  11. 漫步最优化三十二——最速下降法
  12. .9-浅析express源码之请求处理流程(2)
  13. linux内核源码 -- list链表
  14. n的整数倍补集的抓取python_python高阶(四)——集合学习
  15. C++ 调试配置的项目设置
  16. 如何在Java中将集合转换为列表
  17. uinty 为什么一旋转鼠标镜头就倒了_Unity3D使用鼠标旋转缩放平移视角
  18. 【面试经历】问题总结
  19. 流媒体学习之路(mediasoup)——Worker(c++)libuv(番外)
  20. java写到txt乱码_java读取txt文本发生乱码的解决方法

热门文章

  1. java gettext用法_Java Context.getText方法代码示例
  2. 第10章 例题 7-3 递归实现逆序输出整数
  3. 底层实现红黑树_stl map底层之红黑树插入步骤详解与代码实现 | 学步园
  4. django手机访问_Django从入门到大作业:2-见网页
  5. Java黑皮书课后题第5章:5.4(将英里转换成千米)编写程序,显示下面的表格(注意:1英里为1.609千米)
  6. Oracle触发器简单使用记录
  7. spring-boot-2.0.3之quartz集成,不是你想的那样哦!
  8. [tarjan][树形dp] 洛谷 P2515 软件安装
  9. KMP算法的nextval[] 即优化next[]
  10. PAT 1052. 卖个萌 (20)