Python大數(shù)據(jù)分析與挖掘?qū)崙?zhàn)-第5章-機器學(xué)習(xí)與實現(xiàn)_第1頁
Python大數(shù)據(jù)分析與挖掘?qū)崙?zhàn)-第5章-機器學(xué)習(xí)與實現(xiàn)_第2頁
Python大數(shù)據(jù)分析與挖掘?qū)崙?zhàn)-第5章-機器學(xué)習(xí)與實現(xiàn)_第3頁
Python大數(shù)據(jù)分析與挖掘?qū)崙?zhàn)-第5章-機器學(xué)習(xí)與實現(xiàn)_第4頁
Python大數(shù)據(jù)分析與挖掘?qū)崙?zhàn)-第5章-機器學(xué)習(xí)與實現(xiàn)_第5頁
已閱讀5頁,還剩94頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第五章機器學(xué)習(xí)與實現(xiàn)5.1Scikit-learn簡介5.2數(shù)據(jù)預(yù)處理5.3線性回歸5.4邏輯回歸5.5神經(jīng)網(wǎng)絡(luò)5.6支持向量機5.7K-均值聚類5.8關(guān)聯(lián)規(guī)則5.1Scikit-learn簡介Part5Python之所以能在數(shù)據(jù)科學(xué)與人工智能應(yīng)用領(lǐng)域中占有重要位置,不僅是因為其免費開源易數(shù)據(jù)處理,更重要的是它還提供了豐富且功能強大的機器學(xué)習(xí)模型與算法程序包。本章主要介紹Python中的機器學(xué)習(xí)包:Scikit-learn,包括其經(jīng)典模型原理及實現(xiàn)方法,從而幫助讀者掌握其基本理論,并付諸于實踐應(yīng)用。Scikit-learn是機器學(xué)習(xí)領(lǐng)域非常熱門的一個開源包,它整合了眾多機器學(xué)習(xí)算法,基于Python語言編寫而成,可以免費使用。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īng)網(wǎng)絡(luò)分類方法。聚類。主要介紹常用的K-均值聚類算法。模型選擇。這部分主要通過實際案例過程中不同模型之間的比較來實現(xiàn)模型選擇。Part55.1Scikit-learn簡介在Anaconda發(fā)行版中已經(jīng)集成了Scikit-learn分析包,無需再進行安裝,在Spyder腳本文件中直接導(dǎo)入即可使用。由于Scikit-learn包的內(nèi)容非常多,我們在使用過程中導(dǎo)入相關(guān)的模塊即可,無需整個機器學(xué)習(xí)包都導(dǎo)進去,如圖5-1所示。Part55.1Scikit-learn簡介圖5-1圖5-1顯示了在temp.py腳本文件中導(dǎo)入了包括數(shù)據(jù)預(yù)處理(缺失值填充、均值-方差規(guī)范化、極差法規(guī)范化、主成分分析)、線性回歸、邏輯回歸、神經(jīng)網(wǎng)絡(luò)(分類和回歸)、支持向量、K-均值聚類相關(guān)模塊。下面我們將逐一介紹這些模塊的使用方法。在實際數(shù)據(jù)挖掘分析中,數(shù)據(jù)預(yù)處理是必不可少的環(huán)節(jié),甚至?xí)加玫秸麄€任務(wù)的60%以上的時間。同時經(jīng)過數(shù)據(jù)預(yù)處理,能保障數(shù)據(jù)的質(zhì)量,從而減少模型的誤差。數(shù)據(jù)挖掘分析中有一句至理名言:“垃圾進,垃圾出”,也就是說如果數(shù)據(jù)質(zhì)量得不到保障,模型挖掘出來的結(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ù)處理過程中缺失值是常見的,需要對其進行處理。前面已經(jīng)介紹過利用pandas包中的fillna函數(shù),可以對缺失值進行填充。但是這種填充方法通過指定值進行填充,沒有充分利用數(shù)據(jù)集中的信息。為了克服這種填充方法的缺點,這里介紹Scikit-learn包中能充分利用數(shù)據(jù)信息的三種常用填充策略,即均值填充、中位數(shù)填充和最頻繁值填充。這里填充方式有兩種:按行和按列。所謂按行或者按列均值填充策略,就是對某行或者某列中的所有缺失值用該行或者該列中非缺失部分的值的平均值來表示;中位數(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列不能進行填充。使用Scikit-learn中的數(shù)據(jù)預(yù)處理模塊進缺失值填充的基本步驟如下:1.導(dǎo)入數(shù)據(jù)預(yù)處理中的填充模塊Imputer,其命令如下:fromsklearn.preprocessingimportImputer2.利用Imputer創(chuàng)建填充對象imp,其命令如下:

imp=Imputer(missing_values=‘NaN’,strategy=‘mean’,axis=0)#創(chuàng)建按列均值填充策略對象。其中對象參數(shù)說明如下:strategy:均值(mean)、中位數(shù)(median)、最頻繁值(most_frequent)三種填充策略axis=0:按列填充方式axis=1:按行填充方式調(diào)用填充對象imp中的fit()擬合方法,對待填充數(shù)據(jù)進行擬合訓(xùn)練,其命令如下:imp.fit(Data)#Data為待填充數(shù)據(jù)集變量調(diào)用填充對象imp中的transform()方法,返回填充后的數(shù)據(jù)集了,其命令如下:FData=imp.transform(Data)#返回填充后的數(shù)據(jù)集FDataPart55.2.1缺失值處理下面對C數(shù)據(jù)框中的數(shù)據(jù)采用按列均值填充策略、對c數(shù)組中的數(shù)據(jù)采用按行中位數(shù)填充策略、對data數(shù)據(jù)中的a、c列采用按列最頻繁值填充策略進行填充。示例代碼和執(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ù)文件在本書案例資源包中,它是一個Python格式的二進制數(shù)據(jù)文件,文件名為“data.npy”,可以采用Numpy包中的load函數(shù)讀取,示例代碼如下:importnumpyasnpdata=np.load('data.npy')data=data[:,1:]執(zhí)行結(jié)果如圖5-6所示。從圖5-6可以看出,指標之間的數(shù)據(jù)差異是比較大的,需要做規(guī)范化處理。Part55.2.2數(shù)據(jù)規(guī)范化圖5-6從圖5-6可以看出,數(shù)據(jù)存在空值(NAN值),在進行規(guī)范化之前需要先對其進行填充處理,這里采用按列均值填充策略進行填充,示例代碼如下: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,對X作均值-方差規(guī)范化處理,對X1作0-1規(guī)范化處理。下面分別對兩種規(guī)范化方法進行介紹。首先對X做均值-方差規(guī)范化處理,其步驟如下:1.導(dǎo)入均值-方差規(guī)范化模塊StandardScalerfromsklearn.preprocessingimportStandardScaler2.利用StandardScaler創(chuàng)建均值-方差規(guī)范化對象scalerscaler=StandardScaler()3.調(diào)用scaler對象中的fit()擬合方法,對待處理的數(shù)據(jù)X進行擬合訓(xùn)練scaler.fit(X)4.調(diào)用scaler對象中的transform()方法,返回規(guī)范化后的數(shù)據(jù)集X(覆蓋原未規(guī)范化的X)X=scaler.transform(X)5.2.2數(shù)據(jù)規(guī)范化Part5對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對填充后的數(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ī)范化對象min_max_scalermin_max_scaler=MinMaxScaler()3.調(diào)用min_max_scaler中的fit()擬合方法,對待處理的數(shù)據(jù)X1進行擬合訓(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對填充后的數(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.

主成分分析的理解

我們通??吹礁鞣N各樣的排行榜,諸如綜合國力排名、省市經(jīng)濟發(fā)展水平排名、大學(xué)綜合排名等。這些排行榜不可能僅采用單個指標衡量,往往需要綜合考慮各方面的因素,運用多方面的指標進行分析。比如,怎樣對以下地區(qū)農(nóng)村居民人均可支配收入水平進行排名呢?部分表格如下:數(shù)據(jù)來源于2016年《中國統(tǒng)計年鑒》Part5.2.3

1.主成分分析的理解

關(guān)于排名,我們需要一個綜合指標來衡量,但是這個綜合指標該如何計算呢?指標加權(quán)是一個通常的思路,比如:

Y1=a11*X1+a12*X2+a13*X3+a14*X4其中X1~X4是原來的指標,Y1是綜合指標,a11~a14是對應(yīng)的加權(quán)系數(shù)。那么如何確定系數(shù)a1j(j=1,2,3,4)呢?這里我們應(yīng)該先明確Xi(i=1,2,3,4)可以看成是一個隨機變量,那么Y1是由Xi線性加權(quán)獲得,它也是一個隨機變量。在本例子中Xi反映了地區(qū)農(nóng)村居民人均可支配收入來源的某個方面指標,僅代表某方面的信息,它在綜合指標Y1中,其重要程度可以通過對應(yīng)的a1j來反映,可以稱a1j為信息系數(shù)。Xi是一個隨機變量,Y1也是隨機變量,考察隨機變量主要考慮它的均值和方差。比如:X1:50607080均值:65方差:166.66X2:209040110均值:65方差:1766.3因此考慮一個隨機變量更多是從方差的角度去考察,即其變異程度,故通常用方差去度量一個隨機變量的“信息”Part5.2.31.主成分分析的理解本例子的相關(guān)系數(shù)矩陣計算示例代碼如下: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可以看出工資性收入與財產(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)對原始數(shù)據(jù)進行標準化處理;(2)計算樣本相關(guān)系數(shù)矩陣;(3)求相關(guān)系數(shù)矩陣的特征值和相應(yīng)的特征向量;(4)選擇重要的主成分,并寫出主成分表達式。(5)計算主成分得分;(6)依據(jù)主成分得分的數(shù)據(jù),進一步從事統(tǒng)計分析.

5.Python主成分分析應(yīng)用舉例

以表5-1中2016年農(nóng)村居民人均可支配收入來源情況數(shù)據(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)對標準化后的數(shù)據(jù)X作主成分分析,其基本步驟如下Part5.2.3(1)導(dǎo)入主成分分析模塊PCAfromsklearn.decompositionimportPCA(2)利用PCA創(chuàng)建主成分分析對象pcapca=PCA(n_components=0.95)#這里設(shè)置累計貢獻率為95%以上。(3)調(diào)用pca對象中的fit()方法,對待分析的數(shù)據(jù)進行擬合訓(xùn)練pca.fit(X)(4)調(diào)用pca對象中的transform()方法,返回提取的主成分Y=pca.transform(X)(5)通過pca對象中的components_屬性、explained_variance_屬性、explained_variance_ratio_屬性,返回主成分分析中對應(yīng)的特征向量、特征值和主成分方差百分比(貢獻率),比如:tzxl=ponents_#返回特征向量tz=pca.explained_variance_#返回特征值gxl=pca.explained_variance_ratio_#返回主成分方差百分比(貢獻率)(6)主成分表達式及驗證。由前面分析,我們知道第i個主成分表示為:其中

代表第i個主成分對應(yīng)的特征向量。比如可以通過程序驗證第1個主成分前面的4個分量的值: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

一元線性回歸背景:所謂一元線性回歸,就是自變量和因變量只有一個的線性相關(guān)關(guān)系模型。下面我們先從一個簡單的引例開始,介紹一元線性回歸模型的提出背景,進而給出其回歸模型、回歸方程、回歸方程的參數(shù)估計和擬合優(yōu)度等基本概念。1.引例:有一則新聞:國家旅游局長表示,到2020年中國旅游業(yè)總收入將超過3000億美元。那么他是如何做出這樣的預(yù)測的呢?旅游總收入(Y)

居民平均收入(X)……身高預(yù)測問題:子女的身高(Y)

父母的身高(X)變量之間的相互關(guān)系,主要有三種:(1)確定的函數(shù)關(guān)系Y=f(X)(2)不確定的統(tǒng)計相關(guān)關(guān)系

(3)沒有關(guān)系

不用分析以上兩種例子均屬于第2種情況。線性回歸背景:在數(shù)學(xué)上變量之間可以用確定的函數(shù)關(guān)系來表示是比較常見的一種方式。然而在實現(xiàn)應(yīng)用中,還存在許多變量之間不能用確定的函數(shù)關(guān)系來表示的例子。前面已經(jīng)介紹過變量之間可能存在著相關(guān)性,那么變量之間的相關(guān)關(guān)系如何來表示呢?本節(jié)將介紹變量之間存在線性相關(guān)關(guān)系的模型:線性回歸模型。下面我們先介紹簡單的一元線性回歸,進而再拓展到較為復(fù)雜的多元線性回歸。最后給出線性回歸模型的Python實現(xiàn)方法。5.3.1一元線性回歸Part5

2.回歸模型

Y因變量(隨機變量),x為自變量(確定的變量),

為模型系數(shù),

。每給定一個x,得到Y(jié)的一個分布。3.回歸方程對回歸模型兩邊取數(shù)學(xué)期望,得到回歸方程如下:

,每給定一個x,便有Y的一個數(shù)學(xué)期望值與之對應(yīng),他們是一個函數(shù)關(guān)系。一般地,通過樣本觀測數(shù)據(jù),可以估計出以上回歸方程的參數(shù),其一般形式為:

其中

為對期望值及兩個參數(shù)的估計。4.回歸方程參數(shù)估計對總體(x,Y)進行n次獨立觀測,獲得n個樣本觀測數(shù)據(jù):(x1,y1),(x2,y2),…,(xn,yn),將其繪制在圖像上,如下圖所示:如何對這些觀測值給出最合適的擬合直線呢?——最小二乘法,其基本思想是真實觀測值與預(yù)測值(均值)總的偏差平方和最小,即

求解以上最優(yōu)化問題,即得到:

其中:于是就得到了基于經(jīng)驗的回歸方程:5.3.1一元線性回歸Part

55.回歸方程擬合優(yōu)度經(jīng)過前面的步驟我們獲得了線性回歸方程,那么這個回歸方程的擬合程度如何?能不能利用這個方程進行預(yù)測?可以通過擬合優(yōu)度來進行判斷。在介紹擬合優(yōu)度概念之前,先介紹幾個概念:總離差平方和、回歸平方和、殘差平方和,其計算公式分別如下:

,,可以證明:

。

取不同的值

必然不同,故RSS是由于Y與X有顯著線性關(guān)系時,X取值不同而引起Y的變化。ESS是由于Y與X可能不是具有明顯的線性關(guān)系及其他方面的因素產(chǎn)生的誤差。如果RSS遠遠大于ESS,說明是什么?說明是回歸的線性關(guān)系顯著,可以用一個指標公式來計算:稱為擬合優(yōu)度(判定系數(shù)),值越大表明直線擬合程度越好。5.3.2多元線性回歸Part

5前面介紹了只有一個自變量和一個因變量的一元線性回歸模型,然而在現(xiàn)實中自變量通常包含有多個,這時稱它為多元線性回歸模型。下面我們給出多元線性回歸模型、回歸方程、回歸方程參數(shù)估計和擬合優(yōu)度等基本概念。1.多元線性回歸模型對于總體

的n個觀測值:它滿足式:其中

相互獨立,且設(shè)

,記

,,,5.3.2多元線性回歸Part

53.多元線性回歸方程參數(shù)估計

的參數(shù)估計(最小二乘法,過程略)為:

的參數(shù)估計(推導(dǎo)過程略)

其中

,H稱為對稱冪等矩陣4.多元線性回歸方程擬合優(yōu)度與一元線性回歸模型類似,其總離差平方和、回歸平方和、殘差平方和的公式可以表示為:

可以證明:

。擬合優(yōu)度(判定系數(shù))為:

2.多元線性回歸方程兩邊取期望值,即得到其回歸方程如下

其一般的形式如下:

其中分布為期望值及回歸系數(shù)的估計5.3.3Python線性回歸應(yīng)用舉例Part

5在發(fā)電場中電力輸出(PE)與AT(溫度)、V(壓力)、AP(濕度)、RH(壓強)有關(guān),相關(guān)測試數(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公共測試數(shù)據(jù)庫下載地址為:/ml/machine-learning-databases/00294/問題如下:(1)利用線性回歸分析命令,求出PE與AT、V、AP、RH之間的線性回歸關(guān)系式系數(shù)向量(包括常數(shù)項)和擬合優(yōu)度(判定系數(shù)),并在命令窗口輸出來。(2)今有某次測試數(shù)據(jù)AT=28.4、V=50.6、AP=1011.9、RH=80.54,試預(yù)測其PE值。5.3.3Python線性回歸應(yīng)用舉例Part

51.讀取數(shù)據(jù),確定自變量x和因變量y,示例代碼如下:importpandasaspddata=pd.read_excel('發(fā)電場數(shù)據(jù).xlsx')x=data.iloc[:,0:4].as_matrix()y=data.iloc[:,4].as_matrix()執(zhí)行結(jié)果(部分)如圖5-14所示。圖5-14其計算思路及流程如下:2.線性回歸分析,其基本步驟如下:(1)導(dǎo)入線性回歸模塊,簡稱為LRfromsklearn.linear_modelimportLinearRegressionasLR(2)利用LR創(chuàng)建線性回歸對象lrlr=LR()(3)調(diào)用lr對象中的fit()方法,對數(shù)據(jù)進行擬合訓(xùn)練lr.fit(x,y)(4)調(diào)用lr對象中的score()方法,返回其擬合優(yōu)度(判定系數(shù)),觀察線性關(guān)系是否顯著Slr=lr.score(x,y)#判定系數(shù)R^2(5)取lr對象中的coef_、intercept_屬性,返回x對應(yīng)的回歸系數(shù)和回歸系數(shù)常數(shù)項c_x=lr.coef_#x對應(yīng)的回歸系數(shù)c_b=ercept_#回歸系數(shù)常數(shù)項3.利用線性回歸模型進行預(yù)測(1)可以利用lr對象中的predict()方法進行預(yù)測,比如importnumpyasnpx1=np.array([28.4,50.6,1011.9,80.54])x1=x1.reshape(1,4)R1=lr.predict(x1)(2)也可以利用線性回歸方程式進行預(yù)測,這個方法需要自行計算,比如:r1=x1*c_xR2=r1.sum()+c_b#計算其預(yù)測值5.3.3Python線性回歸應(yīng)用舉例Part

5#1.數(shù)據(jù)獲取importpandasaspddata=pd.read_excel('發(fā)電場數(shù)據(jù).xlsx')x=data.iloc[:,0:4].as_matrix()y=data.iloc[:,4].as_matrix()#2.導(dǎo)入線性回歸模塊,簡稱為LRfromsklearn.linear_modelimportLinearRegressionasLRlr=LR()#創(chuàng)建線性回歸模型類lr.fit(x,y)#擬合Slr=lr.score(x,y)#判定系數(shù)R^2c_x=lr.coef_#x對應(yīng)的回歸系數(shù)c_b=ercept_#回歸系數(shù)常數(shù)項#3.預(yù)測importnumpyasnpx1=np.array([28.4,50.6,1011.9,80.54])x1=x1.reshape(1,4)R1=lr.predict(x1)#采用自帶函數(shù)預(yù)測r1=x1*c_xR2=r1.sum()+c_b#計算其預(yù)測值print('x回歸系數(shù)為:',c_x)print('回歸系數(shù)常數(shù)項為:',c_b)print('判定系數(shù)為:',Slr)print('樣本預(yù)測值為:',R1)執(zhí)行結(jié)果為:x回歸系數(shù)為:[-1.97751311-0.233916420.06208294-0.1580541]回歸系數(shù)常數(shù)項為:454.609274315判定系數(shù)為:0.928696089812樣本預(yù)測值為:[436.70378447]線性回歸完整示例代碼如下:5.4.1邏輯回歸模型Part

5邏輯回歸模型是使用一個函數(shù)來歸一化y值,使y的取值在區(qū)間(0,1)內(nèi),這個函數(shù)稱為Logistic函數(shù):其中

,這樣就將預(yù)測問題轉(zhuǎn)化為一個概率問題。一般以0.5為界,如果預(yù)測值大于0.5時,我們判斷此時y更可能為1,否則認為y=0。5.4.2Python邏輯回歸模型應(yīng)用舉例Part

5取UCI公共測試數(shù)據(jù)庫中的澳大利亞信貸批準數(shù)據(jù)集作為本例的數(shù)據(jù)集,該數(shù)據(jù)集共有14個特征數(shù)據(jù),1個分類標簽y(1-同意貸款,0-不同意貸款),共690個申請者記錄,部分數(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個申請者作為訓(xùn)練數(shù)據(jù),后90個申請者作為測試數(shù)據(jù),利用邏輯回歸模型預(yù)測其準確率。5.4.2Python邏輯回歸模型應(yīng)用舉例Part

51.數(shù)據(jù)獲取importpandasaspddata=pd.read_excel('credit.xlsx')2.訓(xùn)練樣本與測試樣本劃分,其中訓(xùn)練用的特征數(shù)據(jù)用x表示,預(yù)測變量用y表示,測試樣本則分別記為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)入邏輯回歸模塊,簡稱為LRfromsklearn.linear_modelimportLogisticRegressionasLR(2)利用LR創(chuàng)建邏輯回歸類lrlr=LR()(3)調(diào)用lr中的fit()方法進行訓(xùn)練lr.fit(x,y)(4)調(diào)用lr中的score()方法,返回其模型準確率r=lr.score(x,y);#模型準確率(針對訓(xùn)練數(shù)據(jù))(5)調(diào)用lr中的predict()方法,對測試樣本進行預(yù)測,獲得其預(yù)測結(jié)果R=lr.predict(x1)具體實現(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);#模型準確率(針對訓(xùn)練數(shù)據(jù))R=lr.predict(x1)Z=R-y1Rs=len(Z[Z==0])/len(Z)print('預(yù)測結(jié)果為:',R)print('預(yù)測準確率為:',Rs)邏輯回歸分析完整示例代碼如下:執(zhí)行結(jié)果為:預(yù)測結(jié)果為:[011110010110001100010110111010001001000101101010111001001000101100010011010001010110110110]預(yù)測準確率為: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.孩子的日常辨識能力一個孩子生下來,他就已經(jīng)在不斷的學(xué)習(xí)了。他的大腦就好比一個能不斷接受新事物同時能識別事物的龐大而復(fù)雜的模型,大腦模型不斷的接受外界的信息,處理信息及判斷。小孩開始會說話了,總喜歡問這問那,并不斷的說出這是什么那是什么,即使很多是錯誤的,但經(jīng)過大人的不斷糾正后,終于能識別一些日常中常見的事物了,這就是一個不斷的監(jiān)督學(xué)習(xí)過程。某一天,大人帶著小孩,來到一個農(nóng)場,遠遠就看到一大片綠油油的稻田,孩子興奮地說出了“好大的一片稻田”,大人樂了。因為小孩的大腦已經(jīng)是一個經(jīng)過長時間學(xué)習(xí)訓(xùn)練的模型了,已經(jīng)具備一定的辨識能力。

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的澳大利亞信貸批準數(shù)據(jù)集為例,介紹Python神經(jīng)網(wǎng)絡(luò)分類模型的應(yīng)用。具體計算流程及思路如下:

1.數(shù)據(jù)獲取及訓(xùn)練樣本、測試樣本的劃分同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ò)分類對象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三種,默認為adamAlpha:模型訓(xùn)練誤差,默認為0.0001Hidden_layer_sizes:隱含層神經(jīng)元個數(shù),如果是單層神經(jīng)元,設(shè)置其具體數(shù)值即可,本例中隱含層有兩層,為5*2.random_state:默認設(shè)置為1即可。Part5

5.5.3神經(jīng)網(wǎng)絡(luò)分類應(yīng)用舉例(3)調(diào)用clf對象中的fit()方法進行網(wǎng)絡(luò)訓(xùn)練。clf.fit(x,y)(4)調(diào)用clf對象中的score()方法,獲得神經(jīng)網(wǎng)絡(luò)的預(yù)測準確率(針對訓(xùn)練數(shù)據(jù))rv=clf.score(x,y)(5)調(diào)用clf對象中的predict()方法可以對測試樣本進行預(yù)測,獲得其預(yù)測結(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ù)測結(jié)果為:',R)print('預(yù)測準確率為:',Rs)Part5

5.5.3神經(jīng)網(wǎng)絡(luò)分類應(yīng)用舉例執(zhí)行結(jié)果如下:預(yù)測結(jié)果為:[011110010110001100010110100000000000000001101011010001001000101000000000000000010010110010]預(yù)測準確率為:0.8222222222222222Part5

5.5.3神經(jīng)網(wǎng)絡(luò)分類應(yīng)用舉例仍以5.3.3中的發(fā)電場數(shù)據(jù)為例,預(yù)測AT=28.4,V=50.6,AP=1011.9,RH=80.54時的PE值。其計算流程及思路如下:

1.?dāng)?shù)據(jù)獲取及訓(xùn)練樣本構(gòu)建其中訓(xùn)練樣本的特征輸入變量用x表示,輸出變量用y表示。importpandasaspddata=pd.read_excel('發(fā)電場數(shù)據(jù).xlsx')x=data.iloc[:,0:4]y=data.iloc[:,4]2.預(yù)測樣本的構(gòu)建其中預(yù)測樣本的輸入特征變量用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ò)回歸對象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三種,默認為adamAlpha:模型訓(xùn)練誤差,默認為0.0001Hidden_layer_sizes:隱含層神經(jīng)元個數(shù),如果是單層神經(jīng)元,設(shè)置其具體數(shù)值即可,如果是多層,比如隱含層有兩層5*2,則hidden_layer_sizes=(5,2).random_state:默認設(shè)置為1即可。Part5

