@spiritnotes
2016-02-29T05:16:43.000000Z
字数 1964
阅读 2507
机器学习
数学
欧几里得距离是指的多维空间中两点间的距离。
def euclidean(x,y):
return (sum((x-y)**2)**0.5
相似度采用如下公式变换
1/(1+linalg.norm(X-Y)
皮尔逊相关系数是一种度量两个变量间相关程度的方法,介于-1~1之间,1表示完全相关,0表示无关,-1表示负相关。可以修正“夸大分值”的情况,也即是分值分布近似,绝对值不一样,其实可以将分数进行归一化处理
# 可直接采用Python中的corrcoef()函数计算
def pearson(x,y):
n = x.shape[0]
sum_x, sum_y = sum(x), sum(y)
num = x.dot(y) - sum_x*sum_y/n
den = (sum(x**2) - sum_x**2/n) * (sum(y**2) - sum_y**2/n)
if den == 0: return 1
return num/den
相似度采用如下公式变换
0.5+0.5*corrcoef(X,Y,rowvar=0)[0][1]
计算的是两个向量夹角的余弦值。如果夹角90度,则相似度为0,如果方向相同,则相似度为1.值位于-1~1之间。
# ||A||
linalg.norm(A)
相似度采用如下公式变换
0.5+ 0.5*(X.T*Y/(linalg.norm(X)*linalg.norm(Y)))
Tanimoto系数是一种度量两个集合之间相似程度的方法。
def tanimoto(A, B):
if not A and not B:
return 0
return len(A&B)/len(A|B)
基尼不纯度是用来度量集合有多纯的方法。物理含义是从中选择一个元素并随机猜测其种类,猜错的概率。
def giniimpurity(counter):
total = sum(counter.values())
impurity = 1
for num in counter.values():
impurity -= (num/total)**2
return impurity
熵是用于判断集合内部混乱度的方法,用以度量一个集合中的无序情况。物理意义可以理解为从集合中随机抽取一个元素的意外程度。
def entropy(counter):
log2 = lamda x:log(x)/log(2)
total = sum(counter.values())
ent = 0
for num in counter.values():
p = num/total
ent -= p*log2(p)
return ent
方差是用来度量一组数值与其均值之间的差距的,通常用于统计学中,用以测量集合中各个数值之间的差。
def variance(vals):
mean = avg(vals)
return sum((vals-mean)**2)/len(vals)
高斯函数是正态曲线的概率密度函数,从高位开始下降但不会下降到0。
def gaussian(dist, sigma=10):
exp = math.e**(-dist**2/(2*sigma**2))
return (1/(sigma*(2*math.pi)**0.5)*exp