1. 程式人生 > >相關性檢驗之Pearson係數及python實現

相關性檢驗之Pearson係數及python實現

一、Pearson相關係數

皮爾森相關係數是用來反應倆變數之間相似程度的統計量,在機器學習中可以用來計算特徵與類別間的相似度,即可判斷所提取到的特徵和類別是正相關、負相關還是沒有相關程度。

Pearson係數的取值範圍為[-1,1],當值為負時,為負相關,當值為正時,為正相關,絕對值越大,則正/負相關的程度越大。若資料無重複值,且兩個變數完全單調相關時,spearman相關係數為+1-1當兩個變數獨立時相關係統為0,但反之不成立

Pearson相關係數的計算方法有三種形式,如下列公式所示


其中X,Y代表兩個特徵陣列, , 為X,Y特徵的平均值。對於第一種形式的Pearson表示,可以看做是兩個隨機變數中得到的樣本集向量之間夾角的cosine函式。

二、Python程式碼實現

在這裡主要實現了第一種Pearson形式的程式碼,程式碼分為三個模組,第一個模組的功能是來獲取兩個向量的平均值;第二個模組的功能實現的是求兩個向量間的pearson係數,返回pearson係數;最後一個模組是來求取所有特徵和類的相似程度

	#計算特徵和類的平均值
def calcMean(x,y):
    sum_x = sum(x)
    sum_y = sum(y)
    n = len(x)
    x_mean = float(sum_x+0.0)/n
    y_mean = float(sum_y+0.0)/n
    return x_mean,y_mean

#計算Pearson係數
def calcPearson(x,y):
    x_mean,y_mean = calcMean(x,y)	#計算x,y向量平均值
    n = len(x)
    sumTop = 0.0
    sumBottom = 0.0
    x_pow = 0.0
    y_pow = 0.0
    for i in range(n):
        sumTop += (x[i]-x_mean)*(y[i]-y_mean)
    for i in range(n):
        x_pow += math.pow(x[i]-x_mean,2)
    for i in range(n):
        y_pow += math.pow(y[i]-y_mean,2)
    sumBottom = math.sqrt(x_pow*y_pow)
    p = sumTop/sumBottom
    return p
#計算每個特徵的spearman係數,返回陣列
def calcAttribute(dataSet):
    prr = []
    n,m = shape(dataSet)    #獲取資料集行數和列數
    x = [0] * n             #初始化特徵x和類別y向量
    y = [0] * n
    for i in range(n):      #得到類向量
        y[i] = dataSet[i][m-1]
    for j in range(m-1):    #獲取每個特徵的向量,並計算Pearson係數,存入到列表中
        for k in range(n):
            x[k] = dataSet[k][j]
        prr.append(calcSpearman(x,y))
    return prr

三、樣例演示

這裡有一個1162*22的資料集,如下圖所示,前21列表示特徵,第22列表示類別。該資料集是一個二分類問題。


對於每個特徵,呼叫上述函式,得出的每個特徵的pearson係數如下圖所示。根據得到的結果,對於特徵選擇就有一定的依據啦~