5.5.4神經(jīng)網(wǎng)絡(luò)回歸應(yīng)用舉例(3)調(diào)用clf對象中的fit()方法進行網(wǎng)絡(luò)訓(xùn)練。clf.fit(x,y)(4)調(diào)用clf對象中的score()方法,獲得神經(jīng)網(wǎng)絡(luò)回歸的擬合優(yōu)度(判決系數(shù))。rv=clf.score(x,y)(5)調(diào)用clf對象中的predict()可以對測試樣本進行預(yù)測,獲得其預(yù)測結(jié)果。R=clf.predict(x1)示例代碼如下:importpandasaspddata=pd.read_excel('發(fā)電場數(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ù)測值為:',R)輸出結(jié)果為:樣本預(yù)測值為:[439.27258187]Part5

5.5.4神經(jīng)網(wǎng)絡(luò)回歸應(yīng)用舉例5.6支持向量機支持向量機的原理支持向量機的應(yīng)用舉例支持向量機基于統(tǒng)計學(xué)習(xí)理論,強調(diào)結(jié)構(gòu)風(fēng)險最小化。其基本思想是:對于一個給定有限數(shù)量訓(xùn)練樣本的學(xué)習(xí)任務(wù),通過在原空間或經(jīng)投影后的高維空間中構(gòu)造最優(yōu)分離超平面,將給定的兩類訓(xùn)練樣本分開,構(gòu)造分離超平面的依據(jù)是兩類樣本對分離超平面的最小距離最大化。它的思想可用下圖說明,圖中描述的是兩類樣本線性可分的情形,圖中“圓”和“星”分別代表兩類樣本。

