相關性檢驗之Pearson係數及python實現
阿新 • • 發佈:2018-12-29
一、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係數如下圖所示。根據得到的結果,對於特徵選擇就有一定的依據啦~