機器學習必備知識之皮爾森係數實現

2021-09-29 08:23:07 字數 3746 閱讀 5387

引言:最近幾天幫幾個人工智慧專業的同學做了一些機器學習課程的大作業,我發現機器學習一些常見的資料處理方法他們並不會用程式表示出來,僅僅是停留在理論層面。那麼今天我將就機器學習一些常見資料處理方式實現皮爾森矩陣及資料關係圖,以便大家加深對皮爾森的理解,同時掌握一些機器學習資料處理的技巧。

首先介紹下機器學習,機器學習是將近20多年蓬勃發展的學問多各個領域學科,牽涉到概率論、統計學、逼近論、凸分析、演算法複雜度理論等多門學科。神經網路學說主要是的設計和研究一些讓計算機系統可以系統會「自學」的推演演算法。神經網路演演算法是一類從統計資料中的系統會研究取得規律性,並借助規律性對不得而知的統計資料展開**的推演演算法。因為學習演算法中涉及了大量的統計學理論,神經網路與統計資料推測習緊密聯絡最為緊密,也被稱作統計學習理論。演演算法的設計各個方面,神經網路學說注目可以構建的,系統化的自學演演算法。很多假設難題歸屬於無程式中難以確定可玩性,所以部份的神經網路研究工作是研發更容易處置的近似演算法。

而皮爾森係數作為機器學習資料處理的必備方式,其重要性不言而喻,今天我們就一步步搭建皮爾森矩陣資料並顯示,並且我會在每個**上都新增注釋以方便理解。

首先介紹下皮爾森先關係數:皮爾森相關係數(pearson correlation coefficient)也稱皮爾森積矩相關係數(pearson product-moment correlation coefficient) ,是一種線性相關係數。皮爾森相關係數是用來反映兩個變數線性相關程度的統計量。相關係數用r表示,其中n為樣本量,分別為兩個變數的觀測值和均值。r描述的是兩個變數間線性相關強弱的程度。r的絕對值越大表明相關性越強。

其公式理解為:樣本的簡單相關係數一般用r表示,其中n 為樣本量, 分別為兩個變數的觀測值和均值。r描述的是兩個變數間線性相關強弱的程度。r的取值在-1與+1之間,若r>0,表明兩個變數是正相關,即乙個變數的值越大,另乙個變數的值也會越大;若r<0,表明兩個變數是負相關,即乙個變數的值越大另乙個變數的值反而會越小。r 的絕對值越大表明相關性越強,要注意的是這裡並不存在因果關係。若r=0,表明兩個變數間不是線性相關,但有可能是其他方式的相關(比如曲線方式)。利用樣本相關係數推斷總體中兩個變數是否相關,可以用t 統計量對總體相關係數為0的原假設進行檢驗。若t 檢驗顯著,則拒絕原假設,即兩個變數是線性相關的;若t 檢驗不顯著,則不能拒絕原假設,即兩個變數不是線性相關的

其程式步驟如下所示,首先使用numpy初始化乙個隨機數陣列,每個隨機數的範圍為0到1。 陣列應該為shape=1000,50

接著對步驟一建立所有行對之間的皮爾森相關性的相關矩陣,相關矩陣為shape=[1000,1000])。

然後使用步驟二得到的1000*1000皮爾森相關係數r的下三角值,用matplotlib,繪製100-bin的直方圖(忽略對角線和對角線上方的所有像元)

通過直方圖,關聯大小為50的兩個隨機向量的估計r>0.75或r

在步驟一僅用10列的情況下重複步驟一至步驟三,考慮較小的樣本如何影響直方圖分布。

最後的輸出部分:兩張直方圖,第一張是基於大小為50的向量相關性,用hist1標識,在直方圖上方的標題處標明概率大小。第二張用則以10為載體,用hist2標識,同樣也在直方圖上方標題處標明概率大小。

import numpy as np

import matplotlib.pyplot as plt

import matplotlib

#關聯大小為50的兩個隨機向量函式

def del50():

#使用numpy初始化乙個隨機數陣列,每個隨機數的範圍為0到1.陣列應該為shape=1000,50