Part

55.6.1支持向量機原理

Part

55.6.1支持向量機原理

Part

55.6.1支持向量機原理

Part

55.6.1支持向量機原理5.6.2支持向量機應(yīng)用舉例Part

5取自UCI公共測試數(shù)據(jù)庫中的汽車評價數(shù)據(jù)集作為本例的數(shù)據(jù)集,該數(shù)據(jù)集共有6個特征數(shù)據(jù),1個分類標簽,共1728條記錄,部分數(shù)據(jù)如表5-4所示。

表5-4汽車評價數(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分類標簽d的取值情況為:unacc1acc2good3v-good4Part

55.6.2支持向量機應(yīng)用舉例取數(shù)據(jù)集的前1690條記錄作為訓(xùn)練集,余下的作為測試集,計算其預(yù)測準確率。其計算流程及思路如下:1.?dāng)?shù)據(jù)獲取importpandasaspddata=pd.read_excel('car.xlsx')2.訓(xùn)練樣本與測試樣本劃分。其中訓(xùn)練用的特征數(shù)據(jù)用x表示,預(yù)測變量用y表示;測試樣本則分別記為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支持向量機應(yīng)用舉例3.支持向量機分類模型構(gòu)建

(1)導(dǎo)入支持向量機模塊svm。fromsklearnimportsvm(2)利用svm創(chuàng)建支持向量機類svm。clf=svm.SVC(kernel='rbf')其中核函數(shù)可以選擇線性核、多項式核、高斯核、sig核,分別用linear,poly,rbf,sigmoid表示,默認情況下選擇高斯核。(3)調(diào)用svm中的fit()方法進行訓(xùn)練。clf.fit(x,y)(4)調(diào)用svm中的score()方法,考查其訓(xùn)練效果。rv=clf.score(x,y);#模型準確率(針對訓(xùn)練數(shù)據(jù))(5)調(diào)用svm中的predict()方法,對測試樣本進行預(yù)測,獲得其預(yù)測結(jié)果。R=clf.predict(x1)Part

