@spiritnotes
2016-02-29T05:16:43.000000Z
字数 1964
阅读 2704
机器学习 数学
欧几里得距离是指的多维空间中两点间的距离。
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/nden = (sum(x**2) - sum_x**2/n) * (sum(y**2) - sum_y**2/n)if den == 0: return 1return 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 0return len(A&B)/len(A|B)
基尼不纯度是用来度量集合有多纯的方法。物理含义是从中选择一个元素并随机猜测其种类,猜错的概率。
def giniimpurity(counter):total = sum(counter.values())impurity = 1for num in counter.values():impurity -= (num/total)**2return impurity
熵是用于判断集合内部混乱度的方法,用以度量一个集合中的无序情况。物理意义可以理解为从集合中随机抽取一个元素的意外程度。
def entropy(counter):log2 = lamda x:log(x)/log(2)total = sum(counter.values())ent = 0for num in counter.values():p = num/totalent -= 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
