概述

python_mmdt是一种基于敏感哈希的特征向量生成工具。核心算法使用C实现,提高程序执行效率。同时使用python进行封装,方便研究人员使用。 本篇幅主要介绍涉及的相关基本内容与使用,相关内容的详细说明,后续详细探讨。

重点内容

重点内容,包括三个方面:

  1. 对象归一化:数据的重采样
  2. 局部敏感哈希函数的定义:特征向量的生成
  3. 特征向量的应用:距离计算、相似度计算、分类、聚类

重点假设

  1. 数据的重采样方法无条件适用于研究对象,且重采样的过程会部分保留原始数据的差异性与相似性
  2. 重采样之后的单个数据点(随机变量)是满足独立同分布的
  3. N取值很大时,敏感哈希函数值分布近似于正态分布,则落在指定区间内的局部敏感哈希值是有效的

基本过程

1. 数据重采样

我们的研究对象常常是不同的文件格式,不同的文件大小,如何方便的处理这类格式不同,大小不一的文件呢?方法有很多种,这里我们使用采样的方法。

采样原始定义:

采样是将信号从连续时间域上的模拟信号转换到离散时间域上的离散信号的过程。

下采样定义:

对于一个样值序列间隔几个样值取样一次,这样得到新序列就是原序列的下采样。

通过重采样(本工具中特指下采样),我们让对象数据都处于相同的维度(大小)。这样,就可以比较方便地定义我们自己的局部敏感哈希函数。

python_mmdt使用Lanczos采样方法。

2. 局部敏感哈希函数

局部敏感哈希的基本概念

局部敏感哈希(Locality Sensitive Hashing,LSH)的基本思想类似于一种空间域转换思想,LSH算法基于一个假设,如果两个文本在原有的数据空间是相似的,那么分别经过哈希函数转换以后的它们也具有很高的相似度;相反,如果它们本身是不相似的,那么经过转换后它们应仍不具有相似性。

通过重采样之后的数据,我们假设其满足独立同分布。同时,我们将重采样的数据,平均分成N块,每块之间的数据进行累计求和,和值分布近似服从正态分布,我们取和值高x位的一个byte做为本块数据的敏感哈希值。

例如:

  • 51030000:D6E2682253020202020202020202020251030000是4字节索引敏感哈希,D6E26822530202020202020202020202是16字节敏感哈希
  • 4F454750:A4B58A07235B23F13B2F244A9B8A547B4F454750是4字节索引敏感哈希,A4B58A07235B23F13B2F244A9B8A547B是16字节敏感哈希

3. 特征向量的应用

1. 简单应用

简单应用如,索引敏感哈希可以转成一个int32的数字,当索引敏感哈希相等时,再比较敏感哈希的距离(如曼哈顿距离,将敏感哈希转成N个unsigned char类型计算敏感哈希,此时00FF之间的距离可算作1,也可算作255,具体看实现)。

2. 复杂应用

由于特征向量的维度是固定的,因此可以很方便的使用其他数学方法,进行大规模计算。

  • 如结合矩阵运算,快速得到上万特征向量(样本)的相似度矩阵,
  • 如用于机器学习的分类(KNN)、聚类(Kmeans)等

安装

依赖

  • cmake: 2.6及以上版本
  • windows: 当前版本(0.0.3)安装需要配置minGW编译C代码

pip安装

$ pip install python_mmdt

通过whl包安装(免编译)

.whlgithub_release或者pypi下载编译好的二进制包安装

$ pip install python_mmdt-xxx.whl

使用

命令行

安装之后,可以通过命令行,快速计算敏感hash或比较两个文件相似度

# calculate mmdt sensitive
$ mmdt-hash $file_path# calculate file similarity
$ mmdt-compare $file_path1 $file_path2

python code

用作python库,导入编码使用

# -*- coding: utf-8 -*-import unittest
import os
from python_mmdt.mmdt.mmdt import MMDTclass Testmmdt(unittest.TestCase):def test_process(self):mmdt = MMDT()test_path = os.path.dirname(__file__)test_samples = os.path.join(test_path, "samples")files = os.listdir(test_samples)for f in files:file_path = os.path.join(test_samples, f)r1 = mmdt.mmdt_hash(file_path)print(r1)r2 = mmdt.mmdt_hash_streaming(file_path)print(r2)sim1 = mmdt.mmdt_compare(file_path, file_path)print(sim1)sim2 = mmdt.mmdt_compare_hash(r1, r2)print(sim2)

示例

拷贝一份当前项目的setup.py,命名为setup_1.py

setup_1.py进行两种变换:

  1. 使用大写字母E全局替换小写字母e
  2. 使用ee全局替换大写字母E

计算mmdt_hash等于0.9811928175556364

vim对比图如:

md5文件大小mmdt_hash信息图如:

其他

由于敏感哈希采用累计求和的方式,和值近似服从正态分布,所以由此计算出来的相似度,绝大部分会分布在u值附近区间内。在这块区间内的相似度,其实价值很低的。相反的,在这个区间外的,如正态分布的两侧数据,价值就很高了。相似度越高的表示真的越相似,相似度越低的表示真的越不相似。而落在中间取值范围,价值就小很多。

如比较项目中的setup.pyLICENSE,相似度0.62左右,但价值不大:

