版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第五章機(jī)器學(xué)習(xí)與實(shí)現(xiàn)5.1Scikit-learn簡(jiǎn)介5.2數(shù)據(jù)預(yù)處理5.3線性回歸5.4邏輯回歸5.5神經(jīng)網(wǎng)絡(luò)5.6支持向量機(jī)5.7K-均值聚類5.8關(guān)聯(lián)規(guī)則5.1Scikit-learn簡(jiǎn)介Part5Python之所以能在數(shù)據(jù)科學(xué)與人工智能應(yīng)用領(lǐng)域中占有重要位置,不僅是因?yàn)槠涿赓M(fèi)開源易數(shù)據(jù)處理,更重要的是它還提供了豐富且功能強(qiáng)大的機(jī)器學(xué)習(xí)模型與算法程序包。本章主要介紹Python中的機(jī)器學(xué)習(xí)包:Scikit-learn,包括其經(jīng)典模型原理及實(shí)現(xiàn)方法,從而幫助讀者掌握其基本理論,并付諸于實(shí)踐應(yīng)用。Scikit-learn是機(jī)器學(xué)習(xí)領(lǐng)域非常熱門的一個(gè)開源包,它整合了眾多機(jī)器學(xué)習(xí)算法,基于Python語(yǔ)言編寫而成,可以免費(fèi)使用。Scikit-learn基本功能主要分為六大部分:分類、回歸、聚類、數(shù)據(jù)降維、模型選擇和數(shù)據(jù)預(yù)處理。本章介紹其主要模型及使用方法,具體內(nèi)容如下:數(shù)據(jù)預(yù)處理。主要介紹缺失值的均值、中位數(shù)、最頻繁值填充方法,數(shù)據(jù)的均值-方差、極差規(guī)范化方法。數(shù)據(jù)降維。主要介紹主成分分析方法,本章中也將其歸為數(shù)據(jù)預(yù)處理部分?;貧w。主要介紹常用的線性回歸、神經(jīng)網(wǎng)絡(luò)非線性回歸。分類。主要介紹支持向量機(jī)、邏輯回歸、神經(jīng)網(wǎng)絡(luò)分類方法。聚類。主要介紹常用的K-均值聚類算法。模型選擇。這部分主要通過實(shí)際案例過程中不同模型之間的比較來實(shí)現(xiàn)模型選擇。Part55.1Scikit-learn簡(jiǎn)介在Anaconda發(fā)行版中已經(jīng)集成了Scikit-learn分析包,無(wú)需再進(jìn)行安裝,在Spyder腳本文件中直接導(dǎo)入即可使用。由于Scikit-learn包的內(nèi)容非常多,我們?cè)谑褂眠^程中導(dǎo)入相關(guān)的模塊即可,無(wú)需整個(gè)機(jī)器學(xué)習(xí)包都導(dǎo)進(jìn)去,如圖5-1所示。Part55.1Scikit-learn簡(jiǎn)介圖5-1圖5-1顯示了在temp.py腳本文件中導(dǎo)入了包括數(shù)據(jù)預(yù)處理(缺失值填充、均值-方差規(guī)范化、極差法規(guī)范化、主成分分析)、線性回歸、邏輯回歸、神經(jīng)網(wǎng)絡(luò)(分類和回歸)、支持向量、K-均值聚類相關(guān)模塊。下面我們將逐一介紹這些模塊的使用方法。在實(shí)際數(shù)據(jù)挖掘分析中,數(shù)據(jù)預(yù)處理是必不可少的環(huán)節(jié),甚至?xí)加玫秸麄€(gè)任務(wù)的60%以上的時(shí)間。同時(shí)經(jīng)過數(shù)據(jù)預(yù)處理,能保障數(shù)據(jù)的質(zhì)量,從而減少模型的誤差。數(shù)據(jù)挖掘分析中有一句至理名言:“垃圾進(jìn),垃圾出”,也就是說如果數(shù)據(jù)質(zhì)量得不到保障,模型挖掘出來的結(jié)果也沒有實(shí)際的使用價(jià)值。因此在數(shù)據(jù)挖掘分析任務(wù)中,需要特別注意數(shù)據(jù)的預(yù)處理。本小節(jié)中,我們介紹的數(shù)據(jù)預(yù)處理方法包括:
5.2.1
缺失值處理。
5.2.2
數(shù)據(jù)的規(guī)范化。
5.2.3屬性歸約(主成分分析)。Part55.2數(shù)據(jù)預(yù)處理在數(shù)據(jù)處理過程中缺失值是常見的,需要對(duì)其進(jìn)行處理。前面已經(jīng)介紹過利用pandas包中的fillna函數(shù),可以對(duì)缺失值進(jìn)行填充。但是這種填充方法通過指定值進(jìn)行填充,沒有充分利用數(shù)據(jù)集中的信息。為了克服這種填充方法的缺點(diǎn),這里介紹Scikit-learn包中能充分利用數(shù)據(jù)信息的三種常用填充策略,即均值填充、中位數(shù)填充和最頻繁值填充。這里填充方式有兩種:按行和按列。所謂按行或者按列均值填充策略,就是對(duì)某行或者某列中的所有缺失值用該行或者該列中非缺失部分的值的平均值來表示;中位數(shù)填充策略和最頻繁值填充策略類似,即取某行或某列中非缺失部分的值的中位數(shù)和出現(xiàn)頻次最多的值來代替其缺失值。在介紹填充策略之前,我們先定義待填充的數(shù)據(jù)變量data、c、C,其中data變量通過讀取本書案例資源中的Excel數(shù)據(jù)文件“missing.xlsx”獲得,示例代碼如下:importpandasaspdimportnumpyasnpdata=pd.read_excel('missing.xlsx')#數(shù)據(jù)框datac=np.array([[1,2,3,4],[4,5,6,np.nan],[5,6,7,8],[9,4,np.nan,8]])#數(shù)組cC=pd.DataFrame(c)#數(shù)據(jù)框CPart55.2.1缺失值處理執(zhí)行上述代碼,結(jié)果如圖5-2所示。Part55.2.1缺失值處理圖5-2需要注意的是,填充的數(shù)據(jù)結(jié)構(gòu)要求為數(shù)組或者數(shù)據(jù)框,元素則要求為數(shù)值類型。因此data數(shù)據(jù)中的b列不能進(jìn)行填充。使用Scikit-learn中的數(shù)據(jù)預(yù)處理模塊進(jìn)缺失值填充的基本步驟如下:1.導(dǎo)入數(shù)據(jù)預(yù)處理中的填充模塊Imputer,其命令如下:fromsklearn.preprocessingimportImputer2.利用Imputer創(chuàng)建填充對(duì)象imp,其命令如下:
imp=Imputer(missing_values=‘NaN’,strategy=‘mean’,axis=0)#創(chuàng)建按列均值填充策略對(duì)象。其中對(duì)象參數(shù)說明如下:strategy:均值(mean)、中位數(shù)(median)、最頻繁值(most_frequent)三種填充策略axis=0:按列填充方式axis=1:按行填充方式調(diào)用填充對(duì)象imp中的fit()擬合方法,對(duì)待填充數(shù)據(jù)進(jìn)行擬合訓(xùn)練,其命令如下:imp.fit(Data)#Data為待填充數(shù)據(jù)集變量調(diào)用填充對(duì)象imp中的transform()方法,返回填充后的數(shù)據(jù)集了,其命令如下:FData=imp.transform(Data)#返回填充后的數(shù)據(jù)集FDataPart55.2.1缺失值處理下面對(duì)C數(shù)據(jù)框中的數(shù)據(jù)采用按列均值填充策略、對(duì)c數(shù)組中的數(shù)據(jù)采用按行中位數(shù)填充策略、對(duì)data數(shù)據(jù)中的a、c列采用按列最頻繁值填充策略進(jìn)行填充。示例代碼和執(zhí)行結(jié)果如下:#1.均值填充策略fromsklearn.preprocessingimportImputerfC=Cimp=Imputer(missing_values='NaN',strategy='mean',axis=0)imp.fit(fC)fC=imp.transform(fC)執(zhí)行結(jié)果如圖5-3所示。Part55.2.1缺失值處理圖5-3#2.中位數(shù)填充策略imp=Imputer(missing_values='NaN',strategy='median',axis=1)fc=cimp.fit(fc)fc=imp.transform(fc)執(zhí)行結(jié)果如圖5-4所示。Part55.2.1缺失值處理圖5-4#3.最頻繁值填充策略fD=data[['a','c']]imp=Imputer(missing_values='NaN',strategy='most_frequent',axis=0)imp.fit(fD)fD=imp.transform(fD)執(zhí)行結(jié)果如圖5-5所示。Part55.2.1缺失值處理圖5-5
Part55.2.2數(shù)據(jù)規(guī)范化
在介紹規(guī)范化方法之前,先將待規(guī)范化數(shù)據(jù)文件讀入Python中。該數(shù)據(jù)文件在本書案例資源包中,它是一個(gè)Python格式的二進(jìn)制數(shù)據(jù)文件,文件名為“data.npy”,可以采用Numpy包中的load函數(shù)讀取,示例代碼如下:importnumpyasnpdata=np.load('data.npy')data=data[:,1:]執(zhí)行結(jié)果如圖5-6所示。從圖5-6可以看出,指標(biāo)之間的數(shù)據(jù)差異是比較大的,需要做規(guī)范化處理。Part55.2.2數(shù)據(jù)規(guī)范化圖5-6從圖5-6可以看出,數(shù)據(jù)存在空值(NAN值),在進(jìn)行規(guī)范化之前需要先對(duì)其進(jìn)行填充處理,這里采用按列均值填充策略進(jìn)行填充,示例代碼如下:fromsklearn.preprocessingimportImputerimp=Imputer(missing_values='NaN',strategy='mean',axis=0)imp.fit(data)data=imp.transform(data)執(zhí)行結(jié)果如圖5-7所示。Part55.2.2數(shù)據(jù)規(guī)范化圖5-7圖5-7所示為填充后的數(shù)據(jù),其變量名仍然為data。為了區(qū)分,記X=data,X1=data,對(duì)X作均值-方差規(guī)范化處理,對(duì)X1作0-1規(guī)范化處理。下面分別對(duì)兩種規(guī)范化方法進(jìn)行介紹。首先對(duì)X做均值-方差規(guī)范化處理,其步驟如下:1.導(dǎo)入均值-方差規(guī)范化模塊StandardScalerfromsklearn.preprocessingimportStandardScaler2.利用StandardScaler創(chuàng)建均值-方差規(guī)范化對(duì)象scalerscaler=StandardScaler()3.調(diào)用scaler對(duì)象中的fit()擬合方法,對(duì)待處理的數(shù)據(jù)X進(jìn)行擬合訓(xùn)練scaler.fit(X)4.調(diào)用scaler對(duì)象中的transform()方法,返回規(guī)范化后的數(shù)據(jù)集X(覆蓋原未規(guī)范化的X)X=scaler.transform(X)5.2.2數(shù)據(jù)規(guī)范化Part5對(duì)X做均值-方差規(guī)范化處理示例代碼如下:fromsklearn.preprocessingimportStandardScalerX=datascaler=StandardScaler()scaler.fit(X)X=scaler.transform(X)執(zhí)行結(jié)果如圖5-8所示。5.2.2數(shù)據(jù)規(guī)范化Part5圖5-8對(duì)填充后的數(shù)據(jù)X1做0-1規(guī)范化處理步驟如下:1.導(dǎo)入0-1規(guī)范化模塊MinMaxScalerfromsklearn.preprocessingimportMinMaxScaler#導(dǎo)入0-1規(guī)范化模塊2.利用MinMaxScaler創(chuàng)建0-1規(guī)范化對(duì)象min_max_scalermin_max_scaler=MinMaxScaler()3.調(diào)用min_max_scaler中的fit()擬合方法,對(duì)待處理的數(shù)據(jù)X1進(jìn)行擬合訓(xùn)練min_max_scaler.fit(X1)4.調(diào)用min_max_scaler中的transform()方法,返回處理后的數(shù)據(jù)集X1(覆蓋原未處理的X1)X1=min_max_scaler.transform(X1)5.2.2數(shù)據(jù)規(guī)范化Part5對(duì)填充后的數(shù)據(jù)X1做0-1規(guī)范化處理示例代碼如下:fromsklearn.preprocessingimportMinMaxScalerX1=datamin_max_scaler=MinMaxScaler()min_max_scaler.fit(X1)X1=min_max_scaler.transform(X1)執(zhí)行結(jié)果如圖5-9所示。5.2.2數(shù)據(jù)規(guī)范化Part5圖5-9
1.
主成分分析的理解
我們通常看到各種各樣的排行榜,諸如綜合國(guó)力排名、省市經(jīng)濟(jì)發(fā)展水平排名、大學(xué)綜合排名等。這些排行榜不可能僅采用單個(gè)指標(biāo)衡量,往往需要綜合考慮各方面的因素,運(yùn)用多方面的指標(biāo)進(jìn)行分析。比如,怎樣對(duì)以下地區(qū)農(nóng)村居民人均可支配收入水平進(jìn)行排名呢?部分表格如下:數(shù)據(jù)來源于2016年《中國(guó)統(tǒng)計(jì)年鑒》Part5.2.3
1.主成分分析的理解
關(guān)于排名,我們需要一個(gè)綜合指標(biāo)來衡量,但是這個(gè)綜合指標(biāo)該如何計(jì)算呢?指標(biāo)加權(quán)是一個(gè)通常的思路,比如:
Y1=a11*X1+a12*X2+a13*X3+a14*X4其中X1~X4是原來的指標(biāo),Y1是綜合指標(biāo),a11~a14是對(duì)應(yīng)的加權(quán)系數(shù)。那么如何確定系數(shù)a1j(j=1,2,3,4)呢?這里我們應(yīng)該先明確Xi(i=1,2,3,4)可以看成是一個(gè)隨機(jī)變量,那么Y1是由Xi線性加權(quán)獲得,它也是一個(gè)隨機(jī)變量。在本例子中Xi反映了地區(qū)農(nóng)村居民人均可支配收入來源的某個(gè)方面指標(biāo),僅代表某方面的信息,它在綜合指標(biāo)Y1中,其重要程度可以通過對(duì)應(yīng)的a1j來反映,可以稱a1j為信息系數(shù)。Xi是一個(gè)隨機(jī)變量,Y1也是隨機(jī)變量,考察隨機(jī)變量主要考慮它的均值和方差。比如:X1:50607080均值:65方差:166.66X2:209040110均值:65方差:1766.3因此考慮一個(gè)隨機(jī)變量更多是從方差的角度去考察,即其變異程度,故通常用方差去度量一個(gè)隨機(jī)變量的“信息”Part5.2.31.主成分分析的理解本例子的相關(guān)系數(shù)矩陣計(jì)算示例代碼如下:importpandasaspdData=pd.read_excel('農(nóng)村居民人均可支配收入來源2016.xlsx')X=Data.iloc[:,1:]R=X.corr()執(zhí)行結(jié)果如圖5-10所示。Part5.2.3圖5-10從相關(guān)系數(shù)矩陣R可以看出工資性收入與財(cái)產(chǎn)凈收入相關(guān)程度較高,其他的變量之間相關(guān)程度不高。
2.主成分分析的數(shù)學(xué)模型
Part5.2.3
3.主成分分析的性質(zhì)與定理
Part5.2.3
3.主成分分析的性質(zhì)與定理
Part5.2.3
4.主成分分析的一般步驟
根據(jù)主成分分析的定理與性質(zhì),這里歸納出主成分分析的一般步驟如下:Part5.2.3(1)對(duì)原始數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理;(2)計(jì)算樣本相關(guān)系數(shù)矩陣;(3)求相關(guān)系數(shù)矩陣的特征值和相應(yīng)的特征向量;(4)選擇重要的主成分,并寫出主成分表達(dá)式。(5)計(jì)算主成分得分;(6)依據(jù)主成分得分的數(shù)據(jù),進(jìn)一步從事統(tǒng)計(jì)分析.
5.Python主成分分析應(yīng)用舉例
以表5-1中2016年農(nóng)村居民人均可支配收入來源情況數(shù)據(jù)做主成分分析,并基于主成分給出其綜合排名,完整的思路及計(jì)算代碼如下:Part5.2.3(1)數(shù)據(jù)獲取及數(shù)據(jù)規(guī)范化處理,其中數(shù)據(jù)文件見本書中的案例資源包,示例代碼如下:#數(shù)據(jù)獲取importpandasaspdData=pd.read_excel('農(nóng)村居民人均可支配收入來源2016.xlsx')X=Data.iloc[:,1:]#數(shù)據(jù)規(guī)范化處理fromsklearn.preprocessingimportStandardScalerscaler=StandardScaler()scaler.fit(X)X=scaler.transform(X)執(zhí)行結(jié)果如圖5-11所示。圖.5-115.Python主成分分析應(yīng)用舉例(2)對(duì)標(biāo)準(zhǔn)化后的數(shù)據(jù)X作主成分分析,其基本步驟如下Part5.2.3(1)導(dǎo)入主成分分析模塊PCAfromsklearn.decompositionimportPCA(2)利用PCA創(chuàng)建主成分分析對(duì)象pcapca=PCA(n_components=0.95)#這里設(shè)置累計(jì)貢獻(xiàn)率為95%以上。(3)調(diào)用pca對(duì)象中的fit()方法,對(duì)待分析的數(shù)據(jù)進(jìn)行擬合訓(xùn)練pca.fit(X)(4)調(diào)用pca對(duì)象中的transform()方法,返回提取的主成分Y=pca.transform(X)(5)通過pca對(duì)象中的components_屬性、explained_variance_屬性、explained_variance_ratio_屬性,返回主成分分析中對(duì)應(yīng)的特征向量、特征值和主成分方差百分比(貢獻(xiàn)率),比如:tzxl=ponents_#返回特征向量tz=pca.explained_variance_#返回特征值gxl=pca.explained_variance_ratio_#返回主成分方差百分比(貢獻(xiàn)率)(6)主成分表達(dá)式及驗(yàn)證。由前面分析,我們知道第i個(gè)主成分表示為:其中
代表第i個(gè)主成分對(duì)應(yīng)的特征向量。比如可以通過程序驗(yàn)證第1個(gè)主成分前面的4個(gè)分量的值:Y00=sum(X[0,:]*tzxl[0,:])Y01=sum(X[1,:]*tzxl[0,:])Y02=sum(X[2,:]*tzxl[0,:])Y03=sum(X[3,:]*tzxl[0,:])。5.Python主成分分析應(yīng)用舉例主成分分析完整示例代碼如下:fromsklearn.decompositionimportPCApca=PCA(n_components=0.95)pca.fit(X)Y=pca.transform(X)tzxl=ponents_tz=pca.explained_variance_gxl=pca.explained_variance_ratio_Y00=sum(X[0,:]*tzxl[0,:])Y01=sum(X[1,:]*tzxl[0,:])Y02=sum(X[2,:]*tzxl[0,:])Y03=sum(X[3,:]*tzxl[0,:])執(zhí)行結(jié)果如圖5-12所示。Part5.2.3圖5-125.Python主成分分析應(yīng)用舉例
Part5.2.35.Python主成分分析應(yīng)用舉例Part5.2.32016年農(nóng)村居民人均可支配收入來源情況數(shù)據(jù),基于主成分給出其綜合排名。圖5-135.3.1一元線性回歸Part5
一元線性回歸背景:所謂一元線性回歸,就是自變量和因變量只有一個(gè)的線性相關(guān)關(guān)系模型。下面我們先從一個(gè)簡(jiǎn)單的引例開始,介紹一元線性回歸模型的提出背景,進(jìn)而給出其回歸模型、回歸方程、回歸方程的參數(shù)估計(jì)和擬合優(yōu)度等基本概念。1.引例:有一則新聞:國(guó)家旅游局長(zhǎng)表示,到2020年中國(guó)旅游業(yè)總收入將超過3000億美元。那么他是如何做出這樣的預(yù)測(cè)的呢?旅游總收入(Y)
居民平均收入(X)……身高預(yù)測(cè)問題:子女的身高(Y)
父母的身高(X)變量之間的相互關(guān)系,主要有三種:(1)確定的函數(shù)關(guān)系Y=f(X)(2)不確定的統(tǒng)計(jì)相關(guān)關(guān)系
(3)沒有關(guān)系
不用分析以上兩種例子均屬于第2種情況。線性回歸背景:在數(shù)學(xué)上變量之間可以用確定的函數(shù)關(guān)系來表示是比較常見的一種方式。然而在實(shí)現(xiàn)應(yīng)用中,還存在許多變量之間不能用確定的函數(shù)關(guān)系來表示的例子。前面已經(jīng)介紹過變量之間可能存在著相關(guān)性,那么變量之間的相關(guān)關(guān)系如何來表示呢?本節(jié)將介紹變量之間存在線性相關(guān)關(guān)系的模型:線性回歸模型。下面我們先介紹簡(jiǎn)單的一元線性回歸,進(jìn)而再拓展到較為復(fù)雜的多元線性回歸。最后給出線性回歸模型的Python實(shí)現(xiàn)方法。5.3.1一元線性回歸Part5
2.回歸模型
Y因變量(隨機(jī)變量),x為自變量(確定的變量),
為模型系數(shù),
。每給定一個(gè)x,得到Y(jié)的一個(gè)分布。3.回歸方程對(duì)回歸模型兩邊取數(shù)學(xué)期望,得到回歸方程如下:
,每給定一個(gè)x,便有Y的一個(gè)數(shù)學(xué)期望值與之對(duì)應(yīng),他們是一個(gè)函數(shù)關(guān)系。一般地,通過樣本觀測(cè)數(shù)據(jù),可以估計(jì)出以上回歸方程的參數(shù),其一般形式為:
其中
為對(duì)期望值及兩個(gè)參數(shù)的估計(jì)。4.回歸方程參數(shù)估計(jì)對(duì)總體(x,Y)進(jìn)行n次獨(dú)立觀測(cè),獲得n個(gè)樣本觀測(cè)數(shù)據(jù):(x1,y1),(x2,y2),…,(xn,yn),將其繪制在圖像上,如下圖所示:如何對(duì)這些觀測(cè)值給出最合適的擬合直線呢?——最小二乘法,其基本思想是真實(shí)觀測(cè)值與預(yù)測(cè)值(均值)總的偏差平方和最小,即
求解以上最優(yōu)化問題,即得到:
其中:于是就得到了基于經(jīng)驗(yàn)的回歸方程:5.3.1一元線性回歸Part
55.回歸方程擬合優(yōu)度經(jīng)過前面的步驟我們獲得了線性回歸方程,那么這個(gè)回歸方程的擬合程度如何?能不能利用這個(gè)方程進(jìn)行預(yù)測(cè)?可以通過擬合優(yōu)度來進(jìn)行判斷。在介紹擬合優(yōu)度概念之前,先介紹幾個(gè)概念:總離差平方和、回歸平方和、殘差平方和,其計(jì)算公式分別如下:
,,可以證明:
。
取不同的值
必然不同,故RSS是由于Y與X有顯著線性關(guān)系時(shí),X取值不同而引起Y的變化。ESS是由于Y與X可能不是具有明顯的線性關(guān)系及其他方面的因素產(chǎn)生的誤差。如果RSS遠(yuǎn)遠(yuǎn)大于ESS,說明是什么?說明是回歸的線性關(guān)系顯著,可以用一個(gè)指標(biāo)公式來計(jì)算:稱為擬合優(yōu)度(判定系數(shù)),值越大表明直線擬合程度越好。5.3.2多元線性回歸Part
5前面介紹了只有一個(gè)自變量和一個(gè)因變量的一元線性回歸模型,然而在現(xiàn)實(shí)中自變量通常包含有多個(gè),這時(shí)稱它為多元線性回歸模型。下面我們給出多元線性回歸模型、回歸方程、回歸方程參數(shù)估計(jì)和擬合優(yōu)度等基本概念。1.多元線性回歸模型對(duì)于總體
的n個(gè)觀測(cè)值:它滿足式:其中
相互獨(dú)立,且設(shè)
,記
,,,5.3.2多元線性回歸Part
53.多元線性回歸方程參數(shù)估計(jì)
的參數(shù)估計(jì)(最小二乘法,過程略)為:
的參數(shù)估計(jì)(推導(dǎo)過程略)
其中
,H稱為對(duì)稱冪等矩陣4.多元線性回歸方程擬合優(yōu)度與一元線性回歸模型類似,其總離差平方和、回歸平方和、殘差平方和的公式可以表示為:
可以證明:
。擬合優(yōu)度(判定系數(shù))為:
2.多元線性回歸方程兩邊取期望值,即得到其回歸方程如下
其一般的形式如下:
其中分布為期望值及回歸系數(shù)的估計(jì)5.3.3Python線性回歸應(yīng)用舉例Part
5在發(fā)電場(chǎng)中電力輸出(PE)與AT(溫度)、V(壓力)、AP(濕度)、RH(壓強(qiáng))有關(guān),相關(guān)測(cè)試數(shù)據(jù)(部分)如表5-2所示。表5-2ATVAPRHPE8.3440.771010.8490.01480.4823.6458.491011.474.2445.7529.7456.91007.1541.91438.7619.0749.691007.2276.79453.0911.840.661017.1397.2464.4313.9739.161016.0584.6470.9622.171.291008.275.38442.3514.4741.761021.9878.4146431.2569.511010.2536.83428.776.7738.181017.881.13484.3128.2868.671006.3669.9435.2922.9946.931014.1549.42451.4129.370.041010.9561.23426.25…………………………注:數(shù)據(jù)來源于UCI公共測(cè)試數(shù)據(jù)庫(kù)下載地址為:/ml/machine-learning-databases/00294/問題如下:(1)利用線性回歸分析命令,求出PE與AT、V、AP、RH之間的線性回歸關(guān)系式系數(shù)向量(包括常數(shù)項(xiàng))和擬合優(yōu)度(判定系數(shù)),并在命令窗口輸出來。(2)今有某次測(cè)試數(shù)據(jù)AT=28.4、V=50.6、AP=1011.9、RH=80.54,試預(yù)測(cè)其PE值。5.3.3Python線性回歸應(yīng)用舉例Part
51.讀取數(shù)據(jù),確定自變量x和因變量y,示例代碼如下:importpandasaspddata=pd.read_excel('發(fā)電場(chǎng)數(shù)據(jù).xlsx')x=data.iloc[:,0:4].as_matrix()y=data.iloc[:,4].as_matrix()執(zhí)行結(jié)果(部分)如圖5-14所示。圖5-14其計(jì)算思路及流程如下:2.線性回歸分析,其基本步驟如下:(1)導(dǎo)入線性回歸模塊,簡(jiǎn)稱為L(zhǎng)Rfromsklearn.linear_modelimportLinearRegressionasLR(2)利用LR創(chuàng)建線性回歸對(duì)象lrlr=LR()(3)調(diào)用lr對(duì)象中的fit()方法,對(duì)數(shù)據(jù)進(jìn)行擬合訓(xùn)練lr.fit(x,y)(4)調(diào)用lr對(duì)象中的score()方法,返回其擬合優(yōu)度(判定系數(shù)),觀察線性關(guān)系是否顯著Slr=lr.score(x,y)#判定系數(shù)R^2(5)取lr對(duì)象中的coef_、intercept_屬性,返回x對(duì)應(yīng)的回歸系數(shù)和回歸系數(shù)常數(shù)項(xiàng)c_x=lr.coef_#x對(duì)應(yīng)的回歸系數(shù)c_b=ercept_#回歸系數(shù)常數(shù)項(xiàng)3.利用線性回歸模型進(jìn)行預(yù)測(cè)(1)可以利用lr對(duì)象中的predict()方法進(jìn)行預(yù)測(cè),比如importnumpyasnpx1=np.array([28.4,50.6,1011.9,80.54])x1=x1.reshape(1,4)R1=lr.predict(x1)(2)也可以利用線性回歸方程式進(jìn)行預(yù)測(cè),這個(gè)方法需要自行計(jì)算,比如:r1=x1*c_xR2=r1.sum()+c_b#計(jì)算其預(yù)測(cè)值5.3.3Python線性回歸應(yīng)用舉例Part
5#1.數(shù)據(jù)獲取importpandasaspddata=pd.read_excel('發(fā)電場(chǎng)數(shù)據(jù).xlsx')x=data.iloc[:,0:4].as_matrix()y=data.iloc[:,4].as_matrix()#2.導(dǎo)入線性回歸模塊,簡(jiǎn)稱為L(zhǎng)Rfromsklearn.linear_modelimportLinearRegressionasLRlr=LR()#創(chuàng)建線性回歸模型類lr.fit(x,y)#擬合Slr=lr.score(x,y)#判定系數(shù)R^2c_x=lr.coef_#x對(duì)應(yīng)的回歸系數(shù)c_b=ercept_#回歸系數(shù)常數(shù)項(xiàng)#3.預(yù)測(cè)importnumpyasnpx1=np.array([28.4,50.6,1011.9,80.54])x1=x1.reshape(1,4)R1=lr.predict(x1)#采用自帶函數(shù)預(yù)測(cè)r1=x1*c_xR2=r1.sum()+c_b#計(jì)算其預(yù)測(cè)值print('x回歸系數(shù)為:',c_x)print('回歸系數(shù)常數(shù)項(xiàng)為:',c_b)print('判定系數(shù)為:',Slr)print('樣本預(yù)測(cè)值為:',R1)執(zhí)行結(jié)果為:x回歸系數(shù)為:[-1.97751311-0.233916420.06208294-0.1580541]回歸系數(shù)常數(shù)項(xiàng)為:454.609274315判定系數(shù)為:0.928696089812樣本預(yù)測(cè)值為:[436.70378447]線性回歸完整示例代碼如下:5.4.1邏輯回歸模型Part
5邏輯回歸模型是使用一個(gè)函數(shù)來歸一化y值,使y的取值在區(qū)間(0,1)內(nèi),這個(gè)函數(shù)稱為L(zhǎng)ogistic函數(shù):其中
,這樣就將預(yù)測(cè)問題轉(zhuǎn)化為一個(gè)概率問題。一般以0.5為界,如果預(yù)測(cè)值大于0.5時(shí),我們判斷此時(shí)y更可能為1,否則認(rèn)為y=0。5.4.2Python邏輯回歸模型應(yīng)用舉例Part
5取UCI公共測(cè)試數(shù)據(jù)庫(kù)中的澳大利亞信貸批準(zhǔn)數(shù)據(jù)集作為本例的數(shù)據(jù)集,該數(shù)據(jù)集共有14個(gè)特征數(shù)據(jù),1個(gè)分類標(biāo)簽y(1-同意貸款,0-不同意貸款),共690個(gè)申請(qǐng)者記錄,部分?jǐn)?shù)據(jù)如表5-3所示。表5-3注:數(shù)據(jù)下載地址為:/ml/machine-learning-databases/statlog/australian/x1x2x3x4x5x6x7x8x9x10x11x12x13x14y122.0811.462441.5850001210012130022.6772840.1650000216010029.581.751441.250001228010021.6711.51530111112011120.178.172641.96111402601591015.830.5852881.51120210011117.426.52340.12500002601010058.674.4621183.0411602435611…
以前面600個(gè)申請(qǐng)者作為訓(xùn)練數(shù)據(jù),后90個(gè)申請(qǐng)者作為測(cè)試數(shù)據(jù),利用邏輯回歸模型預(yù)測(cè)其準(zhǔn)確率。5.4.2Python邏輯回歸模型應(yīng)用舉例Part
51.數(shù)據(jù)獲取importpandasaspddata=pd.read_excel('credit.xlsx')2.訓(xùn)練樣本與測(cè)試樣本劃分,其中訓(xùn)練用的特征數(shù)據(jù)用x表示,預(yù)測(cè)變量用y表示,測(cè)試樣本則分別記為x1和y1。x=data.iloc[:600,:14].as_matrix()y=data.iloc[:600,14].as_matrix()x1=data.iloc[600:,:14].as_matrix()y1=data.iloc[600:,14].as_matrix()3.邏輯回歸分析,其基本步驟如下:(1)導(dǎo)入邏輯回歸模塊,簡(jiǎn)稱為L(zhǎng)Rfromsklearn.linear_modelimportLogisticRegressionasLR(2)利用LR創(chuàng)建邏輯回歸類lrlr=LR()(3)調(diào)用lr中的fit()方法進(jìn)行訓(xùn)練lr.fit(x,y)(4)調(diào)用lr中的score()方法,返回其模型準(zhǔn)確率r=lr.score(x,y);#模型準(zhǔn)確率(針對(duì)訓(xùn)練數(shù)據(jù))(5)調(diào)用lr中的predict()方法,對(duì)測(cè)試樣本進(jìn)行預(yù)測(cè),獲得其預(yù)測(cè)結(jié)果R=lr.predict(x1)具體實(shí)現(xiàn)思路及流程如下:importpandasaspddata=pd.read_excel('credit.xlsx')x=data.iloc[:600,:14].as_matrix()y=data.iloc[:600,14].as_matrix()x1=data.iloc[600:,:14].as_matrix()y1=data.iloc[600:,14].as_matrix()fromsklearn.linear_modelimportLogisticRegressionasLRlr=LR()#創(chuàng)建邏輯回歸模型類lr.fit(x,y)#訓(xùn)練數(shù)據(jù)r=lr.score(x,y);#模型準(zhǔn)確率(針對(duì)訓(xùn)練數(shù)據(jù))R=lr.predict(x1)Z=R-y1Rs=len(Z[Z==0])/len(Z)print('預(yù)測(cè)結(jié)果為:',R)print('預(yù)測(cè)準(zhǔn)確率為:',Rs)邏輯回歸分析完整示例代碼如下:執(zhí)行結(jié)果為:預(yù)測(cè)結(jié)果為:[011110010110001100010110111010001001000101101010111001001000101100010011010001010110110110]預(yù)測(cè)準(zhǔn)確率為:0.83333333333333345.5神經(jīng)網(wǎng)絡(luò)神經(jīng)網(wǎng)絡(luò)模擬思想神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)及數(shù)學(xué)模型神經(jīng)網(wǎng)絡(luò)分類應(yīng)用舉例神經(jīng)網(wǎng)絡(luò)回歸應(yīng)用舉例5.5.1神經(jīng)網(wǎng)絡(luò)的模擬思路Part5
1.孩子的日常辨識(shí)能力一個(gè)孩子生下來,他就已經(jīng)在不斷的學(xué)習(xí)了。他的大腦就好比一個(gè)能不斷接受新事物同時(shí)能識(shí)別事物的龐大而復(fù)雜的模型,大腦模型不斷的接受外界的信息,處理信息及判斷。小孩開始會(huì)說話了,總喜歡問這問那,并不斷的說出這是什么那是什么,即使很多是錯(cuò)誤的,但經(jīng)過大人的不斷糾正后,終于能識(shí)別一些日常中常見的事物了,這就是一個(gè)不斷的監(jiān)督學(xué)習(xí)過程。某一天,大人帶著小孩,來到一個(gè)農(nóng)場(chǎng),遠(yuǎn)遠(yuǎn)就看到一大片綠油油的稻田,孩子興奮地說出了“好大的一片稻田”,大人樂了。因?yàn)樾『⒌拇竽X已經(jīng)是一個(gè)經(jīng)過長(zhǎng)時(shí)間學(xué)習(xí)訓(xùn)練的模型了,已經(jīng)具備一定的辨識(shí)能力。
5.5.1神經(jīng)網(wǎng)絡(luò)的模擬思路Part5
Part5
5.5.1神經(jīng)網(wǎng)絡(luò)的模擬思路
Part5
5.5.1神經(jīng)網(wǎng)絡(luò)的模擬思路這里介紹目前常用的BP神經(jīng)網(wǎng)絡(luò),其網(wǎng)絡(luò)結(jié)構(gòu)及數(shù)學(xué)模型如下:
Part5
5.5.2神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)及數(shù)學(xué)模型
Part5
5.5.2神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)及數(shù)學(xué)模型
Part5
5.5.2神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)及數(shù)學(xué)模型仍以5.4.2的澳大利亞信貸批準(zhǔn)數(shù)據(jù)集為例,介紹Python神經(jīng)網(wǎng)絡(luò)分類模型的應(yīng)用。具體計(jì)算流程及思路如下:
1.數(shù)據(jù)獲取及訓(xùn)練樣本、測(cè)試樣本的劃分同5.4.2
2.神經(jīng)網(wǎng)絡(luò)分類模型構(gòu)建
(1)導(dǎo)入神經(jīng)網(wǎng)絡(luò)分類模塊MLPClassifier。fromsklearn.neural_networkimportMLPClassifier(2)利用MLPClassifier創(chuàng)建神經(jīng)網(wǎng)絡(luò)分類對(duì)象clf。clf=MLPClassifier(solver='lbfgs',alpha=1e-5,hidden_layer_sizes=(5,2),random_state=1)參數(shù)說明:Solver:神經(jīng)網(wǎng)絡(luò)優(yōu)化求解算法,包括lbfgs、sgd、adam三種,默認(rèn)為adamAlpha:模型訓(xùn)練誤差,默認(rèn)為0.0001Hidden_layer_sizes:隱含層神經(jīng)元個(gè)數(shù),如果是單層神經(jīng)元,設(shè)置其具體數(shù)值即可,本例中隱含層有兩層,為5*2.random_state:默認(rèn)設(shè)置為1即可。Part5
5.5.3神經(jīng)網(wǎng)絡(luò)分類應(yīng)用舉例(3)調(diào)用clf對(duì)象中的fit()方法進(jìn)行網(wǎng)絡(luò)訓(xùn)練。clf.fit(x,y)(4)調(diào)用clf對(duì)象中的score()方法,獲得神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)準(zhǔn)確率(針對(duì)訓(xùn)練數(shù)據(jù))rv=clf.score(x,y)(5)調(diào)用clf對(duì)象中的predict()方法可以對(duì)測(cè)試樣本進(jìn)行預(yù)測(cè),獲得其預(yù)測(cè)結(jié)果R=clf.predict(x1)Part5
5.5.3神經(jīng)網(wǎng)絡(luò)分類應(yīng)用舉例示例代碼如下:importpandasaspddata=pd.read_excel('credit.xlsx')x=data.iloc[:600,:14].as_matrix()y=data.iloc[:600,14].as_matrix()x1=data.iloc[600:,:14].as_matrix()y1=data.iloc[600:,14].as_matrix()fromsklearn.neural_networkimportMLPClassifierclf=MLPClassifier(solver='lbfgs',alpha=1e-5,hidden_layer_sizes=(5,2),random_state=1)clf.fit(x,y);rv=clf.score(x,y)R=clf.predict(x1)Z=R-y1Rs=len(Z[Z==0])/len(Z)print('預(yù)測(cè)結(jié)果為:',R)print('預(yù)測(cè)準(zhǔn)確率為:',Rs)Part5
5.5.3神經(jīng)網(wǎng)絡(luò)分類應(yīng)用舉例執(zhí)行結(jié)果如下:預(yù)測(cè)結(jié)果為:[011110010110001100010110100000000000000001101011010001001000101000000000000000010010110010]預(yù)測(cè)準(zhǔn)確率為:0.8222222222222222Part5
5.5.3神經(jīng)網(wǎng)絡(luò)分類應(yīng)用舉例仍以5.3.3中的發(fā)電場(chǎng)數(shù)據(jù)為例,預(yù)測(cè)AT=28.4,V=50.6,AP=1011.9,RH=80.54時(shí)的PE值。其計(jì)算流程及思路如下:
1.?dāng)?shù)據(jù)獲取及訓(xùn)練樣本構(gòu)建其中訓(xùn)練樣本的特征輸入變量用x表示,輸出變量用y表示。importpandasaspddata=pd.read_excel('發(fā)電場(chǎng)數(shù)據(jù).xlsx')x=data.iloc[:,0:4]y=data.iloc[:,4]2.預(yù)測(cè)樣本的構(gòu)建其中預(yù)測(cè)樣本的輸入特征變量用x1表示importnumpyasnpx1=np.array([28.4,50.6,1011.9,80.54])x1=x1.reshape(1,4)Part5
5.5.4神經(jīng)網(wǎng)絡(luò)回歸應(yīng)用舉例3.神經(jīng)網(wǎng)絡(luò)回歸模型構(gòu)建(1)導(dǎo)入神經(jīng)網(wǎng)絡(luò)回歸模塊MLPRegressor。fromsklearn.neural_networkimportMLPRegressor(2)利用MLPRegressor創(chuàng)建神經(jīng)網(wǎng)絡(luò)回歸對(duì)象clf。clf=MLPRegressor(solver='lbfgs',alpha=1e-5,hidden_layer_sizes=8,random_state=1)參數(shù)說明:Solver:神經(jīng)網(wǎng)絡(luò)優(yōu)化求解算法,包括lbfgs、sgd、adam三種,默認(rèn)為adamAlpha:模型訓(xùn)練誤差,默認(rèn)為0.0001Hidden_layer_sizes:隱含層神經(jīng)元個(gè)數(shù),如果是單層神經(jīng)元,設(shè)置其具體數(shù)值即可,如果是多層,比如隱含層有兩層5*2,則hidden_layer_sizes=(5,2).random_state:默認(rèn)設(shè)置為1即可。Part5
5.5.4神經(jīng)網(wǎng)絡(luò)回歸應(yīng)用舉例(3)調(diào)用clf對(duì)象中的fit()方法進(jìn)行網(wǎng)絡(luò)訓(xùn)練。clf.fit(x,y)(4)調(diào)用clf對(duì)象中的score()方法,獲得神經(jīng)網(wǎng)絡(luò)回歸的擬合優(yōu)度(判決系數(shù))。rv=clf.score(x,y)(5)調(diào)用clf對(duì)象中的predict()可以對(duì)測(cè)試樣本進(jìn)行預(yù)測(cè),獲得其預(yù)測(cè)結(jié)果。R=clf.predict(x1)示例代碼如下:importpandasaspddata=pd.read_excel('發(fā)電場(chǎng)數(shù)據(jù).xlsx')x=data.iloc[:,0:4]y=data.iloc[:,4]Part5
5.5.4神經(jīng)網(wǎng)絡(luò)回歸應(yīng)用舉例fromsklearn.neural_networkimportMLPRegressorclf=MLPRegressor(solver='lbfgs',alpha=1e-5,hidden_layer_sizes=8,random_state=1)clf.fit(x,y);rv=clf.score(x,y)importnumpyasnpx1=np.array([28.4,50.6,1011.9,80.54])x1=x1.reshape(1,4)R=clf.predict(x1)print('樣本預(yù)測(cè)值為:',R)輸出結(jié)果為:樣本預(yù)測(cè)值為:[439.27258187]Part5
5.5.4神經(jīng)網(wǎng)絡(luò)回歸應(yīng)用舉例5.6支持向量機(jī)支持向量機(jī)的原理支持向量機(jī)的應(yīng)用舉例支持向量機(jī)基于統(tǒng)計(jì)學(xué)習(xí)理論,強(qiáng)調(diào)結(jié)構(gòu)風(fēng)險(xiǎn)最小化。其基本思想是:對(duì)于一個(gè)給定有限數(shù)量訓(xùn)練樣本的學(xué)習(xí)任務(wù),通過在原空間或經(jīng)投影后的高維空間中構(gòu)造最優(yōu)分離超平面,將給定的兩類訓(xùn)練樣本分開,構(gòu)造分離超平面的依據(jù)是兩類樣本對(duì)分離超平面的最小距離最大化。它的思想可用下圖說明,圖中描述的是兩類樣本線性可分的情形,圖中“圓”和“星”分別代表兩類樣本。
Part
55.6.1支持向量機(jī)原理
Part
55.6.1支持向量機(jī)原理
Part
55.6.1支持向量機(jī)原理
Part
55.6.1支持向量機(jī)原理5.6.2支持向量機(jī)應(yīng)用舉例Part
5取自UCI公共測(cè)試數(shù)據(jù)庫(kù)中的汽車評(píng)價(jià)數(shù)據(jù)集作為本例的數(shù)據(jù)集,該數(shù)據(jù)集共有6個(gè)特征數(shù)據(jù),1個(gè)分類標(biāo)簽,共1728條記錄,部分?jǐn)?shù)據(jù)如表5-4所示。
表5-4汽車評(píng)價(jià)數(shù)據(jù)
a1a2a3a4a5a6d442232344223334422313442222344222334422213442212344221334422113442432344243334424313……………………………………注:數(shù)據(jù)下載地址為:/ml/datasets/Car+Evaluation其中特征a1~a6的含義及取值依次為:buyingv-high,high,med,lowmaintv-high,high,med,lowdoors2,3,4,5-morepersons2,4,morelug_bootsmall,med,bigsafetylow,med,high分類標(biāo)簽d的取值情況為:unacc1acc2good3v-good4Part
55.6.2支持向量機(jī)應(yīng)用舉例取數(shù)據(jù)集的前1690條記錄作為訓(xùn)練集,余下的作為測(cè)試集,計(jì)算其預(yù)測(cè)準(zhǔn)確率。其計(jì)算流程及思路如下:1.?dāng)?shù)據(jù)獲取importpandasaspddata=pd.read_excel('car.xlsx')2.訓(xùn)練樣本與測(cè)試樣本劃分。其中訓(xùn)練用的特征數(shù)據(jù)用x表示,預(yù)測(cè)變量用y表示;測(cè)試樣本則分別記為x1和y1。x=data.iloc[:1690,:6].as_matrix()y=data.iloc[:1690,6].as_matrix()x1=data.iloc[1691:,:6].as_matrix()y1=data.iloc[1691:,6].as_matrix()Part
55.6.2支持向量機(jī)應(yīng)用舉例3.支持向量機(jī)分類模型構(gòu)建
(1)導(dǎo)入支持向量機(jī)模塊svm。fromsklearnimportsvm(2)利用svm創(chuàng)建支持向量機(jī)類svm。clf=svm.SVC(kernel='rbf')其中核函數(shù)可以選擇線性核、多項(xiàng)式核、高斯核、sig核,分別用linear,poly,rbf,sigmoid表示,默認(rèn)情況下選擇高斯核。(3)調(diào)用svm中的fit()方法進(jìn)行訓(xùn)練。clf.fit(x,y)(4)調(diào)用svm中的score()方法,考查其訓(xùn)練效果。rv=clf.score(x,y);#模型準(zhǔn)確率(針對(duì)訓(xùn)練數(shù)據(jù))(5)調(diào)用svm中的predict()方法,對(duì)測(cè)試樣本進(jìn)行預(yù)測(cè),獲得其預(yù)測(cè)結(jié)果。R=clf.predict(x1)Part
55.6.2支持向量機(jī)應(yīng)用舉例示例代碼如下:importpandasaspddata=pd.read_excel('car.xlsx')x=data.iloc[:1690,:6].as_matrix()y=data.iloc[:1690,6].as_matrix()x1=data.iloc[1691:,:6].as_matrix()y1=data.iloc[1691:,6].as_matrix()fromsklearnimportsvmclf=svm.SVC(kernel='rbf')clf.fit(x,y)rv=clf.score(x,y);R=clf.predict(x1)Part
55.6.2支持向量機(jī)應(yīng)用舉例Z=R-y1Rs=len(Z[Z==0])/len(Z)print('預(yù)測(cè)結(jié)果為:',R)print('預(yù)測(cè)準(zhǔn)確率為:',Rs)輸出結(jié)果如下:預(yù)測(cè)結(jié)果為:[4312324324333333333312324324312324324]預(yù)測(cè)準(zhǔn)確率為:1.0Part
55.6.2支持向量機(jī)應(yīng)用舉例5.7K-均值聚類Part5
物以類聚,人以群分,這是聚類分析的基本常識(shí)。聚類分析主要使得類內(nèi)的樣本盡可能相似,而類之間的樣本盡可能相異。聚類問題的一般提法是:設(shè)有n個(gè)樣本的p元觀測(cè)數(shù)據(jù)組成一個(gè)數(shù)據(jù)矩陣
其中每一行表示一個(gè)樣本,每一列表示一個(gè)指標(biāo),表示第i個(gè)樣本關(guān)于第j項(xiàng)指標(biāo)的觀測(cè)值,要根據(jù)觀測(cè)值矩陣X對(duì)樣本進(jìn)行聚類。一種聚類的思想是:在樣本之間定義距離,樣本距離表明樣品之間的相似度,將樣本按相似度的大小逐一歸類,關(guān)系密切的聚集到較小的一類,關(guān)系疏遠(yuǎn)的聚集到較大的一類,直到所有樣本都聚集完畢。上述思想正是聚類分析的基本思想。聚類分析旨在找出數(shù)據(jù)對(duì)象之間的關(guān)系,對(duì)原數(shù)據(jù)進(jìn)行分組打標(biāo)簽,標(biāo)準(zhǔn)是每個(gè)大組之間存在一定的差異性,而組內(nèi)的對(duì)象存在一定的相似性,因此大組之間差異越大,組內(nèi)的對(duì)象相似度越高,最終的聚類效果就越顯著。K-均值聚類算法是數(shù)據(jù)挖掘中的經(jīng)典聚類算法,它是一種劃分聚類算法,由于簡(jiǎn)潔和高效使得它已成為所有聚類算法中最廣泛使用的算法。5.7.1K-均值聚類的基本原理Part5
k-均值聚類算法是一種基于原型的、根據(jù)距離劃分組的算法,其時(shí)間復(fù)雜度比其他聚類算法低,用戶需指定劃分組的個(gè)數(shù)k。其中,k-均值聚類常見距離測(cè)度包括歐幾里得距離、曼哈頓距離、切比雪夫距離等。通常情況下k-均值聚類分析默認(rèn)采用歐幾里得距離進(jìn)行計(jì)算,不僅是歐幾里得距離計(jì)算方便,且很容易解釋對(duì)象之間的關(guān)系。表示第個(gè)樣本與第個(gè)樣本之間的歐式距離。5.7.1K-均值聚類的基本原理Part5
K-均值聚類算法的直觀理解如下:Step1:隨機(jī)初始化K個(gè)聚類中心,即K個(gè)類中心向量Step2:對(duì)每個(gè)樣本,計(jì)算其與各個(gè)類中心向量的距離,并將該樣本指派給距離最小的類Step3:更新每個(gè)類的中心向量,更新的方法為取該類所有樣本的特征向量均值。Step4:直到各個(gè)類的中心向量不再發(fā)生變化為止,作為退出條件。比如有以下8個(gè)數(shù)據(jù)樣本,對(duì)這8個(gè)數(shù)據(jù)樣本聚為兩類xi1.51.71.62.12.22.42.51.8yi2.51.32.26.25.27.16.81.95.7.1K-均值聚類的基本原理Part
5其K-均值聚類算法執(zhí)行如下:Step1:初始化兩個(gè)類的聚類中心,這里取第1、2個(gè)樣本分別為兩個(gè)類的聚類中心。即C1=(1.5,2.5)C2=(1.7,1.3)Step2:分別計(jì)算每個(gè)樣本到達(dá)各個(gè)聚類中心的距離如下:到達(dá)C1的距離:0 1.220.323.75 2.79 4.69 4.41 0.67到達(dá)C2的距離:1.220 0.914.923.93 5.845.56 0.61各樣本所屬類:121111125.7.1K-均值聚類的基本原理Part
5Step3:更新聚類中心,更新方法為計(jì)算所屬類的特征向量的均值。比如C1聚類中心向量的x分量為樣本1、3、4、5、6、7的特征x分量的均值,y分量為樣本1、3、4、5、6、7的特征y分量的均值。C2聚類中心向量則分別為樣本2、8個(gè)特征向量的均值。C1=((1.5+1.6+2.1+2.2+2.4+2.5)/6,(2.5+2.2+6.2+5.2+7.1+6.8)/6)=(2.05,5)C2=((1.7+1.8)/2,(1.3+1.9)/2)=(1.75,1.6)返回step2,重新計(jì)算各樣本到達(dá)各聚類中心的距離:到達(dá)C1的距離:2.563.722.841.2 0.25 2.13 1.86 3.11到達(dá)C2的距離:0.930.3 0.62 4.613.63 5.545.25 0.3各樣本所屬類:222111125.7.1K-均值聚類的基本原理Part
5同理更新聚類中心得:C1=(2.3,6.325)C2=(1.65,1.975)返回step2,重新計(jì)算各樣本到達(dá)各聚類中心的距離:到達(dá)C1的距離:3.91 5.06 4.18 0.24 1.13 0.78 0.52 4.45到達(dá)C2的距離:0.55 0.68 0.23 4.253.27 5.18 4.9 0.17各樣本所屬類:22211112同理更新聚類中心得:C1=(2.3,6.325)C2=(1.65,1.975)Step4:這里我們發(fā)現(xiàn),聚類中心不再發(fā)生變化,而且類歸屬也沒有發(fā)生變化,其實(shí)正是因?yàn)轭悮w屬?zèng)]有發(fā)生變化,才導(dǎo)致了聚類中心不在發(fā)生變化,達(dá)到算法終止條件。故樣本1、2、3、8歸為一類,樣本4、5、6、7歸為另一類。5.7.1K-均值聚類的基本原理Part
5利用Python,可以自己編寫K-均值聚類算法程序,這樣能更好地對(duì)K-均值聚類算法進(jìn)行理解,參考程序如下:defK_mean(data,knum):#輸入:data--聚類特征數(shù)據(jù)集,要求為數(shù)據(jù)結(jié)構(gòu)要求為numpy數(shù)值數(shù)組#輸入:knum--聚類個(gè)數(shù)#返回值,data后面加一列類別,顯示類別importpandasaspdimportnumpyasnpp=len(data[0,:])#聚類數(shù)據(jù)維度cluscenter=np.zeros((knum,p))#定預(yù)定義元素為全0的初始聚類中心lastcluscenter=np.zeros((knum,p))#定預(yù)定義元素為全0的舊聚類中心5.7.1K-均值聚類的基本原理Part
5#初始聚類中心和舊聚類中心初始化,取數(shù)據(jù)的前knum行作為初始值foriinrange(knum):cluscenter[i,:]=data[i,:]lastcluscenter[i,:]=data[i,:]#預(yù)定義聚類類別一維數(shù)組,用于存放每次計(jì)算樣本的所屬類別clusindex=np.zeros((len(data)))while1:foriinrange(len(data)):#計(jì)算第i個(gè)樣本到各個(gè)聚類中心的歐式距離#預(yù)定義sumsquare,用于存放第i個(gè)樣本到各個(gè)聚類中心的歐式距離sumsquare=np.zeros((knum))forkinrange(knum):sumsquare[k]=sum((data[i,:]-cluscenter[k,:])**2)sumsquare=np.sqrt(sumsquare)#第i個(gè)樣本到各個(gè)聚類中心的歐式距離進(jìn)行升序排序s=pd.Series(sumsquare).sort_values()#判斷第i個(gè)樣本的類歸屬(距離最小,即s序列中第0個(gè)位置的index)clusindex[i]=s.index[0]5.7.1K-均值聚類的基本原理Part
5#將聚類結(jié)果添加到聚類數(shù)據(jù)最后一列clusdata=np.hstack((data,clusindex.reshape((len(data),1))))#更新聚類中心,新的聚類中心為對(duì)應(yīng)類別樣本特征的均值foriinrange(knum):cluscenter[i,:]=np.mean(clusdata[clusdata[:,p]==i,:-1],0).reshape(1,p)#新的聚類中心與舊的聚類中心相減t=abs(lastcluscenter-cluscenter)#如果新的聚類中心與舊的聚類中心一致,即聚類中心不發(fā)生變化,#返回聚類結(jié)果,并退出循環(huán)ifsum(sum(t))==0:returnclusdatabreak#如果更新的聚類中心與舊的聚類中心不一致,#將更新的聚類中心賦給舊的聚類中心,進(jìn)入下一次循環(huán)else:forkinrange(knum):lastcluscenter[k,:]=cluscenter[k,:]5.7.1K-均值聚類的基本原理Part
5調(diào)用該算法函數(shù),并繪制聚類效果圖如下:importpandasaspdD=pd.read_excel('D.xlsx',header=None)D=D.as_matrix()r=K_mean(D,2)x0=r[r[:,2]==0,0]y0=r[r[:,2]==0,1]x1=r[r[:,2]==1,0]y1=r[r[:,2]==1,1]importmatplotlib.pyplotaspltplt.plot(x0,y0,'r*')plt.plot(x1,y1,'bo')5.7.1K-均值聚類的基本原理Part
5執(zhí)行結(jié)果如圖5-15所示。從圖中可以看出,它們明顯的歸結(jié)為兩類:其中紅色星號(hào)為1類,藍(lán)色圓圈為2類。5.7.2PythonK-均值聚類算法應(yīng)用舉例Part
5地區(qū)工資性收入經(jīng)營(yíng)凈收入財(cái)產(chǎn)凈收入轉(zhuǎn)移凈收入北京16637.52061.91350.12260天津12048.15309.4893.71824.4河北6263.23970257.51428.6山西5204.42729.91491999.1內(nèi)蒙古2448.96215.7452.62491.7遼寧5071.25635.5257.61916.4吉林2363.17558.9231.81969.1黑龍江2430.56425.9572.72402.6上海18947.91387.9859.64325江蘇8731.75283.16062984.8浙江14204.35621.9661.82378.1安徽4291.44596.1186.72646.2福建6785.25821.5255.72136.9江西4954.74692.3204.42286.4山東5569.16266.6358.71759.7河南42284643.21682657.6湖北40235534158.63009.3湖南4946.24138.6143.12702.5表5-12016年農(nóng)村居民人均可支配收入來源情況5.7.2PythonK-均值聚類算法應(yīng)用舉例Part
5續(xù)表:廣東7255.33883.6365.83007.5廣西2848.14759.2149.22603海南4764.95315.7139.11623.1重慶3965.64150.1295.83137.3四川3737.64525.2268.52671.8貴州32113115.867.11696.3云南2553.95043.7152.21270.1西藏2204.95237.9148.71502.3陜西39163057.91592263.6甘肅21253261.4128.41942青海2464.33197325.22677.8寧夏3906.13937.5291.81716.3新疆2527.15642222.81791.35.7.2PythonK-均值聚類算法應(yīng)用舉例Part
51.?dāng)?shù)據(jù)獲取及標(biāo)準(zhǔn)化處理importpandasaspddata=pd.read_excel('農(nóng)村居民人均可支配收入來源2016.xlsx')X=data.iloc[:,1:]fromsklearn.preprocessingimportStandardScalerscaler=StandardScaler()scaler.fit(X)X=scaler.transform(X)2.K-均值聚類分析(1)導(dǎo)入K-均值聚類模塊KMeans。fromsklearn.clusterimportKMeans(2)利用KMeans創(chuàng)建K-均值聚類對(duì)象model。model=KMeans(n_clusters=K,random_state=0,max_iter=500)參數(shù)說明如下:n_clusters:設(shè)置的聚類個(gè)數(shù)Krandom_state:隨機(jī)初始狀態(tài),設(shè)置為0即可max_iter:最大跌代次數(shù)(3)調(diào)用model對(duì)象中的fit()方法進(jìn)行擬合訓(xùn)練。model.fit(X)(4)獲取model對(duì)象中的labels_屬性,可以返回其聚類的標(biāo)簽。c=model.labels_以表5-1為例,對(duì)表中給出的31個(gè)地區(qū)農(nóng)村居民人均可支配收入情況作聚類分析,其計(jì)算思路及流程如下:5.7.2PythonK-均值聚類算法應(yīng)用舉例Part
5示例代碼如下:importpandasaspddata=pd.read_excel('農(nóng)村居民人均可支配收入來源2016.xlsx')X=data.iloc[:,1:]fromsklearn.preprocessingimportStandardScalerscaler=StandardScaler()scaler.fit(X)X=scaler.transform(X)fromsklearn.clusterimportKMeans
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度土地租賃保證金合同范本3篇
- 審準(zhǔn)答題區(qū)域高考語(yǔ)文
- 畫世界畫人物課程設(shè)計(jì)
- 2024年單位跨區(qū)域物資運(yùn)輸合同范本2篇
- 新生代表發(fā)言稿(集合15篇)
- 2024年度保密協(xié)議書范本:保密協(xié)議的保密期限3篇
- 注射成型課程設(shè)計(jì)
- 搬遷方案集錦五篇
- 海報(bào)課程設(shè)計(jì)報(bào)告
- 游園湯顯祖課程設(shè)計(jì)
- 邏輯樹的類型及應(yīng)用舉例
- 山東省建筑工程消耗量定額計(jì)算規(guī)則及定額解釋樣本
- 義務(wù)教育科學(xué)課程標(biāo)準(zhǔn)(2022年版)解讀
- 新建南通至寧波高速鐵路站前Ⅲ標(biāo)二分部出海棧橋及綜合碼頭(自用)工程海域使用論證報(bào)告表
- 2023-2024學(xué)年廣東省東莞市七年級(jí)上期末數(shù)學(xué)試卷附答案
- 檢察機(jī)關(guān)的體制與組織機(jī)構(gòu)課件
- 常用光電傳感器介紹課件
- 山東省濰坊市濰城區(qū)2023-2024學(xué)年六年級(jí)上學(xué)期期末語(yǔ)文試題
- 電玩城崗位流程培訓(xùn)方案
- 會(huì)計(jì)師事務(wù)所保密制度
- 復(fù)合機(jī)器人行業(yè)分析
評(píng)論
0/150
提交評(píng)論