[关闭]
@spiritnotes 2016-02-29T05:16:43.000000Z 字数 1964 阅读 2041

常见距离公式

机器学习 数学


欧几里得距离

欧几里得距离是指的多维空间中两点间的距离。

  1. def euclidean(x,y):
  2. return (sum((x-y)**2)**0.5

相似度采用如下公式变换

  1. 1/(1+linalg.norm(X-Y)

皮尔逊相关系数

皮尔逊相关系数是一种度量两个变量间相关程度的方法,介于-1~1之间,1表示完全相关,0表示无关,-1表示负相关。可以修正“夸大分值”的情况,也即是分值分布近似,绝对值不一样,其实可以将分数进行归一化处理

  1. # 可直接采用Python中的corrcoef()函数计算
  2. def pearson(x,y):
  3. n = x.shape[0]
  4. sum_x, sum_y = sum(x), sum(y)
  5. num = x.dot(y) - sum_x*sum_y/n
  6. den = (sum(x**2) - sum_x**2/n) * (sum(y**2) - sum_y**2/n)
  7. if den == 0: return 1
  8. return num/den

相似度采用如下公式变换

  1. 0.5+0.5*corrcoef(X,Y,rowvar=0)[0][1]

余弦相似度(cosine similarity)

计算的是两个向量夹角的余弦值。如果夹角90度,则相似度为0,如果方向相同,则相似度为1.值位于-1~1之间。

  1. # ||A||
  2. linalg.norm(A)

相似度采用如下公式变换

  1. 0.5+ 0.5*(X.T*Y/(linalg.norm(X)*linalg.norm(Y)))

Tanimoto系数

Tanimoto系数是一种度量两个集合之间相似程度的方法。

  1. def tanimoto(A, B):
  2. if not A and not B:
  3. return 0
  4. return len(A&B)/len(A|B)

基尼不纯度

基尼不纯度是用来度量集合有多纯的方法。物理含义是从中选择一个元素并随机猜测其种类,猜错的概率。

  1. def giniimpurity(counter):
  2. total = sum(counter.values())
  3. impurity = 1
  4. for num in counter.values():
  5. impurity -= (num/total)**2
  6. return impurity

熵是用于判断集合内部混乱度的方法,用以度量一个集合中的无序情况。物理意义可以理解为从集合中随机抽取一个元素的意外程度。

  1. def entropy(counter):
  2. log2 = lamda x:log(x)/log(2)
  3. total = sum(counter.values())
  4. ent = 0
  5. for num in counter.values():
  6. p = num/total
  7. ent -= p*log2(p)
  8. return ent

方差

方差是用来度量一组数值与其均值之间的差距的,通常用于统计学中,用以测量集合中各个数值之间的差。

  1. def variance(vals):
  2. mean = avg(vals)
  3. return sum((vals-mean)**2)/len(vals)

高斯函数

高斯函数是正态曲线的概率密度函数,从高位开始下降但不会下降到0。

  1. def gaussian(dist, sigma=10):
  2. exp = math.e**(-dist**2/(2*sigma**2))
  3. return (1/(sigma*(2*math.pi)**0.5)*exp
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注