python 生成列向量_python_mmdt:一种基于敏感哈希生成特征向量的python库(一)相关推荐

  1. mmd python error_python_mmdt:一种基于敏感哈希生成特征向量的python库(一)

    概述 python_mmdt是一种基于敏感哈希的特征向量生成工具.核心算法使用C实现,提高程序执行效率.同时使用python进行封装,方便研究人员使用. 本篇幅主要介绍涉及的相关基本内容与使用,相关内 ...

  2. python椭圆形骨料_一种基于python再生混凝土三维随机球形骨料模型的构建方法与流程...

    本发明涉及建筑技术领域,尤其涉一种基于python再生混凝土三维随机球形骨料模型的构建方法. 背景技术: 再生混凝土是指利用再生粗骨料部分或者全部代替天然骨料配置而成的混凝土,再生混凝土技术的开发和利 ...

  3. python检索论文_一种基于Python的音乐检索方法的研究

    应用技术 0 前言 最近两年,人们对于流行音乐的追求与需求量日益增 加,但如何保证用户能在不知歌名只知歌词的情况下,完成 自己的全方面多种类的听歌需求呢?于是,电脑工程师就推 出了"听歌识曲 ...

  4. python鱼眼图像识别_一种基于鱼眼摄像头的人脸识别锁以及识别方法与流程

    本发明涉及人脸识别领域,特别涉及一种基于鱼眼摄像头的人脸识别锁. 背景技术: 人脸识别具有用在门锁上存在一些不足.例如,门锁一般装在门上,其高度在安装时已经固定,针对不同身高的用户来说可能造成人脸图像 ...

  5. ubuntu生成密钥和证书_基于浏览器的密钥生成以及与浏览器的密钥/证书存储的交互...

    ubuntu生成密钥和证书 想象以下情况: 您需要从访问您的网站的用户那里获取一个密钥(在非对称情况下为用户的公共密钥 ),并希望浏览器记住私有部分,而不会因冗长的导入过程而困扰用户. 老实说,实际上 ...

  6. python3随机生成数字_五种方法实现python3-随机生成10位包含数字和字母的密码

    方法一: 知识点:random.sample(sequence, k) 从指定序列中随机获取指定长度的片断 import random,string num=string.ascii_letters+ ...

  7. Python奥特曼打怪兽射击游戏(基于海龟画图创作的作品,来自Python创意编程100例sprites篇_Python精灵模块)

    相信这竟然是Python用海龟画图制作的作品吗? sprites模块就是用python的turtle模块开发的!所以本作品仍属于Python海龟画图作品 """奥特曼打怪 ...

  8. 基于特征选择的局部敏感哈希位选择算法

    点击上方蓝字关注我们 基于特征选择的局部敏感哈希位选择算法 周文桦, 刘华文, 李恩慧 浙江师范大学数学与计算机科学学院,浙江 金华 321001 摘要:作为主流的信息检索方法,局部敏感哈希往往需要生 ...

  9. Python语音基础操作--10.1基于动态时间规整(DTW)的孤立字语音识别试验

    <语音信号处理试验教程>(梁瑞宇等)的代码主要是Matlab实现的,现在Python比较热门,所以把这个项目大部分内容写成了Python实现,大部分是手动写的.使用CSDN博客查看帮助文件 ...

最新文章

  1. php get memory,PHP memory_get_usage 和 memory_get_peak_usage获取内存的区别
  2. NopCommerce架构分析-依赖注入
  3. 五一假期将至,机房维护工作要做好
  4. webservice restful类型接口的调用实例
  5. apache的rewrite规则无法加载问题
  6. 第三讲:Asp.Net+Autofac+EF/ADO.NET Winform OA(3)-启用DevExpress皮肤功能
  7. 听说,高手都用记事本写C语言代码?
  8. 织梦dede企业律师事务所网模板源码
  9. 智慧工厂平台整体结局方案
  10. 【To Understand!】LeetCode 117. Populating Next Right Pointers in Each Node II
  11. Julia : 关于Atom中的Julia代码排版
  12. 迅雷Chrome插件引发的Uncaught ReferenceError: xl_chrome_menu is not defined
  13. 在Word中使用EndNote插入参考文献
  14. AVR单片机ATMEGA16编译软件ICCAVR的使用技巧与应用示例
  15. 大白话C++:新手入门教程(附源码及详解、视频课程资料推荐)
  16. 2016.3.30 OneZero站立会议
  17. zabbix报错gd、freetype、png、jpeg
  18. 嵌入式linux mtd,嵌入式Linux驱动设备之MTD技术详解
  19. Centos7下SVN服务端搭建以及hook应用
  20. 5G NR Polar码简介(一)

热门文章

  1. python人人贷爬虫_爬取人人贷网上部分借贷信息以及数据可视化
  2. 我的2019年度总结
  3. 本地开发的 SAP UI5 应用,部署到 ABAP 服务器执行出错的问题分析
  4. SAP 电商云 Spartacus UI CheckoutDeliveryService 的单元测试设计
  5. SAP Spartacus cost center list class的赋值逻辑
  6. rxjs里b = a.pipe(map(mapFn))的执行示意图
  7. 2020年10月13日工作日志 - 挂掉的单元测试
  8. Angular jasmine.expect单步调试
  9. Java和SAP ABAP的异常处理
  10. Hybris服务器启动日志分析