文章目录

  • 引言
  • 汉明距离(Hamming distance)
    • 代码示例
  • 汉明损失(Hamming loss)
    • 代码示例
  • 参考链接

引言

汉明距离是机器学习中的常用度量。本文整理了具体的图示+代码,帮你形象化理解汉明距离(Hamming distance)、汉明损失(Hamming loss)。

汉明距离(Hamming distance)

定义:两个等长的符号串之间的汉明距离是对应符号不同位置个数

汉明距离是用于测量两个序列之间的编辑距离的几个字符串度量之一。它以美国数学家理查德·海明命名。


比如例子中第一行,符号不同的位置是"rol"和"thr",即符号不同位置有3个,汉明距离为3。

代码示例

用python计算两个字符串之间的汉明距离:

# 写法一:
def hamming_distance(string1, string2):dist_counter = 0for n in range(len(string1)):if string1[n] != string2[n]:dist_counter += 1return dist_counter# 写法二:或者采用更短的表达式
sum(xi != yi for xi, yi in zip(x, y))

汉明损失(Hamming loss)

汉明损失是错误预测的标签比例,用于度量两个样本之间的汉明距离。

L H a m m i n g ( y , y ^ ) = 1 n labels ∑ j = 0 n labels − 1 1 ( y ^ j ≠ y j ) L_{Hamming}(y, \hat{y}) = \frac{1}{n_\text{labels}} \sum_{j=0}^{n_\text{labels} - 1} 1(\hat{y}_j \not= y_j) LHamming​(y,y^​)=nlabels​1​j=0∑nlabels​−1​1(y^​j​​=yj​)

从公式可以看出,汉明损失即在前一节的汉明距离基础上进行归一化,得到一个在0~1区间的损失值。

代码示例

调用 sklearn.metrics 中的 hamming_loss 进行计算:

sklearn.metrics.hamming_loss(y_true, y_pred, *, sample_weight=None)

>>> from sklearn.metrics import hamming_loss
>>> y_pred = [1, 2, 3, 4]
>>> y_true = [2, 2, 3, 4]
>>> hamming_loss(y_true, y_pred)
0.25

y_true, y_pred只有第一个位置不同,1/4=0.25。

如果评估的是多分类情况:

>>> import numpy as np
>>> hamming_loss(np.array([[0, 1], [1, 1]]), np.zeros((2, 2)))
0.75

需要注意的是:

在多分类问题中,当normalize参数设置为True时,汉明损失对应于y_true和y_pred之间的汉明距离,相当于0-1损失 (zero one loss),是一种精确匹配(exact match)。 0-1损失认为:如果给定样本中的所有数值不完全匹配真实的标签,则认为这个样本不正确。例如下图,有三个样本不完全匹配,就是3/5=0.6。

在多标签问题中,汉明损失不同于0-1损失。在多标签问题中,汉明损失更宽容,因为它只惩罚个别标签。比如下图中,有三个样本中的4个字符位置不同,就是4/(4*5)=0.2。

通过这两个图可以看出,多标签问题的汉明损失会比0/1损失更宽松(0.2<0.6),惩罚力度更小。

参考链接

ACM Multi-label Classification Tutorial
https://en.wikipedia.org/wiki/Hamming_distance
https://scikit-learn.org/stable/modules/model_evaluation.html#hamming-loss
http://www.manongjc.com/detail/30-emspeytwauwwdai.html