55.6.2支持向量機應(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支持向量機應(yīng)用舉例Z=R-y1Rs=len(Z[Z==0])/len(Z)print('預(yù)測結(jié)果為:',R)print('預(yù)測準確率為:',Rs)輸出結(jié)果如下:預(yù)測結(jié)果為:[4312324324333333333312324324312324324]預(yù)測準確率為:1.0Part

55.6.2支持向量機應(yīng)用舉例5.7K-均值聚類Part5

物以類聚,人以群分,這是聚類分析的基本常識。聚類分析主要使得類內(nèi)的樣本盡可能相似,而類之間的樣本盡可能相異。聚類問題的一般提法是:設(shè)有n個樣本的p元觀測數(shù)據(jù)組成一個數(shù)據(jù)矩陣

其中每一行表示一個樣本,每一列表示一個指標,表示第i個樣本關(guān)于第j項指標的觀測值,要根據(jù)觀測值矩陣X對樣本進行聚類。一種聚類的思想是:在樣本之間定義距離,樣本距離表明樣品之間的相似度,將樣本按相似度的大小逐一歸類,關(guān)系密切的聚集到較小的一類,關(guān)系疏遠的聚集到較大的一類,直到所有樣本都聚集完畢。上述思想正是聚類分析的基本思想。聚類分析旨在找出數(shù)據(jù)對象之間的關(guān)系,對原數(shù)據(jù)進行分組打標簽,標準是每個大組之間存在一定的差異性,而組內(nèi)的對象存在一定的相似性,因此大組之間差異越大,組內(nèi)的對象相似度越高,最終的聚類效果就越顯著。K-均值聚類算法是數(shù)據(jù)挖掘中的經(jīng)典聚類算法,它是一種劃分聚類算法,由于簡潔和高效使得它已成為所有聚類算法中最廣泛使用的算法。5.7.1K-均值聚類的基本原理Part5

k-均值聚類算法是一種基于原型的、根據(jù)距離劃分組的算法,其時間復(fù)雜度比其他聚類算法低,用戶需指定劃分組的個數(shù)k。其中,k-均值聚類常見距離測度包括歐幾里得距離、曼哈頓距離、切比雪夫距離等。通常情況下k-均值聚類分析默認采用歐幾里得距離進行計算,不僅是歐幾里得距離計算方便,且很容易解釋對象之間的關(guān)系。表示第個樣本與第個樣本之間的歐式距離。5.7.1K-均值聚類的基本原理Part5

K-均值聚類算法的直觀理解如下:Step1:隨機初始化K個聚類中心,即K個類中心向量Step2:對每個樣本,計算其與各個類中心向量的距離,并將該樣本指派給距離最小的類Step3:更新每個類的中心向量,更新的方法為取該類所有樣本的特征向量均值。Step4:直到各個類的中心向量不再發(fā)生變化為止,作為退出條件。比如有以下8個數(shù)據(jù)樣本,對這8個數(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:初始化兩個類的聚類中心,這里取第1、2個樣本分別為兩個類的聚類中心。即C1=(1.5,2.5)C2=(1.7,1.3)Step2:分別計算每個樣本到達各個聚類中心的距離如下:到達C1的距離:0 1.220.323.75 2.79 4.69 4.41 0.67到達C2的距離:1.220 0.914.923.93 5.845.56 0.61各樣本所屬類:121111125.7.1K-均值聚類的基本原理Part

5Step3:更新聚類中心,更新方法為計算所屬類的特征向量的均值。比如C1聚類中心向量的x分量為樣本1、3、4、5、6、7的特征x分量的均值,y分量為樣本1、3、4、5、6、7的特征y分量的均值。C2聚類中心向量則分別為樣本2、8個特征向量的均值。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,重新計算各樣本到達各聚類中心的距離:到達C1的距離:2.563.722.841.2 0.25 2.13 1.86 3.11到達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,重新計算各樣本到達各聚類中心的距離:到達C1的距離:3.91 5.06 4.18 0.24 1.13 0.78 0.52 4.45到達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ā)生變化,其實正是因為類歸屬沒有發(fā)生變化,才導(dǎo)致了聚類中心不在發(fā)生變化,達到算法終止條件。故樣本1、2、3、8歸為一類,樣本4、5、6、7歸為另一類。5.7.1K-均值聚類的基本原理Part

5利用Python,可以自己編寫K-均值聚類算法程序,這樣能更好地對K-均值聚類算法進行理解,參考程序如下:defK_mean(data,knum):#輸入:data--聚類特征數(shù)據(jù)集,要求為數(shù)據(jù)結(jié)構(gòu)要求為numpy數(shù)值數(shù)組#輸入:knum--聚類個數(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ù)組,用于存放每次計算樣本的所屬類別clusindex=np.zeros((len(data)))while1:foriinrange(len(data)):#計算第i個樣本到各個聚類中心的歐式距離#預(yù)定義sumsquare,用于存放第i個樣本到各個聚類中心的歐式距離sumsquare=np.zeros((knum))forkinrange(knum):sumsquare[k]=sum((data[i,:]-cluscenter[k,:])**2)sumsquare=np.sqrt(sumsquare)#第i個樣本到各個聚類中心的歐式距離進行升序排序s=pd.Series(sumsquare).sort_values()#判斷第i個樣本的類歸屬(距離最小,即s序列中第0個位置的index)clusindex[i]=s.index[0]5.7.1K-均值聚類的基本原理Part

5#將聚類結(jié)果添加到聚類數(shù)據(jù)最后一列clusdata=np.hstack((data,clusindex.reshape((len(data),1))))#更新聚類中心,新的聚類中心為對應(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#如果更新的聚類中心與舊的聚類中心不一致,#將更新的聚類中心賦給舊的聚類中心,進入下一次循環(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é)為兩類:其中紅色星號為1類,藍色圓圈為2類。5.7.2PythonK-均值聚類算法應(yīng)用舉例Part

5地區(qū)工資性收入經(jīng)營凈收入財產(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ù)獲取及標準化處理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-均值聚類對象model。model=KMeans(n_clusters=K,random_state=0,max_iter=500)參數(shù)說明如下:n_clusters:設(shè)置的聚類個數(shù)Krandom_state:隨機初始狀態(tài),設(shè)置為0即可max_iter:最大跌代次數(shù)(3)調(diào)用model對象中的fit()方法進行擬合訓(xùn)練。model.fit(X)(4)獲取model對象中的labels_屬性,可以返回其聚類的標簽。c=model.labels_以表5-1為例,對表中給出的31個地區(qū)農(nóng)村居民人均可支配收入情況作聚類分析,其計算思路及流程如下: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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論