python实现机器学习中的各种距离计算及文本相似度算法
2017-04-03 22:45
896 查看
在自然语言处理以及机器学习的分类或者聚类中会涉及到很多距离的使用,各种距离的概念以及适用范围请自行百度或者参考各种距离
参考:
1.各种距离
2.【Python】Python实现马氏距离计算
3.Python numpy函数hstack() vstack() stack() dstack() vsplit() concatenate()
import numpy as np import math # 依赖包numpy、python-Levenshtein、scipy def Euclidean(vec1, vec2): npvec1, npvec2 = np.array(vec1), np.array(vec2) return math.sqrt(((npvec1-npvec2)**2).sum()) # euclidean,欧式距离算法,传入参数为两个向量,返回值为欧式距离 def Manhattan(vec1, vec2): npvec1, npvec2 = np.array(vec1), np.array(vec2) return np.abs(npvec1-npvec2).sum() # Manhattan_Distance,曼哈顿距离 def Chebyshev(vec1, vec2): npvec1, npvec2 = np.array(vec1), np.array(vec2) return max(np.abs(npvec1-npvec2)) # Chebyshev_Distance,切比雪夫距离 def Minkowski(vec1, vec2, params): pass # MinkowskiDistance 闵可夫斯基距离,其实就是上面三种距离的集合,这里就不重复了。 # def Standardized_Euclidean(vec1, vec2, v): # from scipy import spatial # npvec = np.array([np.array(vec1), np.array(vec2)]) # return spatial.distance.pdist(npvec, 'seuclidean', V=None) # Standardized Euclidean distance,标准化欧氏距离 # 在对长方体区域进行聚类的时候,普通的距离无法满足要求。 # 按照普通的距离聚类出的大多是圆形的区域,这时候要采用标准的欧式距离。 # 参考 标准化欧式距离:http://blog.csdn.net/jinzhichaoshuiping/article/details/51019473 def Mahalanobis(vec1, vec2): npvec1, npvec2 = np.array(vec1), np.array(vec2) npvec = np.array([npvec1, npvec2]) sub = npvec.T[0]-npvec.T[1] inv_sub = np.linalg.inv(np.cov(npvec1, npvec2)) return math.sqrt(np.dot(inv_sub, sub).dot(sub.T)) # MahalanobisDistance,马氏距离 def Edit_distance_str(str1, str2): import Levenshtein edit_distance_distance = Levenshtein.distance(str1, str2) similarity = 1-(edit_distance_distance/max(len(str1), len(str2))) return {'Distance': edit_distance_distance, 'Similarity': similarity} # Levenshtein distance,编辑距离,用于计算两个字符串之间的编辑距离,传入参数为两个字符串 def Edit_distance_array(str_ary1, str_ary2): len_str_ary1 = len(str_ary1) + 1 len_str_ary2 = len(str_ary2) + 1 matrix = [0 for n in range(len_str_ary1 * len_str_ary2)] for i in range(len_str_ary1): matrix[i] = i for j in range(0, len(matrix), len_str_ary1): if j % len_str_ary1 == 0: matrix[j] = j // len_str_ary1 for i in range(1, len_str_ary1): for j in range(1, len_str_ary2): if str_ary1[i-1] == str_ary2[j-1]: cost = 0 else: cost = 1 matrix[j*len_str_ary1+i] = min(matrix[(j-1)*len_str_ary1+i]+1, matrix[j*len_str_ary1+(i-1)]+1, matrix[(j-1)*len_str_ary1+(i-1)] + cost) distance = int(matrix[-1]) similarity = 1-int(matrix[-1])/max(len(str_ary1), len(str_ary2)) return {'Distance': distance, 'Similarity': similarity} # 针对列表改写的编辑距离,在NLP领域中,计算两个文本的相似度,是基于句子中词和词之间的差异。 # 如果使用传统的编辑距离算法,则计算的为文本中字与字之间的编辑次数。这里根据编辑距离的思维, # 将编辑距离中的处理字符串中的字符对象,变成处理list中每个元素 def Cosine(vec1, vec2): npvec1, npvec2 = np.array(vec1), np.array(vec2) return npvec1.dot(npvec2)/(math.sqrt((npvec1**2).sum()) * math.sqrt((npvec2**2).sum())) # Cosine,余弦夹角 # 机器学习中借用这一概念来衡量样本向量之间的差异。 # 也可以使用在余弦相似度算法中
参考:
1.各种距离
2.【Python】Python实现马氏距离计算
3.Python numpy函数hstack() vstack() stack() dstack() vsplit() concatenate()
相关文章推荐
- Python----python实现机器学习中的各种距离计算及文本相似度算法
- Finding Similar Items 文本相似度计算的算法——机器学习、词向量空间cosine、NLTK、diff、Levenshtein距离
- java实现编辑距离算法,计算字符串相似度
- 余弦方法计算相似度算法--Python实现 Java实现
- 各种相似度计算的python实现
- 文本相似度算法的整理和python实现
- java文本相似度计算(Levenshtein Distance算法(中文翻译:编辑距离算法))----代码和详解
- java文本相似度计算(Levenshtein Distance算法(中文翻译:编辑距离算法))----代码和详解
- Python 文本挖掘:使用gensim进行文本相似度计算
- 实现文本相似度算法(余弦定理)
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- 自己实现文本相似度算法(余弦定理)
- 利用最小编辑距离算法实现文本diff
- 文本比较算法:计算文本的相似度
- 各种算法的Python实现方案
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- 文本比较算法Ⅲ——计算文本的相似度
- 文本相似度计算之--- 编辑距离 && 最长公共子串
- 余弦方法计算相似度算法实现