




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第5章
數(shù)據(jù)采集和預(yù)處理學(xué)習(xí)目標(biāo)概述5.25.15.35.45.55.6數(shù)據(jù)清洗數(shù)據(jù)集成數(shù)據(jù)標(biāo)準(zhǔn)化數(shù)據(jù)歸約數(shù)據(jù)變換與數(shù)據(jù)離散化1概述SummarizeChapter0101大數(shù)據(jù)采集概述大數(shù)據(jù)的來源非常廣泛,如信息管理系統(tǒng)、網(wǎng)絡(luò)信息系統(tǒng)、物聯(lián)網(wǎng)系統(tǒng)、科學(xué)實驗系統(tǒng)等,其數(shù)據(jù)類型包括結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)。。02大數(shù)據(jù)采集方法傳統(tǒng)的數(shù)據(jù)采集來源單一,且存儲、管理和分析數(shù)據(jù)量也相對較小,大多采用關(guān)系型數(shù)據(jù)庫和并行數(shù)據(jù)倉庫即可處理。03數(shù)據(jù)預(yù)處理數(shù)據(jù)預(yù)處理(DataPreprocessing)是指在數(shù)據(jù)挖掘之前對原始數(shù)據(jù)進(jìn)行的一些處理。概述大數(shù)據(jù)采集概述在大數(shù)據(jù)平臺下,由于數(shù)據(jù)源具有更復(fù)雜的多樣性,數(shù)據(jù)采集的形式也變得更加復(fù)雜多樣,當(dāng)然,業(yè)務(wù)處理也可能變得迥然不同。為了提升業(yè)務(wù)處理的性能,同時又希望保留歷史數(shù)據(jù)以備數(shù)據(jù)挖掘與分析,對數(shù)據(jù)的采集要著重考慮如下幾個方面:(1)關(guān)系型數(shù)據(jù)庫數(shù)據(jù)采集:從關(guān)系型數(shù)據(jù)庫中采集數(shù)據(jù)時,為滿足查詢和其他操作的實時性,需要定期清除超過時間期限的歷史數(shù)據(jù)以確保數(shù)據(jù)處理的效率。(2)數(shù)據(jù)流處理平臺:將實時采集的源數(shù)據(jù)寫入數(shù)據(jù)流存儲平臺,如Kafka,通過數(shù)據(jù)采集作為消費者來進(jìn)行處理,包括去重、去噪、中間計算等操作,最終寫入目標(biāo)數(shù)據(jù)存儲中。(3)視頻文件的特征數(shù)據(jù)提取:對于視頻文件的大數(shù)據(jù)處理,加載圖片后利用識別算法提取圖片的特征信息,并轉(zhuǎn)換為符合業(yè)務(wù)需求的數(shù)據(jù)模型。由于數(shù)據(jù)提取過程耗時長且需要較多內(nèi)存資源,需要注意避免成為整個數(shù)據(jù)階段的瓶頸。大數(shù)據(jù)采集方法傳統(tǒng)的數(shù)據(jù)采集來源單一,且存儲、管理和分析數(shù)據(jù)量也相對較小,大多采用關(guān)系型數(shù)據(jù)庫和并行數(shù)據(jù)倉庫即可處理。目前,大數(shù)據(jù)采集方面增加了如下幾種新的方法。網(wǎng)絡(luò)數(shù)據(jù)采集方法通過網(wǎng)絡(luò)爬蟲或網(wǎng)站公開API等方式從網(wǎng)站上獲取數(shù)據(jù)信息。該方法可以將非結(jié)構(gòu)化數(shù)據(jù)從網(wǎng)頁中抽取出來,將其存儲為統(tǒng)一的本地數(shù)據(jù)文件,并以結(jié)構(gòu)化的方式存儲。它支持圖片、音頻、視頻等文件或附件的采集,附件與正文可以自動關(guān)聯(lián)。系統(tǒng)日志采集方法很多互聯(lián)網(wǎng)企業(yè)都有自己的海量數(shù)據(jù)采集工具,多用于系統(tǒng)日志采集,如Hadoop的Chukwa,Cloudera的Flume,F(xiàn)acebook的Scribe等,這些工具均采用分布式架構(gòu),能滿足每秒數(shù)百MB的日志數(shù)據(jù)采集和傳輸需求。其他數(shù)據(jù)采集方法對于企業(yè)生產(chǎn)經(jīng)營數(shù)據(jù)或?qū)W科研究數(shù)據(jù)等保密性要求較高的數(shù)據(jù),可以通過與企業(yè)或研究機構(gòu)合作,使用特定系統(tǒng)接口等相關(guān)方式采集數(shù)據(jù)。數(shù)據(jù)預(yù)處理概述
數(shù)據(jù)預(yù)處理(DataPreprocessing)是指在數(shù)據(jù)挖掘之前對原始數(shù)據(jù)進(jìn)行的一些處理。現(xiàn)實世界中的數(shù)據(jù)幾乎都是“臟”數(shù)據(jù),所采集的數(shù)據(jù)極易受到不一致數(shù)據(jù)、噪聲、缺失值的侵?jǐn)_。(1)數(shù)據(jù)的不一致性:原始數(shù)據(jù)是從各種實際應(yīng)用系統(tǒng)中采集的,而各應(yīng)用系統(tǒng)的數(shù)據(jù)缺乏統(tǒng)一的標(biāo)準(zhǔn)和定義,數(shù)據(jù)結(jié)構(gòu)具有較大的差異。(2)噪聲數(shù)據(jù):數(shù)據(jù)采集過程中會受到采集設(shè)備故障、數(shù)據(jù)傳輸錯誤或存儲介質(zhì)損壞等因素的干擾,導(dǎo)致采集到的數(shù)據(jù)可能含有噪聲,即不精確或不準(zhǔn)確的數(shù)據(jù)。(3)缺失值:系統(tǒng)設(shè)計缺陷或使用過程中的人為因素可能導(dǎo)致數(shù)據(jù)記錄中某些屬性值丟失或不確定,從而造成數(shù)據(jù)不完整,例如數(shù)據(jù)采集傳感器故障導(dǎo)致某些數(shù)據(jù)無法采集等。2數(shù)據(jù)清洗DatacleaningTChapter021.缺失值清洗pandas處理缺失值Pandas使用浮點值NaN表示缺失數(shù)據(jù)(1)缺失值的檢測與統(tǒng)計(2)刪除缺失值(3)填充缺失值缺失值處理方法(1)刪除法(2)替換法(3)插補法(1)缺失值的檢測與統(tǒng)計pandas處理缺失值函數(shù)isnull()(或notnull())可以直接判斷該列中的哪個數(shù)據(jù)為NaN,缺失值時為True(或False),非缺失值時為False(或True)。方法info()和sum()分別查看非缺失值的信息和統(tǒng)計出各列缺失值的數(shù)量。例5.1缺失值檢測和統(tǒng)計示例。importnumpyasnpimportpandasaspddf=pd.DataFrame([['S1','許文秀','女',21,'團員','計算機系','湖北'],['S2','劉德峰','男',20,np.NaN,'信息系','貴州'],['S3','劉世元','男',22,np.NaN,'計算機系',np.NaN],['S4','于金鳳','女',np.NaN,np.NaN,'電信系',np.NaN],['S5','周新娥','女',23,'團員','電信系',np.NaN],['S6','王曉晴','女',22,np.NaN,np.NaN,np.NaN]],columns=['學(xué)號','姓名','性別','年齡','政治面貌','系部','籍貫'])print(df)print(())#打印出各列數(shù)據(jù)的非缺失值信息print(df.isnull())#打印出缺失值信息,缺失值時為True,非缺失值時為Falseprint(df.isnull().sum())#打印出各列中缺失值的數(shù)量(2)刪除缺失值pandas處理缺失值根據(jù)一定的規(guī)則將含有缺失值的行或列直接進(jìn)行刪除。dropna()為Pandas庫中DataFrame的一個方法,用于刪除缺失值。常用形式如下:dropna(axis=0,how='any',thresh=None,subset=None,,inplace=False)例5.1缺失值檢測和統(tǒng)計示例。importnumpyasnpimportpandasaspddf=pd.DataFrame([['S1','許文秀','女',21,'團員','計算機系','湖北'],['S2','劉德峰','男',20,np.NaN,'信息系','貴州'],['S3','劉世元','男',22,np.NaN,'計算機系',np.NaN],['S4','于金鳳','女',np.NaN,np.NaN,'電信系',np.NaN],['S5','周新娥','女',23,'團員','電信系',np.NaN],['S6','王曉晴','女',22,np.NaN,np.NaN,np.NaN]],columns=['學(xué)號','姓名','性別','年齡','政治面貌','系部','籍貫'])print(df)print(())#打印出各列數(shù)據(jù)的非缺失值信息print(df.isnull())#打印出缺失值信息,缺失值時為True,非缺失值時為Falseprint(df.isnull().sum())#打印出各列中缺失值的數(shù)量(3)填充缺失值pandas處理缺失值直接刪除缺失值的樣本并不是一個很好的方法,因此可以用一個特定的值替換缺失值。缺失值所在的屬性為數(shù)值型時,通常利用其均值、中位數(shù)和眾數(shù)等描述其集中趨勢的統(tǒng)計量來填充;缺失值所在屬性為類別型數(shù)據(jù)時,則可以選擇眾數(shù)來填充。Pandas庫中提供了缺失值替換的方法fillna(),常用形式如下:fillna(value=None,method=None,asxi=None,inplace=False,limit=None)(3)填充缺失值pandas處理缺失值常見的填充方法有:①填充固定值:選取某個固定值/默認(rèn)值填充缺失值。②填充均值:對每一列的缺失值,填充當(dāng)前列的均值。③填充中位數(shù):對每一列的缺失值,填充當(dāng)前列的中位數(shù)。④填充眾數(shù):對每一列的缺失值,填充當(dāng)前列的眾數(shù)。如果存在某列缺失值過多,眾數(shù)為NaN的情況,這時就取每列刪除掉NaN值后的眾數(shù)。⑤填充上下樣本的數(shù)據(jù):對每一數(shù)據(jù)樣本的缺失值,填充其上面一個或下面一個樣本的數(shù)據(jù)值。⑥填充插值得到的數(shù)據(jù):用插值法擬合出缺失的數(shù)據(jù),然后進(jìn)行填充。常用interpolate()函數(shù)默認(rèn)采用線性插值,即假設(shè)函數(shù)是直線形式,缺失值用前一個值和后一個值的平均數(shù)填充。⑦填充KNN數(shù)據(jù):填充近鄰的數(shù)據(jù),先利用KNN計算臨近的k個數(shù)據(jù),然后填充它們的均值。⑧填充模型預(yù)測的值:把缺失值作為新的Label,建立模型得到預(yù)測值,然后進(jìn)行填充。pandas處理缺失值例5.3填充缺失值示例。importnumpyasnpimportpandasaspddf=pd.DataFrame([['S1','許文秀','女',21,'團員','計算機系','湖北',387],['S2','劉德峰','男',20,np.NaN,'信息系','貴州',376],['S3','劉世元','男',22,np.NaN,'計算機系',np.NaN,380],['S4','于金鳳','女',np.NaN,np.NaN,'電信系',np.NaN,np.NaN],['S5','周新娥','女',23,'團員','電信系',np.NaN,367],['S6','王曉晴','女',22,np.NaN,np.NaN,np.NaN,np.NaN]],columns=['學(xué)號','姓名','性別','年齡','政治面貌','系部','籍貫','總分'])print(df.fillna(-1))#填充缺失值為'-1'print(df.fillna(method='ffill'))#向下填充缺失值print(df['年齡'].fillna(df['年齡'].mean()))#年齡列的缺失值用其均值填充print(df.fillna(df.mode()))#利用眾數(shù)填充缺失值fornindf:df[n]=df[n].interpolate()#數(shù)值型屬性用線性插值df[n].dropna(inplace=True)print(df)2.異常值清洗
異常值是指那些在數(shù)據(jù)集中存在的不合理的值,這里所說不合理的值是偏離正常范圍的值,不是錯誤值。異常值的存在會嚴(yán)重干擾數(shù)據(jù)分析的結(jié)果。1.異常值檢測(1)簡單統(tǒng)計分析(2)散點圖方法(3)3σ原則(4)箱線圖2.異常值處理(1)直接刪除(2)視為缺失值(3)平均值修正(4)蓋帽法(5)分箱平滑法①分箱②數(shù)據(jù)平滑(6)回歸插補(7)多重插補(8)不處理pandas處理缺失值(1)簡單統(tǒng)計分析例5.4計算成年人的身高、體重公式為:Y=(X-100)×0.9,其中X為身高(cm),Y為標(biāo)準(zhǔn)體重(kg)。importmatplotlib.pyplotaspltimportnumpyasnpx=np.arange(100,230,5)#假設(shè)成年人(18歲以上)正常高度在1米至2.3米y=(x-100)*0.9plt.rcParams['font.family']='STSong'#圖形中顯示漢字plt.rcParams['font.size']=12plt.title('身高和體重')plt.plot(x,y,'.')plt.plot(140,187,'r.')#異常值plt.plot(156,212,'r.')#異常值plt.plot(187,208,'r.')plt.show()程序運行結(jié)果如圖5.1所示。圖5.1例5.4程序運行結(jié)果最常用的統(tǒng)計量是最大值和最小值,用來判斷這個變量的取值是否超出合理的范圍。如電商信息表中客戶年齡age=199,則該變量的取值存在異常。pandas處理缺失值(2)散點圖方法通過數(shù)據(jù)分布的散點圖可以檢測異常數(shù)據(jù)。例5.5探究房屋面積和房屋價格的關(guān)系示例。importmatplotlib.pyplotaspltimportnumpyasnpx=[225.98,247.07,253.14,254.85,241.58,301.01,20.67,288.64,163.56,120.06,207.83,342.75,147.9,53.06,224.72,29.51,21.61,483.21,245.25,299.25,343.35]#房屋面積數(shù)據(jù)y=[196.63,203.88,210.75,372.74,202.41,347.61,24.9,239.34,140.32,304.15,176.84,488.23,128.79,49.64,191.74,33.1,30.74,400.02,205.35,330.64,283.45]#房屋價格數(shù)據(jù)plt.figure(figsize=(20,8),dpi=100)#創(chuàng)建畫布plt.scatter(x,y)#繪制散點圖plt.show()#顯示圖像程序運行結(jié)果如圖5.2所示。圖5.2例5.5程序運行結(jié)果pandas處理缺失值(3)3σ原則在正態(tài)分布中,σ代表標(biāo)準(zhǔn)差,μ代表均值,x=μ即為圖像的對稱軸。3σ原則認(rèn)為:數(shù)值分布在(μ-σ,μ+σ)中的概率為0.6827;數(shù)值分布在(μ-2σ,μ+2σ)中的概率為0.9544;數(shù)值分布在(μ-3σ,μ+3σ)中的概率為0.9974。也就是說,Y的取值幾乎全部集中在(μ-3σ,μ+3σ)區(qū)間內(nèi),超出這個范圍的可能性僅占不到0.3%,屬于極個別的小概率事件,因此將超出(μ-3σ,μ+3σ)范圍的值都可以認(rèn)為是異常值,如圖5.3所示。3σ原則要求數(shù)據(jù)服從正態(tài)或近似正態(tài)分布,且樣本數(shù)量大于10。圖5.3正太分布3σ示意圖pandas處理缺失值例5.6
3σ原則檢測異常值示例。importpandasaspddata=[78,72,-14,70,68,72,77,78,42,78,74,54,80,82,65,62]#學(xué)生某門課程成績s=pd.Series(data)dmean=s.mean()dstd=s.std()print('檢測出異常值:')yz1=dmean-3*dstdyz2=dmean+3*dstdforiinrange(0,len(data)):if(data[i]<yz1)or(data[i]>yz2):print(data[i],end=',')結(jié)果檢測出異常值-14pandas處理缺失值(4)箱線圖箱線圖是通過數(shù)據(jù)集的四分位數(shù)形成的圖形化描述,是非常簡單而且有效的可視化異常值的一種檢測方法。例5.7箱線圖檢測異常值示例。importpandasaspdimportmatplotlib.pyplotaspltdata=[78,72,34,70,68,72,77,78,56,78,74,54,80,82,65,62]s=pd.Series(data)plt.boxplot(x=s.values,whis=1.5)plt.show()程序運行結(jié)果如圖5.4所示。圖5.4例5.7程序運行的結(jié)果從圖5.4可以看出,檢測出的異常值為34。異常值處理pandas處理缺失值異常值處理是數(shù)據(jù)預(yù)處理中的一個重要步驟,它是保證原始數(shù)據(jù)可靠性,平均值與標(biāo)準(zhǔn)差計算準(zhǔn)確性的前提。(1)直接刪除直接將含有異常值的記錄刪除。這種方法簡單易行,但缺點也不容忽視,一是在觀測值很少的情況下,這種刪除操作會造成樣本量不足;二是直接刪除、可能會對變量的原有分布造成影響,從而導(dǎo)致統(tǒng)計模型的不穩(wěn)定。(2)視為缺失值利用處理缺失值的方法來處理。這一方法的好處是能夠利用現(xiàn)有變量的信息,來填補異常值。需要注意的是,將該異常值作為缺失值處理,需要根據(jù)該異常值的特點來進(jìn)行,此時需要考慮該異常值(缺失值)是完全隨機缺失、隨機缺失還是非隨機缺失的不同情況進(jìn)行不同處理。(3)平均值修正如果數(shù)據(jù)的樣本量很小的話,也可用前后兩個觀測值的平均值來修正該異常值。這其實是一種比較折中的方法,大部分的參數(shù)方法是針對均值來建模的,用平均值來修正,優(yōu)點是能克服丟失樣本的缺陷,缺點是丟失了樣本“特色”。異常值處理pandas處理缺失值(4)蓋帽法將某連續(xù)變量均值上下三倍標(biāo)準(zhǔn)差范圍外的記錄替換為均值上下三倍標(biāo)準(zhǔn)差值,即蓋帽處理。如圖5.5所示。圖5.5蓋帽法示意圖異常值處理pandas處理缺失值(5)分箱平滑法分箱平滑法是指通過考察“鄰居”(周圍的值)來平滑存儲數(shù)據(jù)的值。分箱的主要目的是消除異常值,將連續(xù)數(shù)據(jù)離散化,增加粒度。①分箱在分箱前,一定要先排序數(shù)據(jù),再將它們分配到等深(等寬)的箱子中。等深分箱:按記錄數(shù)進(jìn)行分箱,每箱具有相同的記錄數(shù),每箱的記錄數(shù)稱為箱子的權(quán)重,也稱箱子的深度。等寬分箱:在整個屬性值的區(qū)間上平均分布,即每個箱的區(qū)間范圍設(shè)定為一個常量,稱為箱子的寬度。例如客戶收入屬性income排序后的值(人民幣:元):2300,2500,2800,3000,3500,4000,4500,4800,5000,5300,5500,6000,6200,6700,7000,7200分箱的結(jié)果如下:等深分箱。如深度為4,分箱結(jié)果為:箱1:2300,2500,2800,3000;箱2:3500,4000,4500,4800;箱3:5000,5300,5500,6000;箱4:6200,6700,7000,7200。等寬分箱。如寬度為1200元人民幣,分箱結(jié)果為:箱1:2300,2500,2800,3000,3500;箱2:4000,4500,4800,5000;箱3:5300,5500,6000,6200;箱4:6700,7000,7800。②數(shù)據(jù)平滑將數(shù)據(jù)劃分到不同的箱子之后,可以運用如下三種策略對每個箱子中的數(shù)據(jù)進(jìn)行平滑處理。平均值平滑:箱中的每一個值被箱中數(shù)值的平均值替換。中值平滑:箱中的每一個值被箱中數(shù)值的中值替換。邊界平滑:箱中的最大值和最小值稱為箱子的邊界,箱中的每一個值被最近的邊界值替換。異常值處理pandas處理缺失值(6)回歸插補對于兩個相關(guān)變量之間的變化模式,通過回歸插補適合一個函數(shù)來平滑數(shù)據(jù)。若是變量之間存在依賴關(guān)系,也就是y=f(x),那么就可以設(shè)法求出依賴關(guān)系f,再根據(jù)x來預(yù)測y,這也是回歸問題的實質(zhì)。實際問題中更為常見的假設(shè)是p(y)=N(f(x)),N為正態(tài)分布。假設(shè)y是觀測值并且存在異常值,求出的x和y之間的依賴關(guān)系,再根據(jù)x來更新y的值,這樣就能去除其中的異常值,這也是回歸消除異常值的原理。(7)多重插補多重插補的處理有兩個要點:先刪除y變量的缺失值然后插補。需要注意以下兩個方面,一是被解釋變量有缺失值時不能填補,只能刪除;二是只對放入模型的解釋變量進(jìn)行插補。(8)不處理根據(jù)該異常值的性質(zhì)特點,使用更加穩(wěn)健模型來修飾,然后直接在該數(shù)據(jù)集上進(jìn)行數(shù)據(jù)挖掘。3.格式內(nèi)容清洗
一般情況下,數(shù)據(jù)是由用戶/訪客產(chǎn)生的,也就有很大的可能性存在格式和內(nèi)容上不一致的情況,所以在進(jìn)行模型構(gòu)建之前需要先進(jìn)行數(shù)據(jù)的格式內(nèi)容清洗操作。
(1)時間、日期、數(shù)值、半角/全角字符等顯示格式不一致:直接將數(shù)據(jù)轉(zhuǎn)換為一類格式即可,該問題一般出現(xiàn)在多個數(shù)據(jù)源整合的情況下。
(2)內(nèi)容中有不該存在的字符:最典型的就是在頭部、中間、尾部的空格等問題,這種情況下,需要以半自動校驗加半人工方式來尋找問題,并去除不需要的字符。
(3)內(nèi)容與該屬性應(yīng)有的內(nèi)容不符:比如姓名寫成了性名、身份證號寫成手機號等問題。4.邏輯錯誤清洗(1)數(shù)據(jù)去重這里的去重不是簡單的去除完全相同的數(shù)據(jù),如某系統(tǒng)中“許文秀”和“許文秀”等,系統(tǒng)認(rèn)為是不同的兩個字符串。(3)刪除/重構(gòu)不可靠的屬性值如某人填表時,身份證1101031980XXXXXXXX,然后年齡填了23歲。這種時候,需要根據(jù)字段的數(shù)據(jù)來源,判定哪個字段提供的信息更為可靠,刪除或重構(gòu)不可靠的字段。(2)去除/替換不合理的數(shù)據(jù)如某人填表時,將年齡誤填了200歲,年收入誤填了100000萬等。5.非需求數(shù)據(jù)清洗這一步就是刪除非需求的字段。但實際操作起來,有很多問題。例如:(1)把看上去不需要但實際上對業(yè)務(wù)很重要的字段刪了。(2)某個字段覺得有用,但又沒想好怎么用,不知道是否該刪除。(3)一時看走眼了,刪錯了字段。前兩種情況的建議是:如果數(shù)據(jù)量沒有大到不刪除字段就沒辦法處理的程度,那么能不刪除的字段盡量不刪除,第三種情況需要勤備份原始數(shù)據(jù)。6.關(guān)聯(lián)性驗證如果數(shù)據(jù)有多個來源,那么有必要進(jìn)行關(guān)聯(lián)性驗證,該過程常應(yīng)用到多數(shù)據(jù)源合并的過程中。通過驗證數(shù)據(jù)之間的關(guān)聯(lián)性來選擇比較正確的特征屬性,比如:汽車的線下購買信息和電話客服問卷信息,兩者之
間可以通過姓名和手機號進(jìn)行關(guān)聯(lián)操作,匹配兩者之間的車輛信息是否是同一輛,如果不是,那么就需要進(jìn)行數(shù)據(jù)調(diào)整。3數(shù)據(jù)集成DataintegrationChapter03數(shù)據(jù)集成過程中的關(guān)鍵問題
1、實體識別例如“蘋果”既可以指蘋果手機也可以指蘋果水果,又如“病毒”既可以指生物病毒又可以指計算機病毒。因此,需要指明數(shù)據(jù)集成中涉及到的到底是哪種實體。同名異義例如“電腦”和“計算機”指的是同一實體,又如詩人“李白”和“李太白”指的是同一個人,這就需要將這些稱謂統(tǒng)一起來。異名同義用于描述同一個實體的屬性有的時候可能會出現(xiàn)單位不統(tǒng)一的情況,例如140cm與1.2m。計算機在進(jìn)行事務(wù)處理的時候沒有量綱,要么統(tǒng)一量綱,要么量綱標(biāo)準(zhǔn)化。單位統(tǒng)一對每一條行為日志數(shù)據(jù)的唯一標(biāo)識,目的是將不同數(shù)據(jù)庫或者帳號系統(tǒng)中的實體對應(yīng)起來。ID-Mapping
實體識別2、數(shù)據(jù)冗余與相關(guān)性分析對于數(shù)值屬性,可以使用協(xié)方差來評估一個屬性值如何隨另一個屬性值變化。
(1)標(biāo)稱數(shù)據(jù)的χ2相關(guān)檢驗假設(shè)A有c個不同值a1,a2,…,ac,B有r個不同值b1,b2,…,br。用A和B描述的數(shù)據(jù)記錄可以用一個相依表顯示,其中A的c個值構(gòu)成列,B的r個值構(gòu)成行。假設(shè)(Ai,Bj)表示屬性A取值ai,屬性B取值bj的聯(lián)合事件,即(A=ai,B=bj)。每個可能的(Ai,Bj)聯(lián)合事件都在表中有自己的單元。χ2值(又稱Pearsonχ2統(tǒng)計量)可以用下式計算:其中oij是聯(lián)合事件(Ai,Bj)的觀測頻度(即實際計數(shù)),而eij是(Ai,Bj)的期望頻度,可以用下式計算:
其中n是數(shù)據(jù)記錄的個數(shù),count(A=ai)是A上具有ai的記錄個數(shù),而count(B=bj)是B上具有值bj的記錄個數(shù)。(5-1)式中的和在所有r×c個單元上計算。這里應(yīng)注意,對χ2值貢獻(xiàn)最大的單元是其實際計數(shù)與期望計數(shù)很不相同的單元。χ2統(tǒng)計檢驗假設(shè)A和B是獨立的,檢驗基于顯著水平,具有自由度(r-1)×(c-1)。(5-2)(5-1)例題:使用χ2的標(biāo)稱屬性的相關(guān)分析。假設(shè)調(diào)查了1500個人,每個人對他們喜愛閱讀的材料類型是否是小說進(jìn)行投票,有兩個屬性“性別”和“喜愛閱讀”。每種可能的聯(lián)合事件觀測值(獲計數(shù))匯總成如表所示。屬性“性別”和“喜愛閱讀”相依表閱讀材料男女合計小說250200450非小說5010001050合計30012001500先計算(Ai,Bj)的期望頻度eij:
帶入
(5-1)式有:=284.44+71.11+121.90+30.48=507.93對于上表,自由度為(2-1)(2-1)=1。對于自由度1,在0.001的置信水平下,拒絕假設(shè)的值是10.828(取自χ2分布上百分點表,通??梢栽谌我饨y(tǒng)計學(xué)教科書中找到)。由于我們計算的值大于該值,因此我們可以拒絕“性別”和“喜愛閱讀”獨立的假設(shè),并斷言對于給定的人群,這兩個屬性是(強)相關(guān)的。(2)相關(guān)系數(shù)對于數(shù)值數(shù)據(jù),可以通過計算屬性A和B的相關(guān)系數(shù)(又稱Pearson積矩系數(shù))來分析其相關(guān)性。相關(guān)系數(shù)rA,B定義為:
(5-3)
(a)正相關(guān)
(b)負(fù)相關(guān)
(a)正相關(guān)
(b)負(fù)相關(guān)相關(guān)性并不蘊涵著因果關(guān)系,也就是說如果A和B是相關(guān)的,這并不意味著A導(dǎo)致B或B導(dǎo)致A。例如,在分析人口統(tǒng)計數(shù)據(jù)庫時,我們發(fā)現(xiàn)一個地區(qū)學(xué)校的數(shù)量與該地區(qū)所擁有的汽車數(shù)量是正相關(guān)的,但這并不意味著“學(xué)校數(shù)量的多少”會導(dǎo)致“汽車數(shù)量的多少”。實際上,二者必然地會關(guān)聯(lián)到第三個屬性——人口。用Python求相關(guān)系數(shù)的方法有三種:①用numpy模塊中的corrcoef()函數(shù)計算相關(guān)系數(shù)矩陣。②用pandas模塊中DataFrame對象自帶相關(guān)性計算方法corr(),可以求出所有列之間的相關(guān)系數(shù)。③自己編寫Python程序計算相關(guān)系數(shù)。(2)相關(guān)系數(shù)(3)協(xié)方差在概率論和統(tǒng)計學(xué)中,協(xié)方差(Covariance)是用于衡量兩個變量的總體誤差。而方差是協(xié)方差的一種特殊情況,即為兩個變量相同時的協(xié)方差。它們都是評估兩個屬性如何一起變化??紤]兩個數(shù)值屬性A、B和n次觀測值集合{(a1,b1),(a2,b2),…,(an,bn)}。A和B的均值又分別稱為A和B的期望值,即
(5-3)(5-5)
例5.10:下表給出了某電商和某高科技公司在5個時間點觀測到的股票價格簡表。某電商和某高科技公司股票價格簡表時間點某電商(元)某高科技公司(元)t1620t2510t3414t435t525根據(jù)(5-4)式:=50.2-43.2=7由于協(xié)方差為正,因此我們可以說兩個公司的股票同時上漲。例5.11Python求協(xié)方差示例。importnumpyasnpfromsklearnimportdatasetsiris=datasets.load_iris()#裝載鳶尾花數(shù)據(jù)A=iris.data[:,0]B=iris.data[:,1]result=np.cov(A,B)print(result)3、記錄重復(fù)除了檢查屬性的冗余之外,還要檢測重復(fù)的記錄,所謂重復(fù)記錄是指給定唯一的數(shù)據(jù)實體,存在兩個或多個相同的記錄。Python的模塊Numpy中unique()函數(shù)可以去除一維數(shù)組或者列表中的重復(fù)元素;對于多維數(shù)組,如果指定axis=0,可以把冗余的行去掉,若指定axis=1,可以把冗余的列去掉。例5.12去掉多維數(shù)組的重復(fù)行。
importnumpyasnp
A=[['S1','許文秀','女',21],['S4','于金鳳','女',22],['S1','許文秀','女',21],
['S5','劉德峰','男',20]]
result=np.unique(A,axis=0)
print(result)4、數(shù)據(jù)值沖突的檢測與處理數(shù)據(jù)集成還涉及數(shù)據(jù)值沖突的檢測與處理。舉以下三個例子說明:數(shù)據(jù)值沖突的處理方法是按照一定規(guī)則建立起底層關(guān)系數(shù)據(jù)庫模式的語義模型,然后利用建立好的語義沖突本體來擴展關(guān)系數(shù)據(jù)庫模式的語義,最后再給出基于本體和數(shù)據(jù)庫語義模型解決沖突的具體方法。3、某大學(xué)的學(xué)生成績數(shù)據(jù)庫表中的每一行是成績類型和相應(yīng)的成績,而另一所大學(xué)學(xué)生成績數(shù)據(jù)庫表中的每一行是基本課程成績和德育評估成績,第三所大學(xué)的學(xué)生成績數(shù)據(jù)庫用兩個表來存儲學(xué)生的成績,第一個表專門存儲學(xué)生的基本課程成績,第二個表專門存儲學(xué)生的德育評估成績。2、重量屬性可能在一個系統(tǒng)中使用公制單位,而另一個系統(tǒng)中使用英制單位。位居不同城市的連鎖酒店,標(biāo)間價格可能不同,服務(wù)也可能不同(如免費早餐等)。又如,要了解全國各個省份中每個高校學(xué)生的成績信息,需要同時訪問每個學(xué)校的數(shù)據(jù)庫,但是在數(shù)據(jù)庫當(dāng)中存儲學(xué)生成績的方式是不一樣的,而且成績一般有兩種類型,一種是基本課程成績,通常為百分制,另外一種是德育評估成績,通常為等級制(包括A、B、C、D四種,分別表示優(yōu)秀、良好、合格、不合格)。1、對于現(xiàn)實世界的同一實體,來自不同的數(shù)據(jù)源的屬性值可能不同。
很明顯,該問題是典型的模式層次上的數(shù)據(jù)沖突問題。再復(fù)雜一點,如果想全面的給學(xué)生一個綜合成績,那么需要在百分制成績和等級制成績之間進(jìn)行轉(zhuǎn)化,這里又涉及到了語義層次上的數(shù)據(jù)沖突問題。Python數(shù)據(jù)集成
1、merge()方法merge()方法主要是基于兩個DataFrame對象的共同列進(jìn)行連接。merge()函數(shù)常用形式為:
merge(left,right,how=’inner’,on=None,left_on=None,right_on=None,sort=True)在Python數(shù)據(jù)分析中,所用到的數(shù)據(jù)集有可能來自于不同的數(shù)據(jù)源,因此,常常需要對數(shù)據(jù)子集進(jìn)行集成處理。Pandas模塊中的merge()、concat()方法可以完成數(shù)據(jù)的集成。
例5.13
merge()函數(shù)數(shù)據(jù)集成示例。importpandasaspdS_info=pd.DataFrame({'學(xué)號':['S1','S2','S3','S4','S5'],'姓名':['許文秀','劉德峰','劉世元','于金鳳','周新娥']})course=pd.DataFrame({'學(xué)號':['S1','S2','S1','S4','S1'],'課程':['C2','C1','C3','C2','C4']})df=pd.merge(S_info,course)print(df)程序運行的結(jié)果如圖5.8所示。圖5.8例5.13程序運行的結(jié)果例5.14
左、右數(shù)據(jù)子集關(guān)鍵字不同的merge()函數(shù)數(shù)據(jù)集成示例。importpandasaspdS_info=pd.DataFrame({'學(xué)號':['S1','S2','S4','S5'],'姓名':['許文秀','劉德峰','劉世元','于金鳳']})course=pd.DataFrame({'編號':['S1','S2','S1','S4','S1'],'課程':['C2','C1','C3','C2','C4']})df=pd.merge(S_info,course,left_on='學(xué)號',right_on='編號')print(df)程序運行結(jié)果如圖5.9所示。圖5.9例5.14程序運行結(jié)果例5.15
當(dāng)how=’outer’時,函數(shù)merge()的數(shù)據(jù)集成示例。importpandasaspdgrade1=pd.DataFrame({'學(xué)號':['S1','S2','S3','S4','S5'],'姓名':['許文秀','劉德峰','劉世元','于金鳳','周新娥'],'高數(shù)':[67,92,67,58,78],'英語':[82,88,96,90,87]})grade2=pd.DataFrame({'學(xué)號':['S1','S2','S4','S5','S6'],'數(shù)據(jù)庫技術(shù)':[89,34,74,90,83]})df=pd.merge(grade1,grade2,how='outer')print(df)程序運行結(jié)果如圖5.10所示。圖5.10例5.15程序運行結(jié)果例5.16merge()函數(shù)通過多個鍵的數(shù)據(jù)集成示例。importpandasaspdinfo_s=pd.DataFrame({'學(xué)號':['S1','S2','S3','S4','S5'],'姓名':['許文秀','劉德峰','劉世元','于金鳳','周新娥'],'性別':['女','男','男','女','女']})course=pd.DataFrame({'學(xué)號':['S1','S2','S1','S3','S5','S2','S1'],'姓名':['許文秀','劉德峰','許文秀','劉世元','周新娥','劉德峰','許文秀'],'課程':['C1','C1','C3','C2','C2','C3','C4'],'成績':[78,82,67,92,89,77,68]})df=pd.merge(info_s,course,on=['學(xué)號','姓名'])print(df)程序運行結(jié)果如圖5.11所示。圖5.11例5.16程序運行結(jié)果2、concat()方法Concat()方法是對Series對象或DataFrame對象的數(shù)據(jù)集進(jìn)行連接,可以指定按某個軸進(jìn)行(行或列)連接,也可以指定連接方式:outer和inner。與SQL不同的是concat()不會去重,要達(dá)到去重的效果可以使用drop_duplicates()方法。常用形式為:concat(objs,axis=0,join=’outer’)參數(shù)說明:(1)objs:Series對象、DataFrame對象或list對象。(2)axis:需要連接的軸,axis=0是行連接,axis=1是列連接。(3)join:連接的方式,inner或outer。例5.17Concat()方法連接示例。importpandasaspddata1=[['S1','許文秀','女'],['S2','劉德峰','男'],['S3','劉世元','男'],['S4','于金鳳','女'],['S5','周新娥','女']]df1=pd.DataFrame(data1,columns=['學(xué)號','姓名','性別'])data2=[[78,89,80,61],[77,83,78,66],[90,54,68,78],[76,66,80,82]]df2=pd.DataFrame(data2,columns=['高數(shù)','英語','數(shù)據(jù)庫技術(shù)','數(shù)據(jù)挖掘'])df=pd.concat([df1,df2],axis=1,join='outer')print(df)程序運行結(jié)果如圖5.12所示。圖5.12例5.17程序運行的結(jié)果4數(shù)據(jù)標(biāo)準(zhǔn)化DatastandardizationChapter04在數(shù)據(jù)分析之前,我們通常需要先將數(shù)據(jù)標(biāo)準(zhǔn)化(Standardization),利用標(biāo)準(zhǔn)化后的數(shù)據(jù)進(jìn)行數(shù)據(jù)分析,以避免屬性之間不同度量和取值范圍差異造成數(shù)據(jù)對分析結(jié)果的影響。1、z-score方法
(5-7)①自定義方法用自定義方法進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化就是利用式(5-7)編程實現(xiàn)。例5.18自定義數(shù)據(jù)標(biāo)準(zhǔn)化示例。defmy_scale(data):mean=sum(data)/len(data)#求均值variance=(sum([(i-mean)**2foriindata]))/len(data)#求方差normal=[(i-mean)/(variance)**0.5foriindata]#按照公式標(biāo)準(zhǔn)化returnnormalimportnumpyasnpX=np.array([[1.,-1.,2.],[2.,0.,0.],[0.,1.,-1.]])scale=my_scale(X)print(scale)程序運行結(jié)果如圖5.13所示。圖5.13例5.18程序運行結(jié)果②StandardScaler()使用sklearn模塊中的方法StandardScaler()來實現(xiàn)數(shù)據(jù)標(biāo)準(zhǔn)化。每次使用時需要調(diào)用sklearn包。例5.19StandarScaler()方法數(shù)據(jù)標(biāo)準(zhǔn)化示例。importnumpyasnpfromsklearnimportpreprocessingX=np.array([[1.,-1.,2.],[2.,0.,0.],[0.,1.,-1.]])scaler=preprocessing.StandardScaler().fit(X)#求得訓(xùn)練集X的均值,方差,最大值,最小值等固有屬性print(scaler.transform(X))#在fit的基礎(chǔ)上,進(jìn)行標(biāo)準(zhǔn)化,降維,歸一化等操作2、極差標(biāo)準(zhǔn)化方法(5-8)極差標(biāo)準(zhǔn)化也稱為區(qū)間縮放法或稱0-1標(biāo)準(zhǔn)化,它是對原始數(shù)據(jù)所做的一種線性變換,將原始數(shù)據(jù)映射到[0,1]區(qū)間。常用形式為:其中min{xij}和max{xij}指的是和xij同一數(shù)據(jù)集的最小值和最大值。極差標(biāo)準(zhǔn)化的方法有自定義和MaxMinScaler()等方法①自定義方法用自定義方法進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化就是利用式(5-8)編程實現(xiàn)。例5.20極差標(biāo)準(zhǔn)化自定義方法示例。defmy_scale(data):data=(data-data.min())/(data.max()-data.min())returndataimportnumpyasnpX=np.array([[1.,-1.,2.],[2.,0.,0.],[0.,1.,-1.]])scale=my_scale(X)print(scale)程序運行結(jié)果如圖5.14所示。
圖5.14
例5.20程序運行結(jié)果②
MaxMinScaler()可以使用sklearn中的MinMaxScaler()方法來實現(xiàn)數(shù)據(jù)標(biāo)準(zhǔn)化。MinMaxScaler()有一個重要參數(shù)feature_range,控制著數(shù)據(jù)壓縮到的范圍,默認(rèn)是[0,1]。例5.21MinMaxScaler()方法數(shù)據(jù)標(biāo)準(zhǔn)化示例。importnumpyasnpfromsklearnimportpreprocessingX=np.array([[1.,-1.,2.],[2.,0.,0.],[0.,1.,-1.]])sacler=preprocessing.MinMaxScaler()sacler.fit(X)print(sacler.transform(X))3、最大絕對值標(biāo)準(zhǔn)化方法最大絕對值標(biāo)準(zhǔn)化方法是xij除以其最大的絕對值,也就是將原始數(shù)據(jù)映射到[-1,1]區(qū)間內(nèi)。常用形式為:例5.22
MaxAbsScaler()方法進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化示例。importnumpyasnpfromsklearnimportpreprocessingX=np.array([[1.,-1.,2.],[2.,0.,0.],[0.,1.,-1.]])sacler=preprocessing.MaxAbsScaler()sacler.fit(X)print(sacler.transform(X))程序運行結(jié)果如圖5.15所示。(5-9)圖5.15
例5.22程序運行結(jié)果5數(shù)據(jù)歸約DatareductionChapter05數(shù)據(jù)歸約是指在對挖掘任務(wù)和數(shù)據(jù)本身內(nèi)容理解的基礎(chǔ)上,尋找數(shù)據(jù)的有用特征,以縮減數(shù)據(jù)規(guī)模,從而在盡可能保持?jǐn)?shù)據(jù)原貌的前提下,最大限度地精簡數(shù)據(jù)量。數(shù)據(jù)歸約包括維歸約、數(shù)量歸約和數(shù)據(jù)壓縮。1、維歸約
維歸約(DimensionalityReduction)的思路是減少所考慮的隨機變量或?qū)傩缘膫€數(shù),所用方法有屬性子集選擇、小波變換和主成分分析。其目的就是把原始數(shù)據(jù)變換或投影到較小的數(shù)據(jù)空間上。①屬性子集選擇屬性子集選擇是一種維歸約方法,對其中不相關(guān)、弱相關(guān)或冗余的屬性或維進(jìn)行檢測和刪除。其目標(biāo)是找出最小屬性集,使得數(shù)據(jù)集的概率分布盡可能地接近使用所有屬性得到的原分布。它減少了數(shù)據(jù)模式上的屬性數(shù)目,使得模式更易于理解。對于n個屬性,有2n個可能的子集。對于屬性子集選擇,通常使用搜索子空間的啟發(fā)式算法。這些方法是典型的貪心(啟發(fā)式)算法,它們的策略是做局部最優(yōu)選擇,期望由此導(dǎo)致全局最優(yōu)解。在實踐中,這種貪心方法是有效的,并可以逼近最優(yōu)解?!白詈玫摹?和“最差的”)屬性通常使用統(tǒng)計顯著性檢驗來確定。也可以使用一些其它屬性評估度量,如建立決策樹使用的信息增益度量?;締l(fā)式方法包括以下主要技術(shù),如圖5.16所示。向前選擇向后刪除決策樹歸約初始屬性集:{A1,A2,A3,A4,A5,A6}初始化歸約集:{}=>{A1,A4}=>歸約后的屬性集:{A1,A4,A6}
初始屬性集:{A1,A2,A3,A4,A5,A6}=>{A1,A4,A5,A6}=>歸約后的屬性集:{A1,A4,A6}
初始屬性集:{A1,A2,A3,A4,A5,A6}
歸約后的屬性集:{A1,A4,A6}A4?A1?A6?類別1類別2類別1類別2YYYNNN
圖5.16屬性子集選擇貪心(啟發(fā)式)方法示意圖①屬性子集選擇向前選擇向后刪除決策樹歸約初始屬性集:{A1,A2,A3,A4,A5,A6}初始化歸約集:{}=>{A1,A4}=>歸約后的屬性集:{A1,A4,A6}
初始屬性集:{A1,A2,A3,A4,A5,A6}=>{A1,A4,A5,A6}=>歸約后的屬性集:{A1,A4,A6}
初始屬性集:{A1,A2,A3,A4,A5,A6}
歸約后的屬性集:{A1,A4,A6}A4?A1?A6?類別1類別2類別1類別2YYYNNN(1)逐步向前選擇。逐步向前選擇過程由空屬性集作為歸約集的起始,確定原屬性集中最好的屬性并添加到歸約集中,迭代剩下的原屬性集,并將最好的屬性添加到該集合中。(2)逐步向后刪除。逐步向后刪除過程由整個屬性集開始,在每次迭代中刪除屬性集中最差的屬性。(3)逐步向前選擇和逐步向后刪除的組合。該方法將逐步向前選擇和向后選擇相結(jié)合,每一步選擇一個最好的屬性并在屬性集中刪除一個最差的屬性。(4)決策樹歸納。構(gòu)造一個類似于流程圖的決策樹結(jié)構(gòu),每個內(nèi)部結(jié)點表示一個屬性上的測試,每個分支對應(yīng)于測試的一個結(jié)果。在每個結(jié)點上選擇“最好”的屬性,將數(shù)據(jù)劃分成類。利用決策樹進(jìn)行子集選擇時,由給定的數(shù)據(jù)構(gòu)造決策樹,不出現(xiàn)在樹中的所有屬性假定是不相關(guān)的,出現(xiàn)在樹中的屬性形成歸約后的屬性子集。這些方法的結(jié)束條件可以不同,也可以使用一個度量閾值在決定何時終止屬性選擇過程。②小波變換小波變換(WaveletTransform,WT)是一種新的變換分析方法,它提供一個隨頻率改變的“時間-頻率”窗口,它是進(jìn)行信號時頻分析和處理的理想工具。小波變換的主要特點是通過變換能夠充分突出問題某些方面的特征,能對時間(空間)頻率進(jìn)行局部化分析,通過伸縮平移運算對信號(函數(shù))逐步進(jìn)行多尺度細(xì)化,最終達(dá)到在高頻處時間細(xì)分,低頻處頻率細(xì)分。小波變換能自動適應(yīng)時頻信號分析的要求,從而可聚焦到信號的任意細(xì)節(jié)。小波變換有如下的特點:
對于小頻率值,頻域分辨率高,時域分辨率低。
對于大頻率值,頻域分辨率低,時域分辨率高。小波變換在頻域分辨率和時域分辨率兩者之間做了權(quán)衡:在與時間相關(guān)的特征上具有高分辨率,而在與頻率相關(guān)的特征上也具有高分辨率。例5.23小波變換示例。importpywtimportcv2ascvimportnumpyasnpimportmatplotlib.pyplotaspltplt.rcParams['font.family']='STSong'#圖形中顯示漢字plt.rcParams['font.size']=12img=cv.imread('D:/data_mining/tx5-23.jpg',0)#讀取圖像#對img進(jìn)行haar小波變換,分量分別是低頻、水平高頻、垂直高頻、對角線高頻cA,(cH,cV,cD)=pywt.dwt2(img,'haar')#小波變換之后,低頻分量對應(yīng)的圖像p1=plt.figure(figsize=(12,6),dpi=80)#第一幅子圖,并確定畫布大小ax1=p1.add_subplot(2,2,1)#創(chuàng)建一個2行2列的子圖,并開始繪制第一幅圖plt.axis('off')#不顯示坐標(biāo)軸plt.title('低頻分量圖像')AA1=np.uint8(np.uint8(cA/np.max(cA)*255))plt.imshow(AA1,'gray')ax1=p1.add_subplot(2,2,2)plt.axis('off')plt.title('水平高頻分量圖像')AA2=np.uint8(np.uint8(cA/np.max(cH)*255))plt.imshow(AA2,'gray')ax3=p1.add_subplot(2,2,3)plt.title('垂直高頻分量圖像')圖5.17例5.23程序運行結(jié)果plt.axis('off')AA3=np.uint8(np.uint8(cV/np.max(cH)*255))plt.imshow(AA3,'gray')ax4=p1.add_subplot(2,2,4)plt.title('對角線高頻分量圖像')plt.axis('off')AA4=np.uint8(np.uint8(cD/np.max(cH)*255))plt.imshow(AA4,'gray')plt.show()程序運行結(jié)果如圖5.17所示。③主成分分析主成分分析PCA(PrincipalComponentAnalysis)是一種用于連續(xù)屬性的數(shù)據(jù)降維方法。它需要找到一個合理的方法,在減少需要分析屬性的同時,盡量減少原指標(biāo)包含信息的損失,以達(dá)到對所收集數(shù)據(jù)進(jìn)行全面分析的目的。(1)PCA算法一般各屬性間存在一定的相關(guān)關(guān)系,因此有可能用較少的綜合屬性,來近似地表達(dá)整體綜合信息。例如,某班學(xué)生的語文(100)、數(shù)學(xué)(150)、物理(100)、化學(xué)(100)成績?nèi)绫?.3所示。學(xué)號語文數(shù)學(xué)物理化學(xué)S19014099100S290978892S3901107983……………表5.3某班學(xué)生成績表首先,假設(shè)這些科目成績不相關(guān),也就是說某一科目考多少分與其它科目沒有關(guān)系。如果通過學(xué)生成績進(jìn)行一個簡單地排序,因為語文成績相同,所以數(shù)學(xué)、物理、化學(xué)這三門課的成績構(gòu)成了這組數(shù)據(jù)的主成分(數(shù)學(xué)可以作為第一主成分,因為數(shù)學(xué)成績最分散)。主成分分析PCA又稱K-L(Karhunen-Loeve)方法,是最常用的一種降維方法。PCA通常用于高維數(shù)據(jù)集的探索與可視化,還可以用作數(shù)據(jù)壓縮和預(yù)處理等,在數(shù)據(jù)壓縮消除冗余和噪音消除等領(lǐng)域也有廣泛的應(yīng)用。PCA主要目的是找出數(shù)據(jù)里最主要的特征代替原始數(shù)據(jù)。具體地,假如數(shù)據(jù)集是n維的,共有m個數(shù)據(jù)(x(1),x(2),…,x(m))。希望將這m個數(shù)據(jù)的維度從n維降到n’維,這m個n’維的數(shù)據(jù)集盡可能的代表原始數(shù)據(jù)集。PCA算法描述:輸入:n維數(shù)據(jù)樣本集D=(x(1),x(2),...,x(m)),降維到的維數(shù)n'輸出:降維后的n'維數(shù)據(jù)樣本集D’處理流程:step1對所有的樣本進(jìn)行中心化處理:
;step2計算樣本的協(xié)方差矩陣XXT;step3對矩陣XXT進(jìn)行特征值分解;step4取出最大的n'個特征值對應(yīng)的特征向量(w1,w2,...,wn′),將所有的特征向量標(biāo)準(zhǔn)化后,組成特征向量矩陣W;step5對樣本集中的每一個樣本x(i),轉(zhuǎn)化為新的樣本z(i)=WTx(i);step6得到輸出樣本集D′=(z(1),z(2),…,z(m))。
表5.4原始數(shù)據(jù)與x(i)、y(i)與中心化數(shù)據(jù)x(i)'、y(i)'①對所有的樣本進(jìn)行中心化處理:x(i)’、y(i)’如表5.4所示。②求特征協(xié)方差矩陣:
③求協(xié)方差矩陣的特征值和特征向量;由|cov–λI2|=0,求得特征值:λ1=0.490833989,λ2=1.28402771。由covV=λV,求出特征向量矩陣并單位化:。④將特征值按照從大到小的順序排序,我們選擇其中最大的那個λ2=1.28402771,對應(yīng)的特征向量為V’=(0.677873399,-0.735178656)T。⑤在表5.4中,利用公式z(i)=(x(i)’,y(i)’)V’(i=1,2,…,10)將原始樣例的2維特征變成了1維,這就是原始特征在1維上的投影。X(i)x(i)y(i)x(i)’y(i)’X(1)2.52.40.690.49X(2)0.50.7-1.31-1.21X(3)2.22.90.390.99X(4)1.92.20.090.29X(5)3.13.01.291.09X(6)2.32.70.490.79X(7)21.60.19-0.31X(8)11.1-0.81-0.81X(9)1.51.6-0.31-0.31X(10)1.10.9-0.71-1.01平均值=1.81
③主成分分析函數(shù)PCA()Python的主成分分析利用函數(shù)PCA(),其常用形式為:PCA(n_components=None,copy=True,whiten=False)PCA對象常用屬性如下:1.explained_variance:表示降維后各主成分的方差值。方差值越大,表明越重要。2.explained_variance_ratio_:表示各主成分的貢獻(xiàn)率。3.components_:表示特征空間主特征方向的基向量,即為公式推導(dǎo)里的特征向量組成的特征矩陣,這個矩陣的每一行是一個特征向量。它是按照特征值由大到小的順序進(jìn)行排列的。4.mean_:通過訓(xùn)練數(shù)據(jù)估計的每個特征上的均值。PCA對象常用方法如下:1.fit(X):表示用數(shù)據(jù)X來訓(xùn)練PCA模型。2.fit_transform(X):用訓(xùn)練數(shù)據(jù)集X來訓(xùn)練PCA模型,同時返回降維后的數(shù)據(jù)。3.inverse_transform():將降維后的數(shù)據(jù)轉(zhuǎn)換成原始數(shù)據(jù)。4.transform(X):將數(shù)據(jù)X轉(zhuǎn)換成降維后的數(shù)據(jù)。例5.25PCA()函數(shù)應(yīng)用示例。importnumpyasnpfromsklearn.decompositionimportPCAX=np.array([[-1,2,66,-1],[-2,6,58,-1],[-3,8,45,-2],[1,9,36,1],[2,10,62,1],[3,5,83,2]])pca=PCA(n_components=2)#降到2維pca.fit(X)#訓(xùn)練newX=pca.fit_transform(X)#降維后的數(shù)據(jù)print(pca.explained_variance_ratio_)#輸出貢獻(xiàn)率print(newX)#輸出降維后的數(shù)據(jù)程序運行的結(jié)果如圖5.18所示。
圖5.18例5.25程序運行的結(jié)果第一行為各主成分的貢獻(xiàn)率,可以看出第一個特征占了很大比重,后面幾行是降維后的數(shù)據(jù)。2、數(shù)量歸約數(shù)量歸約(NumerosityReduction)是用替代的、較小的數(shù)據(jù)表示形式替換原始數(shù)據(jù)。①
特征歸約特征歸約是從原有的特征中刪除不重要或不相關(guān)的特征,或者通過對特征進(jìn)行重組來減少特征的個數(shù)。其原則是在保留、甚至提高原有判別能力的同時減少特征向量的維度。特征歸約算法的輸入是一組特征,輸出是它的一個子集。在領(lǐng)域知識缺乏的情況下進(jìn)行特征歸約時一般包括3個步驟:step1搜索過程。在特征空間中搜索特征子集,由選中的特征構(gòu)成的每個子集稱為一個狀態(tài)。step2評估過程。輸入一個狀態(tài),通過評估函數(shù)對應(yīng)預(yù)先設(shè)定的閾值輸出一個評估值。step3分類過程。使用最終的特征集完成最后的算法。
特征歸約處理的優(yōu)點:
(1)用最少的數(shù)據(jù),提高挖掘效率。
(2)具有更高的數(shù)據(jù)挖掘處理精度。
(3)可以得到簡單的數(shù)據(jù)挖掘處理結(jié)果。
(4)使用更少的特征。②樣本歸約樣本歸約就是從數(shù)據(jù)集中選出一個具有代表性樣本子集,子集大小的確定要考慮計算成本、存儲要求、估計量的精度以及其它一些與算法和數(shù)據(jù)特性有關(guān)的因素。數(shù)據(jù)挖掘處理的初始數(shù)據(jù)集描述了一個極大的總體,其中最大和最關(guān)鍵的就是樣本的數(shù)目,也就是數(shù)據(jù)表中的記錄數(shù)。一般對數(shù)據(jù)的分析只基于初始樣本集的一個子集。獲得數(shù)據(jù)的子集后,用它來提供整個數(shù)據(jù)集的一些信息,這個子集通常叫做估計量,它的質(zhì)量依賴于所選子集中的樣本。事實上,取樣過程總會造成取樣誤差,取樣誤差對所有的方法和策略來講都是固有的、不可避免的,當(dāng)子集的規(guī)模變大時,取樣誤差一般會降低。與針對整個數(shù)據(jù)集的數(shù)據(jù)挖掘比較起來,樣本歸約具有以下優(yōu)點:減少成本、速度更快、范圍更廣,有時甚至能獲得更高的精度。③特征值歸約特征值歸約是特征值離散化技術(shù),它將連續(xù)型特征的值離散化,使之成為少量的區(qū)間,每個區(qū)間映射到一個離散符號。這種技術(shù)的好處在于簡化了數(shù)據(jù)描述,并易于理解數(shù)據(jù)和最終的挖掘結(jié)果。特征值歸約可以是有參的,也可以是無參的。有參方法使用一個模型來評估數(shù)據(jù),只需存放參數(shù),而不需要存放實際數(shù)據(jù)。有參的特征值歸約有以下兩種:(1)回歸。線性回歸和多元回歸。(2)對數(shù)線性模型。近似離散多維概率分布。無參的特征值歸約有3種:(1)直方圖。采用分箱近似數(shù)據(jù)分布,其中V-最優(yōu)和MaxDiff直方圖是最精確和最實用的。(2)聚類。將數(shù)據(jù)樣本視為對象,將對象劃分為群或聚類,使得在一個簇中的對象“相似”而與其它簇中的對象“不相似”,在數(shù)據(jù)歸約時用數(shù)據(jù)的簇代替實際數(shù)據(jù)。(3)選樣。用較少的隨機樣本表示大數(shù)據(jù)集,如簡單選擇n個樣本(類似樣本歸約)、聚類選樣和分層選樣等。3、數(shù)據(jù)壓縮數(shù)據(jù)壓縮(DataCompression)就是使用變換,得到原始數(shù)據(jù)的歸約或“壓縮”表示。如果對壓縮后的數(shù)據(jù)進(jìn)行重構(gòu)時不損失信息,則該數(shù)據(jù)歸約被稱為無損的,否則稱為有損的。比較流行和有效的有損數(shù)據(jù)壓縮方法如小波變換和主要成分分析,小波變換對于稀疏或傾斜數(shù)據(jù)以及具有有序?qū)傩缘臄?shù)據(jù)有很好的壓縮效果。例5.26在電商評論文本中,最常見的就是數(shù)據(jù)質(zhì)量的參差不齊,通過簡單的去重處理,可以刪除掉一部分相同的評論,但是它不能去除掉單條評論文本中重復(fù)出現(xiàn)的文字。詞語壓縮的目的就是將單條文本中的重復(fù)文字進(jìn)行刪除。比如下面的這些例子:“質(zhì)量很好很好很好很好很好質(zhì)量很好質(zhì)量很好”,“差差差差差差差差差差差差”,“一般一般一般一般一般一般”等。importnumpyasnpdictB=['質(zhì)量','質(zhì)量很好','差','一般']maxDictB=max([len(word)forwordindictB])sen1='質(zhì)量很好很好很好很好很好質(zhì)量很好質(zhì)量很好'sen2='差差差差差差差差差差差差'sen3='一般一般一般一般一般一般'defcutB(sentence):#基于字典的逆向最大匹配中文分詞result=[]sentenceLen=len(sentence)whilesentenceLen>0:word=''foriinrange(maxDictB,0,-1):piece=sentence[sentenceLen-i:sentenceLen]ifpieceindictB:word=pieceresult.append(word)sentenceLen-=ibreakifwordis'':sentenceLen-=1result.append(sentence[sentenceLen])print(np.unique(result[::-1]))#去掉重復(fù)詞cutB(sen1)cutB(sen2)cutB(sen3)程序運行結(jié)果如圖5.19所示。圖5.19例5.26程序運行結(jié)果6數(shù)據(jù)變換與數(shù)據(jù)離散化DatatransformationanddatadiscretizationChapter06在數(shù)據(jù)預(yù)處理過程中,不同的數(shù)據(jù)適合不同的數(shù)據(jù)挖掘算法。數(shù)據(jù)變換是一種將原始數(shù)據(jù)變換成較好格式的方法。數(shù)據(jù)離散化是一種數(shù)據(jù)變換的形式,它能減小算法的時間和空間開銷,提高系統(tǒng)對數(shù)據(jù)樣本的分類、聚類能力和抗噪聲能力。1、數(shù)據(jù)變換01特征二值化特征二值化(BinaryQuantization)的核心在于設(shè)定一個閾值,將特征值與該閾值比較后,轉(zhuǎn)換為0或1(有時只考慮某個特征出現(xiàn)與否,不考慮出現(xiàn)次數(shù)、程度),它的目的是將連續(xù)數(shù)值細(xì)粒度的度量轉(zhuǎn)化為粗粒度的度量。Sklearn.preprocessing.Binarizer()是一種屬于預(yù)處理模塊的方法。它在離散連續(xù)特征值中起關(guān)鍵作用。常用形式為:Binarizer(threshold=0.0)其中參數(shù)threshold是給定的閾值(float),可選項,小于等于threshold的值映射為0,否則映射為1。缺省情況下,閾值為0.0。例5.27特征二值化示例。fromsklearn.preprocessingimportBinarizerdata=[[1,2,4],[1,2,6],[3,2,2],[4,3,8]]binar=Binarizer(threshold=3)#將數(shù)值型數(shù)據(jù)轉(zhuǎn)化為布爾型的二值數(shù)據(jù)print(binar.fit_transform(data))#對數(shù)據(jù)先進(jìn)行擬合,然后標(biāo)準(zhǔn)化程序運行結(jié)果如圖5.20所示。圖5.20例5.27程序運行結(jié)果02特征標(biāo)準(zhǔn)化
特征標(biāo)準(zhǔn)化也稱為數(shù)據(jù)無量綱化,主要包括:總和標(biāo)準(zhǔn)化、標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化、極差標(biāo)準(zhǔn)化(§5.4.2)、極大值標(biāo)準(zhǔn)化(§5.4.3)?;趨?shù)的模型或基于距離的模型,都需要進(jìn)行特征標(biāo)準(zhǔn)化。(1)總和標(biāo)準(zhǔn)化總和標(biāo)準(zhǔn)化處理后的數(shù)據(jù)介于(0,1)之間,并且它們的和為1。總和標(biāo)準(zhǔn)化的步驟和公式也非常簡單,即分別求出各特征數(shù)據(jù)總和,以各特征的數(shù)據(jù)分別除以數(shù)據(jù)總和。常用形式如下:
,其中
(2)標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化的常用形式如下:
,(i=1,2,?,m;j=1,2,?,n)(5-11)
其中,,
標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化處理后所得到的新數(shù)據(jù)具有各特征(指標(biāo))的平均值為0,標(biāo)準(zhǔn)差為1的特點。即:
03連續(xù)特征變換
連續(xù)特征變換(ContinuousFeatureTransformation)的常用方法有三種:基于多項式的特征變換、基于指數(shù)函數(shù)的特征變換、基于對數(shù)函數(shù)的特征變換。連續(xù)特征變換能夠增加數(shù)據(jù)的非線性特征并獲取特征之間關(guān)系的可能性,有效地提高了模型的復(fù)雜度。(1)多項式變換一般來說,多項式變換(PolynomialTransformation)都是按照下面的方式進(jìn)行的:一次函數(shù)(degree=1):f=kx+b;二次函數(shù)(degree=2):f=ax2+bx+w;三次函數(shù)(degree=3):f=ax3+bx2+cx+w。多項式變換可以適當(dāng)?shù)靥嵘P偷臄M合能力,在線性回歸模型上具有較為廣泛的應(yīng)用。
如果對兩個特征u,v進(jìn)行多項式變化操作,那么就相當(dāng)于多出來了3個特征即u2、u*v、v2。一般我們在使用支持向量機的時候,由于數(shù)據(jù)在低維度上是不可分的,因此我們需要對數(shù)據(jù)做一個高維度的映射,使得數(shù)據(jù)能夠在高維度上是可分的。
例如:,這里以第2行[345]為例進(jìn)行多項式變換如下:當(dāng)degree=2時,變換后為[13453*33*43*54*44*55*5]。當(dāng)degree=3時,變換后為[13453*33*43*54*44*55*53*3*33*3*43*3*54*4*34*3*55*5*34*4*44*4*54*5*55*5*5]Python中將數(shù)據(jù)變煥為多項式特征函數(shù)PolynomialFeatures(),常用形式為:PolynomialFeatures(degree=2)參數(shù)degree=2表示多項式的變化維度為2。
例5.28多項式變換示例。importnumpyasnpfromsklearn.preprocessingimportPolynomialFeaturesfromsklearn.preprocessingimportFunctionTransformerX=np.arange(9).reshape(3,3)#生成多項式print(X)ploy=PolynomialFeatures(degree=2)print(ploy.fit_transform(X))ploy=Polynomi
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 土石方路基施工方案
- 公路招牌安裝施工方案
- 政府領(lǐng)導(dǎo)發(fā)言稿
- 路基填料加工施工方案
- 萬江防腐地坪漆施工方案
- 婚禮發(fā)言稿男方母親
- 渝北樓宇外墻清洗施工方案
- 新型鉆井工程施工方案
- 班會班長發(fā)言稿
- 高中學(xué)生發(fā)言稿
- 《網(wǎng)絡(luò)營銷》試題及答案2
- 重度哮喘診斷與處理中國專家共識(2024版)解讀
- 譯林版-小學(xué)五年級下冊-繪本閱讀-Home-Is-Best-課件
- 社會變革中的民事訴訟讀書筆記
- 甲狀腺術(shù)后病人護(hù)理查房
- 《創(chuàng)傷失血性休克中國急診專家共識(2023)》解讀課件
- 2024年全國體育單招英語考卷和答案
- 河北省邯鄲市磁縣2024屆中考數(shù)學(xué)模試卷含解析
- 2024上海市高三英語一模各區(qū)《完形填空》分類匯編
- 2020-2024年安徽省初中學(xué)業(yè)水平考試中考?xì)v史試卷(5年真題+答案解析)
- 企業(yè)解散清算公告模板
評論
0/150
提交評論