相關性演算法和api

2021-08-20 07:48:05 字數 3804 閱讀 9223

1.相關性

先寫幾個相關性的基礎演算法和相應的api吧

歐式距離

from scipy import spatial

import math

# 歐式距離

def d_euclidean(*args): #args為所有向量組成陣列,其實就是個二維陣列

''' 第乙個值是其它值的對比物件,其它值都是以第乙個值為對比標準'''

""" 返回也是個陣列,為和第乙個值對比出來的歐氏距離"""

""" 歐式距離公式 d(x,y) = ((y1 - x1)^2 + (y2 - x2)^2 +(y3 - x3)^2 .....)^(0.5)"""

base_vector = args[0]

d_values =

for o_vector in args:

if base_vector is o_vector:

continue

d_value = 0

for index in range(len(base_vector)):

d_value += pow((o_vector[index] - base_vector[index]),2)

if len(d_values) > 0:

return d_values

else:

return -1

vector1 = [0,1,2,3]

vector2 = [1,2,3,4]

vector3 = [4,3,2,1]

print(d_euclidean(vector1,vector2,vector3))

#結果為 [2.0, 4.898979485566356]

print(spatial.distance.euclidean(vector1,vector2))

print(spatial.distance.euclidean(vector1,vector3))

# 2.0

# 4.898979485566356

#結果是一樣的

曼哈頓距離

#曼哈頓距離
import numpy as np

from scipy.spatial.distance import pdist

def d_manhattan(*args):

"""這個就超級簡單了,就是求相差的絕對值"""

"""然後把這些絕對值加起來就妥了"""

base_vector = args[0]

d_values =

for o_vector in args:

if base_vector is o_vector:

continue

d_value = 0

for index in range(len(base_vector)):

d_value += abs((o_vector[index] - base_vector[index]))

if len(d_values) > 0:

return d_values

else:

return -1

vector1 = [0,1,2,3]

vector2 = [1,2,3,4]

vector3 = [4,3,2,1]

print(d_manhattan(vector1,vector2,vector3))

# [4,8]

print(d_manhattan(vector2,vector3))

#[8]

print(pdist(np.vstack([vector1,vector2,vector3]),'cityblock')) #這個api會返回所有的相似關係,是ndarray形式

# 結果 [4 8 8]

余弦相似度

#余弦相似度

import numpy as np

from scipy.spatial.distance import pdist

def d_cos(*args):

base_vector = args[0]

a_vals = [np.sum(np.square(x)) for x in args]

b_val = a_vals[0]

d_values =

for i in range(len(args)):

o_vector = args[i]

if i == 0:

continue

d_value = 0

for index in range(len(base_vector)):

d_value += (o_vector[index] * base_vector[index])

if len(d_values) > 0:

return d_values

else:

return -1

vector1 = [0,1,2,3]

vector2 = [1,2,3,4]

vector3 = [4,3,2,1]

print(d_cos(vector1,vector2,vector3))

#[0.024099927051466796, 0.5120499635257334]

print(d_cos(vector2,vector3))

#[0.33333333333333337]

print(pdist(np.vstack([vector1,vector2,vector3]),'cosine'))

#[0.02409993 0.51204996 0.33333333]

皮爾森相關係數

import numpy as np

from scipy.stats import pearsonr

def get_pearsonr(b,o):

b_s = np.sum(b)

o_s = np.sum(o)

b_ss = np.sum(np.square(b))

o_ss = np.sum(np.square(o))

t_bo = 0

n = len(b)

for i in range(len(b)):

t_bo += b[i] * o[i]

denominator = np.sqrt(b_ss - np.square(b_s)/n)*np.sqrt(o_ss - np.square(o_s)/n)

if denominator:

return (t_bo - (o_s * b_s)/n) / denominator

else:

return 0

def d_pearsonr(*args):

pass

vector1 = np.random.normal(1,100,50)

vector2 = np.random.normal(2,10,50)

vector3 = [4,3,2,1]

print(get_pearsonr(vector1,vector2))

#隨機數,得到的結果每次都不一樣比如這次的結果是-0.10288209400426439

print(pearsonr(vector1,vector2))

#(-0.10288209400426439, 0.4770990724691394) 這次是一樣的,但有時候會不一樣,有空研究下怎麼還會不一樣

scipy的皮爾森函式返回兩個值,第乙個是皮爾森係數,另乙個是p-value也是表示相關性的

spearman相關性分析 相關性分析

r語言常用函式 cor 預設結果為矩陣 cor mydat,use method use 缺失值的處理,method 處理方法 cor x,y 可以計算非方形矩陣,x y分別為2個矩陣,相同的行數 cor.test x,y,alternative method x y為檢驗相關性的變數 librar...

統計 相關性與自相關性

相關係數度量指的是兩個不同事件彼此之間的相互影響程度 而自相關係數度量的是同一事件在兩個不同時期之間的相關程度,形象的講就是度量自己過去的行為對自己現在的影響。自相關,也稱 序列相關。是乙個訊號於其自身在不同時間點的互相關。非正式地來說,它就是兩次觀察之間的相似度對它們之間的時間差的函式。它是找出重...

基因相關性

描述 為了獲知基因序列在功能和結構上的相似性,經常需要將幾條不同序列的dna進行比對,以判斷該比對的dna是否具有相關性。現比對兩條長度相同的dna序列。首先定義兩條dna序列相同位置的鹼基為乙個鹼基對,如果乙個鹼基對中的兩個鹼基相同的話,則稱為相同鹼基對。接著計算相同鹼基對佔總鹼基對數量的比例,如...