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序列相同位置的鹼基為乙個鹼基對,如果乙個鹼基對中的兩個鹼基相同的話,則稱為相同鹼基對。接著計算相同鹼基對佔總鹼基對數量的比例,如...