汉明距离、汉明损失详解及代码(python)相关推荐

  1. 图像质量损失函数SSIM Loss的原理详解和代码具体实现

    本文转自微信公众号SIGAI 文章PDF见: http://www.tensorinfinity.com/paper_164.html http://www.360doc.com/content/19 ...

  2. 组合模式详解附有代码案例分析(包含透明组合模式、安全组合模式的代码示例)

    组合模式 一.组合模式的概念和角色 (一).组合模式的概念 (二).组合模式的角色 二.组合模式的应用场景 三.透明组合模式的代码示例 四.安全组合模式的代码示例 五.组合模式的优缺点 (一).优点 ...

  3. 模板方法模式详解附有代码案例分析(包含模板方法模式重构JDBC操作业务代码示例)

    模板方法模式 一.模板方法模式的概念和角色 (一).模板方法模式的概念 (二).模板方法模式的角色 二.模板方法模式的应用场景 三. 模板方法模式的代码示例 四.模板方法模式重构JDBC操作业务 五. ...

  4. 【分享实录】BANCOR算法详解及代码实现

    1 活动基本信息 1)主题:[区块链技术工坊22期]BANCOR算法详解及代码实现 2)议题: BANCOR算法的特点和优劣势 BANCOR算法和举例 如何加入BANCOR.NETWORK交易所 如何 ...

  5. 【区块链技术工坊22期实录】王登辉:BANCOR算法详解及代码实现

    1,活动基本信息 1)题目: [区块链技术工坊22期]BANCOR算法详解及代码实现 2)议题: 1)BANCOR算法的特点和优劣势 2)BANCOR算法和举例 3)如何加入BANCOR.NETWOR ...

  6. LeNet模型详解以及代码实现

    LeNet模型详解以及代码实现 一.卷积神经网络的构成 输入层 卷积层 激活函数 池化层(Pooling) 全连接层 二. LeNet-5详解及代码实现 1. LeNet模型详解 2. 代码实现 三. ...

  7. 调包侠福音!机器学习经典算法开源教程(附参数详解及代码实现)

    Datawhale 作者:赵楠.杨开漠.谢文昕.张雨 寄语:本文针对5大机器学习经典算法,梳理了其模型.策略和求解等方面的内容,同时给出了其对应sklearn的参数详解和代码实现,帮助学习者入门和巩固 ...

  8. 粒子群(pso)算法详解matlab代码,粒子群(pso)算法详解matlab代码

    粒子群(pso)算法详解matlab代码 (1)---- 一.粒子群算法的历史 粒子群算法源于复杂适应系统(Complex Adaptive System,CAS).CAS理论于1994年正式提出,C ...

  9. python 自动化-Python API 自动化实战详解(纯代码)

    主要讲如何在公司利用Python 搞API自动化. 1.分层设计思路 dataPool :数据池层,里面有我们需要的各种数据,包括一些公共数据等 config :基础配置 tools : 工具层 co ...

最新文章

  1. Keras框架下的保存模型和加载模型
  2. 小目标 | DAX高级实践-Power BI与Excel联合应用
  3. ORACLE百万记录SQL语句优化技巧
  4. mysql myisam存储引擎不能添加外键,添加后显示成功,实则失败
  5. 各hadoop安装的收集
  6. java圆柱的底面积体积,计算圆柱的底面积和体积
  7. 玩转MySQL之Linux下的简单操作(服务启动与关闭、启动与关闭、查看版本)
  8. Linux 下Kill多进程的方法
  9. 第四课时之HTML 元素
  10. 惠新宸:我也曾经是“不适合”编程的人
  11. update与fixedupdate差别
  12. Ubuntu MPEG-4 AAC 与 H.264 解码器安装
  13. 网络-无线中继(HG255d挂载8187)
  14. mklink实现软件搬家清理C盘空间
  15. 【学术分享】论文投稿被拒2次,再找第三家的时候突然想放弃怎么办?
  16. FPGA零基础学习:数字电路中的数字表示
  17. Bootstrap4与Bootstrap3的区别
  18. 木纹标识lisp_Lisp 中的 string 和 symbol 的区别?
  19. python爬虫库scrapy_使用Python爬虫Scrapy框架爬取数据
  20. Python采集全国各地百度地图上店铺POI数据(母婴、美食等)

热门文章

  1. 在Cocos Creator Store中下载的插件和代码存放在哪里呢?
  2. Jetbrains系列软件爽翻天插件:颜值皮肤Material Theme UI 和 实时翻译Translation
  3. python choice添加下拉框_Django choices下拉列表绑定实例
  4. 很实用的markdown转xmind思维导图教程
  5. 如何快速创建一个vue脚手架
  6. 角度的均值与标准差(circular data/ directional statistics)
  7. 《A Boundary-aware Neural Model for Nested Named Entity Recognition》
  8. 网络NTP协议时间校对源码
  9. matlab 太阳黑子周期,太阳黑子周期分析
  10. 光纤通信速率破纪录!每秒能传1.84Pbit,2倍于全球互联网总流量 | Nature子刊