matplotlib.rcparams['font.sans-serif']=['simhei']   # 用黑體顯示中文

matplotlib.rcparams['axes.unicode_minus']=false # 正常顯示負號

"""

繪製直方圖

data:必選引數,繪圖資料

bins:直方圖的長條形數目,可選項,預設為10

normed:是否將得到的直方圖向量歸一化,可選項,預設為0,代表不歸一化,顯示頻數。normed=1,表示歸一化,顯示頻率。

facecolor:長條形的顏色

edgecolor:長條形邊框的顏色

alpha:透明度

「」"num=0

for i in range(1000):

for j in range(1000):

if s[i][j]>0.75 or s[i][j]

num+=1

percent=(num/1000000)*100

tit=「hist1概率為」+str(percent)+"%"

#繪製100個矩形的直方圖

plt.hist(data, bins=100, normed=0, facecolor=「blue」, edgecolor=「black」, alpha=0.7)

plt.xlabel("區間")
plt.ylabel("頻數/頻率")
plt.title(tit)

plt.show()

def del10():

#使用numpy初始化乙個隨機數陣列,每個隨機數的範圍為0到1.陣列應該為shape=1000,50

matplotlib.rcparams['font.sans-serif']=['simhei']   # 用黑體顯示中文

matplotlib.rcparams['axes.unicode_minus']=false # 正常顯示負號

"""

繪製直方圖

data:必選引數,繪圖資料

bins:直方圖的長條形數目,可選項,預設為10

normed:是否將得到的直方圖向量歸一化,可選項,預設為0,代表不歸一化,顯示頻數。normed=1,表示歸一化,顯示頻率。

facecolor:長條形的顏色

edgecolor:長條形邊框的顏色

alpha:透明度

「」"num=0

for i in range(1000):

for j in range(1000):

if s[i][j]>0.75 or s[i][j]

num+=1

percent=(num/1000000)*100

tit=「hist2概率為」+str(percent)+"%"

#繪製100個矩形的直方圖

plt.hist(data, bins=100, normed=0, facecolor=「blue」, edgecolor=「black」, alpha=0.7)

plt.xlabel("區間")
plt.ylabel("頻數/頻率")
plt.title(tit)

plt.show()

del50()

del10()

最終顯示的如下所示:

通過對直方圖資料的比較我們很容易發現資料之間的相關性特徵,故可得知資料分布存在著一定的規律,即大部分資料都存在乙個合理的區間範圍,故機器學習資料處理才具有可能性。這也是機器學習對資料做統計應用可行合理性的乙個證明,要不然豈不是認為機器學習就是瞎猜的了。

機器學習之線性回歸原理及sklearn實現

1 線性回歸問題 以房價 為例,占地面積為變數x1,房屋年齡為變數x2,房屋 為 變數y。為什麼叫線性回歸問題,因為目標函式是乙個線性回歸函式。什麼是目標函式?1 目標函式 目標函式是我們需要的最終結果,及最終擬合了資料的函式。假設目標函式為y 1 x1 2 x2 b。那麼我們如何得到目標函式中的引...

機器學習必備的數學知識,一次學會

面對機器學習,初學者的阻塞點往往不在於機器學習本身,而是數學。機器學習是計算機技術,但它的底層是數學。通常,在機器學習相關的教材中,通篇都是複雜的數學公式。初學者如果數學基礎不牢固,面對滿篇的數學公式時,就會逐步失去學習信心 減少學習動力,而達不到預期的學習效果,最終只能淪落個 半吊子 的水平。有鑑...

機器學習必備的數學知識,一次學會

面對機器學習,初學者的阻塞點往往不在於機器學習本身,而是數學。機器學習是計算機技術,但它的底層是數學。通常,在機器學習相關的教材中,通篇都是複雜的數學公式。初學者如果數學基礎不牢固,面對滿篇的數學公式時,就會逐步失去學習信心 減少學習動力,而達不到預期的學習效果,最終只能淪落個 半吊子 的水平。有鑑...