《數(shù)據(jù)采集與處理:基于python》 課件 第7章-數(shù)據(jù)清洗與預(yù)處理_第1頁
《數(shù)據(jù)采集與處理:基于python》 課件 第7章-數(shù)據(jù)清洗與預(yù)處理_第2頁
《數(shù)據(jù)采集與處理:基于python》 課件 第7章-數(shù)據(jù)清洗與預(yù)處理_第3頁
《數(shù)據(jù)采集與處理:基于python》 課件 第7章-數(shù)據(jù)清洗與預(yù)處理_第4頁
《數(shù)據(jù)采集與處理:基于python》 課件 第7章-數(shù)據(jù)清洗與預(yù)處理_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第七章

數(shù)據(jù)清洗與預(yù)處《數(shù)據(jù)采集與處理:基于Python》2024/5/1112024/5/112教學(xué)目標(biāo)本章學(xué)習(xí)目標(biāo)1.了解數(shù)據(jù)清洗與預(yù)處理的相關(guān)概念、方法和技術(shù),理解數(shù)據(jù)預(yù)處理的相關(guān)步驟和重要作用;2.了解異常數(shù)據(jù)、缺失數(shù)據(jù)及噪聲數(shù)據(jù)的處理方法和技術(shù),掌握Python相關(guān)模塊的使用方法;3.了解數(shù)據(jù)整合面臨的問題和解決方法,掌握Python模塊pandas常用的數(shù)據(jù)連接與合并方法;4.了解數(shù)據(jù)變換常用方法的原理和特點(diǎn),熟悉Python數(shù)據(jù)變換的相關(guān)模塊和函數(shù);5.了解數(shù)據(jù)聚合與分組的概念,熟悉pandas模塊中DataFrame對象的分組與聚合運(yùn)算方法;6.了解數(shù)據(jù)歸約、數(shù)據(jù)降維的概念和相關(guān)方法,掌握基于sklearn和scipy模塊的主成分分析(PCA)和奇異值分解相關(guān)方法。本章提綱1、數(shù)據(jù)清洗2、數(shù)據(jù)整合3、數(shù)據(jù)變換4、聚合與分組統(tǒng)計(jì)5、數(shù)據(jù)歸約數(shù)據(jù)清洗2024/5/113數(shù)據(jù)清洗數(shù)據(jù)清理(也叫清洗)就是指把“臟數(shù)據(jù)”徹底洗掉,包括檢查數(shù)據(jù)一致性,處理無效值和缺失值等,從而提高數(shù)據(jù)質(zhì)量。在實(shí)際的工作中,數(shù)據(jù)清洗通常占開發(fā)過程的50%-70%左右的時(shí)間。一般認(rèn)為,數(shù)據(jù)清理的含義是檢測和去除數(shù)據(jù)集中的噪聲數(shù)據(jù)和無關(guān)數(shù)據(jù),處理遺漏數(shù)據(jù),去除空白數(shù)據(jù)域和知識背景下的白噪聲。4數(shù)據(jù)清理—異常數(shù)據(jù)處理1.異常數(shù)據(jù)處理異常數(shù)據(jù)也稱為離群點(diǎn)(outlier),指采集的數(shù)據(jù)中,個別值的數(shù)據(jù)偏離其余的觀測值。如比爾蓋茨2017年入選中國科學(xué)院外籍院士,統(tǒng)計(jì)該類人群平均個人財(cái)富時(shí)則顯得尤為異常,如果不進(jìn)行處理或消除,該類人群平均都是億萬富翁。再如小學(xué)五年級學(xué)生的身高數(shù)據(jù)(單位:米):(1.35,1.40,1.42,13.8,1.43,1.40)(1)異常數(shù)據(jù)分析使用統(tǒng)計(jì)量進(jìn)行判斷:計(jì)算出最大值、最小值及均值,據(jù)此檢查數(shù)據(jù)是否超出合理范圍使用3σ原則:根據(jù)正態(tài)分布定義,距離平均值3σ(標(biāo)準(zhǔn)差)以外的數(shù)值出現(xiàn)屬于小概率事件,因此,異常值可以看成那些數(shù)據(jù)和均值的偏差超過3倍標(biāo)準(zhǔn)差的值5數(shù)據(jù)清理—異常數(shù)據(jù)處理使用箱型圖判斷異常值6數(shù)據(jù)清理—異常數(shù)據(jù)處理(2)異常數(shù)據(jù)處理方法刪除有異常數(shù)據(jù)的記錄:直接刪除,不予考慮視為缺失值:按照缺失值的處理方法進(jìn)行相應(yīng)操作,如填充缺省值、均值、前向/后向填充、插值法等平均值修正:使用前后兩個觀測值的均值代替,或使用整個數(shù)據(jù)集的平均值代替不處理:將異常數(shù)據(jù)當(dāng)成正常數(shù)據(jù)進(jìn)行操作7數(shù)據(jù)清理—缺失值處理2.缺失值處理數(shù)據(jù)缺失是指記錄的數(shù)據(jù)由于某些原因使部分?jǐn)?shù)據(jù)丟失,可能會對機(jī)器學(xué)習(xí)或統(tǒng)計(jì)分析產(chǎn)生一定的影響。常見數(shù)據(jù)缺失原因:(1)部分信息因?yàn)椴淮_定的原因暫時(shí)無法獲?。?)有些信息雖然記錄了,但是由于保存不當(dāng),部分丟失(3)由于采集信息人員工作疏忽,漏記某些數(shù)據(jù)8數(shù)據(jù)清理—缺失值處理處理缺失值的方法很多,如忽略存在缺失值的記錄、去掉包含缺失數(shù)據(jù)的屬性、手工填寫缺失值、使用默認(rèn)值代替缺失值、使用屬性平均值(中位數(shù)或眾數(shù))代替缺失值、使用同類樣本平均值代替缺失值、預(yù)測最可能的值代替缺失值等。經(jīng)常使用的數(shù)據(jù)補(bǔ)插方法來代替缺失值:最近鄰補(bǔ)插:使用含缺失值的樣本附近的其他樣本的數(shù)據(jù)替代;或前后數(shù)據(jù)的均值替代等回歸方法:對含有缺失值的屬性,使用其他樣本屬性的值建立擬合模型,然后使用該模型預(yù)測缺失值插值法:使用已知數(shù)據(jù)建立合適的插值函數(shù),缺失值使用該函數(shù)計(jì)算出近似替代值。常見的插值函數(shù)有拉格朗日插值法(拉格朗日插值法可以給出一個恰好穿過二維平面上若干個已知點(diǎn)的多項(xiàng)式函數(shù))、牛頓插值法、分段插值法、樣條插值法、Hermite插值法等。9數(shù)據(jù)清理—噪聲數(shù)據(jù)處理噪聲無處不在,其對機(jī)器學(xué)習(xí)的影響也有大有小,這取決于噪聲相比真實(shí)數(shù)據(jù)的比例,也取決于學(xué)習(xí)的精度要求。噪聲數(shù)據(jù)的處理方法包括分箱、聚類和回歸:(1)分箱方法:把待處理的數(shù)據(jù)(某列屬性值)按照一定的規(guī)則放進(jìn)一些箱子(區(qū)間)中,考察每一個箱子中的數(shù)據(jù),然后采用某種方法分別對每個箱子中的數(shù)據(jù)進(jìn)行處理。涉及如何分箱及如何對每個箱子中的數(shù)據(jù)進(jìn)行平滑處理。常見分箱方法等深分箱法:又稱統(tǒng)一權(quán)重法。將數(shù)據(jù)集按照記錄行數(shù)分箱,每箱具有相同記錄數(shù)(深度)等寬分箱法:又稱統(tǒng)一區(qū)間法。使數(shù)據(jù)集在整個屬性值的區(qū)間上平均分布,即每個箱的區(qū)間范圍是個常量,稱為箱子寬度用戶自定義區(qū)間:根據(jù)需要自定義區(qū)間10數(shù)據(jù)清理—噪聲數(shù)據(jù)處理分箱后就需要對每個箱子中的數(shù)據(jù)進(jìn)行平滑處理。常見的數(shù)據(jù)平滑方法有:按平均值平滑:對同箱數(shù)據(jù)求平均值,然后替代箱子中所有數(shù)據(jù)按邊界值平滑:用距離較小的邊界值替代箱子中的每個數(shù)據(jù)按中值平滑:取箱子的中值替代箱子中的所有數(shù)據(jù)(2)聚類方法:分組為由類似的對象組成的多個類,找出落在分類或簇之外的值作為噪聲數(shù)據(jù)(3)回歸方法:擬合相關(guān)變量之間的回歸函數(shù)來預(yù)測下一個數(shù)值,包括線性和非線性回歸(4)其他如小波變換降噪處理方法傳統(tǒng)信號降噪中使用的傅里葉分析全部都是基于頻域的,將信號分解成一系列不同頻率的正余弦函數(shù)的疊加。傅里葉變換中即使是時(shí)域的局部變化也會影響頻域的全局,頻域的局部變化同樣也影響著時(shí)域的全局變化。之后由傅里葉變換又發(fā)展來了短時(shí)傅里葉變換(Short-time?Fourier?transform)(STFT)?和小波變換(wavelet?transform)。小波變換是一種信號的時(shí)間——尺度(時(shí)間——頻率)分析方法,它具有多分辨分析的特點(diǎn),而且在時(shí)頻兩域都具有表征信號局部特征的能力,是一種窗口大小固定不變但其形狀可改變,時(shí)間窗和頻率窗都可以改變的時(shí)頻局部化分析方法。小波變換常見的形式有連續(xù)小波變換(CWT)、離散小波變換(DWT)等。11Python相關(guān)方法1.pandas和numpy方法pandas是Python中的一個進(jìn)行數(shù)據(jù)分析與清洗的庫,基于numpy庫構(gòu)建,包含了大量標(biāo)準(zhǔn)數(shù)據(jù)模型,并提供了高效地操作大型數(shù)據(jù)集所需的工具,以及大量快速便捷地處理數(shù)據(jù)的函數(shù)和方法,使以numpy為中心的應(yīng)用變得十分簡單。pandas相關(guān)方法如下。(1)缺失數(shù)據(jù)處理。pandas使用NaN值表示浮點(diǎn)和非浮點(diǎn)數(shù)組中的缺失數(shù)據(jù),Python內(nèi)置的None值也會被當(dāng)作NaN處理。pandas缺失值處理的常用方法如表所示。12方法名稱方法描述cleaned清除所有缺失值dropna根據(jù)條件過濾缺失值isnull返回一個布爾值,標(biāo)明哪些是缺失值fillna填充缺失值數(shù)據(jù)notnullisnull的否定式Python相關(guān)方法pandas處理缺失值的示例程序如下:13#搜索缺失值,用dropna過濾并刪除frompandasimportSeries,DataFramefromnumpyimportnanasNAimportnumpyasnpdata=Series([12,None,34,NA,68])print(data)print(data.isnull())print(data.dropna())data=DataFrame(np.random.randn(5,4))data.iloc[:2,1]=NAdata.iloc[:3,2]=NAdata.iloc[0,0]=NAprint(data)print(data.dropna(axis=1))print(data.dropna(thresh=2))#缺失值填充print(data.fillna({1:11,2:22}))print(data.fillna({1:data[1].mean(),2:data[2].mean()}))Python相關(guān)方法(2)重復(fù)數(shù)據(jù)處理。在數(shù)據(jù)采集中,經(jīng)常會出現(xiàn)重復(fù)數(shù)據(jù),這時(shí)可以使用pandas進(jìn)行數(shù)據(jù)清洗。在pandas中可以使用duplicated方法查找重復(fù)數(shù)據(jù),使用drop_duplicates方法清洗重復(fù)數(shù)據(jù)。pandas處理異常值和重復(fù)值的示例程序如下:14#檢測和過濾異常值frompandasimport*importnumpyasnpdata=DataFrame(np.random.randn(10,4))print(data)print(data.describe())print(\n找出第3列絕對值大于1的項(xiàng)\n)data1=data[2]print(data1[np.abs(data1)>1])data1[np.abs(data1)>1]=100print(data)#移除重復(fù)數(shù)據(jù)data=DataFrame({name:[zhang]*3+[wang]*4,age:[18,18,19,19,20,20,21]})print("原始數(shù)據(jù):",data)print(data.duplicated())print(data.drop_duplicates())#返回移除重復(fù)數(shù)據(jù)后的結(jié)果,原對象值沒有改變print("函數(shù)調(diào)用后的數(shù)據(jù):",data)Python相關(guān)方法2.scipy方法scipy模塊中插值方法的示例程序如下:15#拉格朗日插值法frompandasimport*fromerpolateimportlagrangeimportnumpyasnpdf=DataFrame(np.random.randn(20,2),columns=[first,second])df[first][(df[first]<-1.5)|(df[first]>1.5)]=Nonedefployinterp_column(s,n,k=5):#插值函數(shù)y=s.iloc[list(range(n-k,n))+list(range(n+1,n+1+k))] #取值y=y[y.notnull()] #剔除空值returnlagrange(y.index,list(y))(n) #插值并返回插值結(jié)果foriindf.columns:forjinrange(len(df)):if(df[i].isnull())[j]:df[i][j]=ployinterp_column(df[i],j)print(df)Python相關(guān)方法3.sklearn方法sklearn中的Imputer類提供了一些基本方法(如SimpleImputer函數(shù))來處理缺失值,如使用均值、中位數(shù)或者缺失值所在列中頻繁出現(xiàn)的值來替換。SimpleImputer函數(shù)的形式如下:SimpleImputer(missing_values=nan,strategy=mean,fill_value=None,verbose=0,copy=True,add_indicator=False)●missing_values:缺失值是什么,一般情況下缺失值是空值,即np.nan。●strategy:采取什么策略填充空值,分別是mean、median、most_frequent以及constant,這是對每一列而言的。如果strategy=mean,則由該列的均值填充;如果strategy=median,則由該列的中位數(shù)填充:如果strategy=most_frequent,則由該列的眾數(shù)填充。需要注意的是,如果strategy=constant,則可以將空值填充為自定義的值,這就涉及后一個參數(shù)——fill_value,即如果strategy=constant,則填充fill_value的值?!馽opy:表示對原來沒有填充的數(shù)據(jù)的拷貝?!馻dd_indicator:如果該參數(shù)為True,則會在數(shù)據(jù)后面加入n列由0和1構(gòu)成的同樣大小的數(shù)據(jù),0表示所在位置非空,1表示所在位置為空,即相當(dāng)于一種判斷是否為空的索引。16Python相關(guān)方法示例程序如下:運(yùn)行結(jié)果如下:17fromsklearn.imputeimportSimpleImputerimp=SimpleImputer(strategy=mean)#注意均值計(jì)算結(jié)果,空值不納入計(jì)算:(1+7)/2=4,(2+3+6)/3=3.66667imp.fit([[1,2],[np.nan,3],[7,6]])#擬合訓(xùn)練模型X=[[np.nan,2],[6,np.nan],[7,6]]print(X)print(imp.transform(X))[[nan,2],[6,nan],[7,6]][[4.2.][6.3.6667][7.6.]]數(shù)據(jù)整合2024/5/1118數(shù)據(jù)整合簡介我們?nèi)粘J褂玫臄?shù)據(jù)來自各種渠道,有的是連續(xù)數(shù)據(jù),有的是離散數(shù)據(jù),有的是模糊數(shù)據(jù),有的是定性數(shù)據(jù),有的是定量數(shù)據(jù)。數(shù)據(jù)整合就是將多文件或者多數(shù)據(jù)庫中的異構(gòu)數(shù)據(jù)連接合并,并進(jìn)行必要的改名、格式轉(zhuǎn)換等操作,形成統(tǒng)一的完整數(shù)據(jù)視圖。在數(shù)據(jù)整合的過程中,一般需要考慮以下問題。(1)實(shí)體識別:數(shù)據(jù)來源不同,其概念定義也可能不同。如同名異義,異名同義,單位不統(tǒng)一等。(2)屬性冗余:數(shù)據(jù)中存在冗余,如同一屬性多次出現(xiàn),同一屬性命名不一致導(dǎo)致數(shù)據(jù)重復(fù)等。(3)數(shù)據(jù)不一致:編碼不一致導(dǎo)致數(shù)據(jù)表示不一致,如日期、新舊身份證號碼等。(4)連接與合并:不同來源的數(shù)據(jù)基于什么屬性或規(guī)則進(jìn)行連接,是橫向連接還是縱向連接等。19Python相關(guān)方法Python通常使用pandas讀取外部數(shù)據(jù)源,其中DataFrame數(shù)據(jù)對象提供了豐富的數(shù)據(jù)連接與合并方法。(一)merge函數(shù)pandas中的merge函數(shù)類似于關(guān)系型數(shù)據(jù)庫SQL語句中join的用法,可以將不同數(shù)據(jù)集依照某些字段(屬性)進(jìn)行合并操作,得到一個新的數(shù)據(jù)集。1.merge函數(shù)的用法pd.merge(left,right,how:str=inner,on=None,left_on=None,right_on=None,left_index:bool=False,right_index:bool=False,sort:bool=False,suffixes=(_x,_y),copy:bool=True,indicator:bool=False,validate=None)20Python相關(guān)方法參數(shù)說明如下:●left:待拼接的左側(cè)DataFrame對象?!駌ight:待拼接的右側(cè)DataFrame對象?!駂ow:取值可選leftrightouterinner,默認(rèn)是inner,即內(nèi)連接。inner是取交集,outer是取并集。比如“l(fā)eft:[A,B,C];right:[A,C,D];”,選用inner取交集時(shí),left中出現(xiàn)的A會和right中出現(xiàn)的另一個A進(jìn)行匹配拼接,B在right中沒有匹配到,則會丟失;選用outer取并集時(shí),同時(shí)出現(xiàn)的A會進(jìn)行一一匹配,沒有同時(shí)出現(xiàn)的會將缺失的部分添加為缺失值?!駉n:要加入的列或索引級別名稱,必須在左側(cè)和右側(cè)DataFrame對象中均找到。如果未傳遞且left_index和right_index為False,則DataFrame中列的交集將被推斷為連接鍵?!駆eft_on:左側(cè)DataFrame中的列或索引用作鍵,可以是列名、索引級別名稱,也可以是長度等于DataFrame長度的數(shù)組?!駌ight_on:右側(cè)DataFrame中的列或索引用作鍵,可以是列名、索引級別名稱,也可以是長度等于DataFrame長度的數(shù)組?!駆eft_index:如果為True,則使用左側(cè)DataFrame中的索引(行標(biāo)簽)作為其連接鍵。對于具有MultiIndex(分層)的DataFrame,級別數(shù)必須與右側(cè)DataFrame中的連接鍵數(shù)相匹配?!駌ight_index:與left_index功能相似?!駍ort:按字典順序通過連接鍵對結(jié)果DataFrame排序。默認(rèn)為True,設(shè)置為False時(shí)將在很多情況下顯著提高性能?!駍uffixes:用于為重疊列名添加字符串后綴元組。默認(rèn)添加(x,y)?!馽opy:始終從傳遞的DataFrame對象復(fù)制數(shù)據(jù)(默認(rèn)為True),即使不需要重建索引也是如此?!駃ndicator:將一列添加到名為_merge的輸出DataFrame,其中包含每行的來源信息。_merge是分類類型,對于其合并鍵僅出現(xiàn)在左側(cè)DataFrame中的觀測值,取值為left_only;對于合并鍵僅出現(xiàn)在右側(cè)DataFrame中的觀測值,取值為right_only;如果在兩者中都能找到觀測值的合并鍵,則為left_only。21Python相關(guān)方法2.merge函數(shù)使用示例(1)在列上合并。示例程序如下:22importnumpyasnpimportpandasaspddf1=pd.DataFrame({key:[b,b,a,c,a,a,b],data1:range(7)})df2=pd.DataFrame({key:[a,b,d],data2:range(3)})pd.merge(df1,df2)#缺省對齊共同的列,合并不同列,若沒有對應(yīng)對齊列的值,則丟掉df3=pd.merge(df1,df2,on=key)#指定用來連接的列,對應(yīng)SQL中的主鍵和外鍵連接df4=pd.merge(df1,df2,how=outer) #相當(dāng)于數(shù)據(jù)庫的SQL外連接,兩邊沒有對應(yīng)的主外鍵值時(shí)也合并,其他不存在的列值則為空df1df2內(nèi)連接結(jié)果df3外連接結(jié)果df4

Python相關(guān)方法(2)在索引上合并。示例程序如下:23left1=pd.DataFrame({key:[a,b,a,a,b,c],value:range(6)})right1=pd.DataFrame({group_val:[3.5,7]},index=[a,b])pd.merge(left1,right1,left_on=key,right_index=True)#一個df的列值與另一個df的索引值對齊合并left1right1連接合并結(jié)果

Python相關(guān)方法(二)join函數(shù)DataFrame對象的join函數(shù)也可以通過索引或者指定的列連接兩個DataFrame。1.join函數(shù)用法函數(shù)定義如下:DataFrame.join(other,on=None,how=left,lsuffix=,rsuffix=,sort=False)參數(shù)說明如下?!駉ther:可為DataFrame,或者帶有名字的Series,或者DataFrame的list。如果傳遞的是Series,那么其name屬性應(yīng)當(dāng)是一個集合,并且該集合將會作為結(jié)果DataFrame的列名。●on:連接的列,默認(rèn)使用索引連接?!駂ow:連接方式,默認(rèn)為左連接?!駆suffix:左DataFrame中重復(fù)列的后綴?!駌suffix:右DataFrame中重復(fù)列的后綴?!駍ort:按照字典順序在連接鍵上對結(jié)果排序。默認(rèn)為False,此時(shí)連接鍵的順序取決于連接類型(關(guān)鍵字)。24Python相關(guān)方法2.join函數(shù)使用示例示例程序如下:25left2=pd.DataFrame([[1.,2.],[3.,4.],[5.,6.]],index=[a,c,e],columns=[Ohio,Nevada])right2=pd.DataFrame([[7.,8.],[9.,10.],[11.,12.],[13,14]],index=[b,c,d,e],columns=[Missouri,Alabama])lr1=left2.join(right2,how=outer)#外連接lr2=left2.join(right2) #缺省時(shí)為左連接left2right2外連接結(jié)果lr1左連接結(jié)果lr2

Python相關(guān)方法(三)concat函數(shù)numpy庫提供的concatenate函數(shù)可用于多維數(shù)組的連接與合并,pandas的concat函數(shù)可以沿著指定的軸將多個DataFrame或者Series拼接到一起,缺省情況下是基于行合并記錄,這與常用的pd.merge函數(shù)不同,pd.merge函數(shù)只能實(shí)現(xiàn)兩個表的拼接。1.pandas的concat函數(shù)的用法pd.concat(objs:Union[Iterable[ForwardRef(NDFrame)],Mapping[Union[Hashable,NoneType],ForwardRef(NDFrame)]],axis=0,join=outer,ignore_index:bool=False,keys=None,levels=None,names=None,verify_integrity:bool=False,sort:bool=False,copy:bool=True)其中部分參數(shù)說明如下:●objs:Series,DataFrame或者panel構(gòu)成的序列l(wèi)ist。●axis:需要合并連接的軸,0表示行,1表示列。●join:連接方式,inner或者outer。26Python相關(guān)方法2.concat函數(shù)使用示例示例程序如下:27s1=pd.Series([0,1],index=[a,b])s2=pd.Series([2,3,4],index=[c,d,e])s3=pd.Series([5,6],index=[f,g])#pandas的concat函數(shù),缺省情況下是基于行合并記錄s4=pd.concat([s1,s2,s3])#指定axis=1,基于列進(jìn)行合并,無對應(yīng)的列則設(shè)置為空值s5=pd.concat([s1,s2,s3],axis=1)print(s1,s2,s3,s4,s5)s1,s2,s3值基于行的合并結(jié)果s4基于列的合并結(jié)果s5

數(shù)據(jù)變換2024/5/1128數(shù)據(jù)變換Transformation數(shù)據(jù)變換是指將數(shù)據(jù)轉(zhuǎn)換或統(tǒng)一成適合于機(jī)器學(xué)習(xí)的形式。就像人類學(xué)習(xí)一樣,需要將采集的外部數(shù)據(jù)轉(zhuǎn)換成我們可以接收的形式。由于實(shí)際過程中采集的各種數(shù)據(jù),形式多種多樣,格式也不一致,這些都需要采用一定的數(shù)據(jù)預(yù)處理,使得他們符合機(jī)器學(xué)習(xí)的算法使用。數(shù)據(jù)變換常用方法如下:使用簡單的數(shù)學(xué)函數(shù)對數(shù)據(jù)進(jìn)行變換:如果數(shù)據(jù)較大,可以取對數(shù)或開方將數(shù)據(jù)壓縮變?。蝗鐢?shù)據(jù)較小可使用平方擴(kuò)大數(shù)據(jù);在時(shí)間序列分析中,常使用對數(shù)變換或差分運(yùn)算將非平穩(wěn)序列轉(zhuǎn)換為平穩(wěn)序列29數(shù)據(jù)變換Transformation2.數(shù)據(jù)歸一化(normalization),又稱標(biāo)準(zhǔn)化或規(guī)范化歸一化用于消除數(shù)據(jù)之間的量綱影響。不同的數(shù)據(jù)值可能差別很大,甚至具有不同的量綱,如果進(jìn)行調(diào)整很可能影響數(shù)據(jù)分析結(jié)果,因此需要將數(shù)據(jù)落入到一個有限的范圍。數(shù)據(jù)的標(biāo)準(zhǔn)化或規(guī)范化就是將數(shù)據(jù)按比例縮放,使之落入一個小的特定區(qū)間。在某些比較和評價(jià)的指標(biāo)處理中經(jīng)常會用到,去除數(shù)據(jù)的單位限制,將其轉(zhuǎn)化為無量綱的純數(shù)值,便于不同單位或量級的指標(biāo)能夠進(jìn)行比較和加權(quán)。其中最典型的就是數(shù)據(jù)的歸一化處理,即將數(shù)據(jù)統(tǒng)一映射到[0,1]區(qū)間上。(1)把數(shù)變?yōu)椋?,1)之間的小數(shù)主要是為了數(shù)據(jù)處理方便提出來的,把數(shù)據(jù)映射到0~1范圍之內(nèi)處理,更加便捷快速,應(yīng)該歸到數(shù)字信號處理范疇之內(nèi)。(2)把有量綱表達(dá)式變?yōu)闊o量綱表達(dá)式歸一化是一種簡化計(jì)算的方式,即將有量綱的表達(dá)式,經(jīng)過變換,化為無量綱的表達(dá)式,成為純量,解決數(shù)據(jù)的可比性。30數(shù)據(jù)變換Transformation**.數(shù)據(jù)標(biāo)準(zhǔn)化、中心化等概念標(biāo)準(zhǔn)化(Standardization):在機(jī)器學(xué)習(xí)中,可能要處理不同種類的資料,例如,?訊和圖?上的像素值,這些資料可能是?維度的,資料標(biāo)準(zhǔn)化后會使每個特征中的數(shù)值平均變?yōu)?、標(biāo)準(zhǔn)差變?yōu)?,不改變數(shù)據(jù)的原始分布。該方法被?泛?于機(jī)器學(xué)習(xí)算法中(如:?持向量機(jī)、邏輯回歸和類神經(jīng)?絡(luò))。Z-Score是?個經(jīng)常被?于數(shù)據(jù)標(biāo)準(zhǔn)化的?法。公式如(Z-score規(guī)范化)::s為標(biāo)準(zhǔn)差中心化(Centralization):每個元素與均值相減,平均值為0,對標(biāo)準(zhǔn)差?要求。正態(tài)化:改變數(shù)據(jù)的原始分布,使其服從正態(tài)分布。通常采?的?法有取對數(shù),開平?根,取倒數(shù),開平?,取指數(shù)等等,使得不對稱分布的數(shù)據(jù)(偏態(tài)數(shù)據(jù))呈現(xiàn)(或近似)正態(tài)分布。要這么做的原因在于:有些機(jī)器學(xué)習(xí)?法,?如線性回歸模型就默認(rèn)數(shù)據(jù)是正態(tài)分布。歸?化、標(biāo)準(zhǔn)化的區(qū)別:歸?化是將樣本的特征值轉(zhuǎn)換到同?量綱下把數(shù)據(jù)映射到[0,1]或者[-1,1]區(qū)間內(nèi),僅由變量的極值決定,因區(qū)間放縮法是歸?化的?種。標(biāo)準(zhǔn)化是依照特征矩陣的列處理數(shù)據(jù),其通過求z-score的?法,轉(zhuǎn)換為標(biāo)準(zhǔn)正態(tài)分布,和整體樣本分布相關(guān),每個樣本點(diǎn)都能對標(biāo)準(zhǔn)化產(chǎn)?影響。它們的相同點(diǎn)在于都能取消由于量綱不同引起的誤差;都是?種線性變換,都是對向量X按照?例壓縮再進(jìn)?平移。標(biāo)準(zhǔn)化和中?化的區(qū)別:標(biāo)準(zhǔn)化是原始分?jǐn)?shù)減去平均數(shù)然后除以標(biāo)準(zhǔn)差,中?化是原始分?jǐn)?shù)減去平均數(shù)。所以?般流程為先中?化再標(biāo)準(zhǔn)化31數(shù)據(jù)變換Transformation數(shù)據(jù)歸一化的好處(1)提升模型的收斂速度如圖,x1和x2的取值范圍差別很大,對其進(jìn)行優(yōu)化時(shí),會得到一個窄長的橢圓形,導(dǎo)致在梯度下降時(shí),梯度的方向?yàn)榇怪钡雀呔€的方向而走之字形路線,這樣會使迭代很慢,相比之下,右圖的迭代就會很快(理解:也就是步長走多走少方向總是對的,不會走偏)(2)提升模型的精度涉及到一些距離計(jì)算的算法時(shí)效果顯著,比如算法要計(jì)算歐氏距離,圖中x2的取值范圍比較小,涉及到距離計(jì)算時(shí)其對結(jié)果的影響遠(yuǎn)比x1帶來的小,所以這就會造成精度的損失。所以歸一化很有必要,他可以讓各個特征對結(jié)果做出的貢獻(xiàn)相同。例子:圖像識別建立深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò),培訓(xùn)數(shù)據(jù)之前將圖像數(shù)組數(shù)據(jù)統(tǒng)一除以25532數(shù)據(jù)變換Transformation常見的數(shù)據(jù)歸一化方法(1)最小-最大歸一化min-max標(biāo)準(zhǔn)化(Min-maxnormalization)/0-1標(biāo)準(zhǔn)化(0-1normalization),也叫離差標(biāo)準(zhǔn)化,是對原始數(shù)據(jù)的線性變換,使結(jié)果落到[0,1]區(qū)間。缺點(diǎn)是有新數(shù)據(jù)加入時(shí)可能導(dǎo)致最小最大值變化,需要重新定義。轉(zhuǎn)換函數(shù)如下:(2)Z-score標(biāo)準(zhǔn)化方法也稱為零-均值規(guī)范化方法,或標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化,這種方法給予原始數(shù)據(jù)的均值(mean)和標(biāo)準(zhǔn)差(standarddeviation)進(jìn)行數(shù)據(jù)的標(biāo)準(zhǔn)化。經(jīng)過處理的數(shù)據(jù)符合標(biāo)準(zhǔn)正態(tài)分布,即均值為0,標(biāo)準(zhǔn)差為1,其轉(zhuǎn)化函數(shù)為:x?=(x?μ)/σ。其中μ為全體樣本數(shù)據(jù)的均值,σ標(biāo)準(zhǔn)差。該方法要求樣本分布近似為高斯分布,否則歸一化效果會變得糟糕。z-score標(biāo)準(zhǔn)化方法適用于屬性A的最大值和最小值未知的情況,或有超出取值范圍的離群數(shù)據(jù)的情況。(3)小數(shù)定標(biāo)規(guī)范化標(biāo)準(zhǔn)化方法通過移動數(shù)據(jù)的小數(shù)點(diǎn)位置來進(jìn)行標(biāo)準(zhǔn)化。小數(shù)點(diǎn)移動多少位取決于屬性A的取值中的最大絕對值。轉(zhuǎn)換公式為:x'=x/(10^j)33數(shù)據(jù)變換Transformation常見的數(shù)據(jù)歸一化方法(4)其他歸一化方法log函數(shù)轉(zhuǎn)換:通過以10為底的log函數(shù)轉(zhuǎn)換的方法實(shí)現(xiàn)歸一下。atan函數(shù)轉(zhuǎn)換:用反正切函數(shù)也可以實(shí)現(xiàn)數(shù)據(jù)的歸一化。Python機(jī)器學(xué)習(xí)模塊的數(shù)據(jù)預(yù)處理方法,請參考:/pipisorry/article/details/52247679fromsklearnimportpreprocessing34數(shù)據(jù)變換Transformation3.連續(xù)屬性離散化數(shù)據(jù)離散化本質(zhì)上是將連續(xù)的屬性空間劃分為若干個區(qū)間,最后用不同的符號或整數(shù)值代表某個子區(qū)間中的數(shù)據(jù)。離散化涉及兩個子任務(wù):確定分類及將連續(xù)屬性值映射到這些分類值。常用離散化方法有:(1)等寬法:根據(jù)需要指定將數(shù)據(jù)劃分為具有相同寬度的區(qū)間,區(qū)間數(shù)據(jù)事先制定,然后將數(shù)據(jù)按照其值分配到不同區(qū)間中,每個區(qū)間用一個數(shù)據(jù)值表示。參考分箱法。(2)等頻法:把數(shù)據(jù)分為若干個區(qū)間,每個區(qū)間的數(shù)據(jù)個數(shù)是相等的。參考等深分箱法。(3)基于聚類分析的方法:典型方法是K-means算法,即首先從數(shù)據(jù)集中隨機(jī)選出K個數(shù)據(jù)作為K個聚類的中心;其次根據(jù)其他數(shù)據(jù)想對這些中心的距離(歐式、曼哈頓距離等),對所有的對象聚類,如果數(shù)據(jù)x距某個中心最近,則將x劃歸到該中心所代表的的聚類;最后重新計(jì)算區(qū)間的中心,并利用新的中心重新聚類所有樣本。(4)其他方法:如基于熵的離散化方法,小波變換的特征提取方法,自上而下的卡方分裂算法等。具體選擇哪種預(yù)處理方法更合適,需要了解方法本身優(yōu)缺點(diǎn)、適應(yīng)范圍及實(shí)驗(yàn)驗(yàn)證確定。35Python相關(guān)方法numpy和pandas對數(shù)據(jù)變換提供了相應(yīng)的函數(shù)方法,sklearn庫中的preprocessing子模塊也提供了豐富的數(shù)據(jù)預(yù)處理方法。1.pandas歸一化方法示例示例程序如下:36#數(shù)據(jù)歸一化importpandasaspdimportnumpyasnpdatafile=./ori_data.xlsxdata=pd.read_excel(datafile,header=None)print(data)min=(data-data.min())/(data.max()-data.min())#最小-最大歸一化方法zero=(data-data.mean())/data.std() #z-score歸一化方法float=data/10**np.ceil(np.log10(data.abs().max())) #lg函數(shù)轉(zhuǎn)換方法print(min)print(zero)print(float)Python相關(guān)方法2.pandas處理離散化與分箱示例示例程序如下:37#離散化與分箱ages=[20,22,25,27,21,23,37,31,61,45,41,32]bins=[18,25,35,60,100]#設(shè)定分箱區(qū)間cats=pd.cut(ages,bins) #根據(jù)分箱區(qū)間規(guī)則劃分離散值,缺省時(shí)包括右邊界,即左開右閉print(cats)#注意,離散化后的對象包含codes和categories屬性data=np.random.randn(1000) #正態(tài)分布cats=pd.qcut(data,4) #四分位切割,缺省時(shí)是0,0.25,0.5,0.75,1pd.value_counts(cats)Python相關(guān)方法3.sklearn模塊中的預(yù)處理方法示例38fromsklearnimportpreprocessing"""函數(shù)形式:defscale(X,axis=0,with_mean=True,with_std=True,copy=True)公式為:(X-X_mean)/X_std。z-score歸一化方法,計(jì)算時(shí)對每個屬性(每列)分別歸一化"""importnumpyasnpX=np.array([[1.,-1.,2.],[2.,0.,0.],[0.,1.,-1.]])X_scaled=preprocessing.scale(X)#使用StandardScaler函數(shù)將歸一化應(yīng)用在測試集上:保存歸一化參數(shù)#一般歸一化先在訓(xùn)練集上進(jìn)行,在測試集上也應(yīng)該做相同均值和標(biāo)準(zhǔn)差的歸一化scaler=preprocessing.StandardScaler().fit(X)print("scaler:",scaler)print("scaler.mean_:",scaler.mean_)print("scaler.scale_:",scaler.scale_)print("X:",X)#標(biāo)準(zhǔn)化后的scaler實(shí)例能夠應(yīng)用到新的數(shù)據(jù)集上,以保持訓(xùn)練集和測試集的歸一化方法一致print(scaler.transform(X))Python相關(guān)方法4.生成啞變量方法示例示例程序如下:39#虛擬變量(dummyvariables,又稱啞變量)處理方法df=pd.DataFrame({key:[b,b,a,c,a,b],data1:range(6)})print(df)#應(yīng)用情景之一:問卷調(diào)研題項(xiàng),讓用戶選擇類別選項(xiàng),如性別、學(xué)歷等#get_dummies函數(shù)將指定列的取值類別在列一級展開,并設(shè)置對應(yīng)行上的實(shí)際取值(對應(yīng)類別的列取值為1,其他為0)pd.get_dummies(df[key])#若sparse為True,則生成的列受稀疏矩陣類(運(yùn)算效率更高,在檢索和存儲方面都有優(yōu)化)支持,否則是普通多維數(shù)組,顯示結(jié)果沒差別pd.get_dummies(df[key],sparse=True)聚合與分組統(tǒng)計(jì)2024/5/1140分組數(shù)據(jù)分析之前,經(jīng)常需要按照一定的類別進(jìn)行分組統(tǒng)計(jì),然后對分組統(tǒng)計(jì)后的結(jié)果進(jìn)行數(shù)據(jù)分析,以發(fā)現(xiàn)群體之間的特征、差異和影響。pandas模塊提供了大量的分組和聚合函數(shù),可用于分組與聚合運(yùn)算。一、分組1.分組groupby機(jī)制pandas提供了分組函數(shù)groupby,可根據(jù)DataFrame對象的某些軸先進(jìn)行分組以形成分組對象,然后調(diào)用其聚合函數(shù)進(jìn)行分組統(tǒng)計(jì)。(1)準(zhǔn)備與設(shè)置參數(shù)。示例程序如下:41#準(zhǔn)備與設(shè)置參數(shù)importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltpd.options.display.max_rows=20分組(2)構(gòu)造數(shù)據(jù)分組。示例程序如下:42#生成DataFramedf=pd.DataFrame({key1:[a,a,b,b,a],key2:[one,two,one,two,one],data1:np.random.randn(5),data2:np.random.randn(5)})#groupby分組函數(shù),注意,沒有聚類運(yùn)算函數(shù),只是先分組grouped=df[data1].groupby(df[key1])grouped.head()分組(3)針對一列進(jìn)行分組聚合統(tǒng)計(jì)。示例程序如下:43#分組后對象的聚類函數(shù)針對groupby的分組對象進(jìn)行操作grouped.mean()分組(4)針對多列進(jìn)行分組聚合統(tǒng)計(jì)。示例程序如下:44#分組+聚合運(yùn)算的簡短形式類似關(guān)系型數(shù)據(jù)庫的SQL,可以有多個分組屬性means=df[data1].groupby([df[key1],df[key2]]).mean()meansmeans.unstack()分組groupby函數(shù)的參數(shù)還可以是列名或列名列表。示例程序如下:45df.groupby([key1,key2]).mean()分組2.對分組進(jìn)行迭代遍歷操作DataFrame分組后的對象不再是DataFrame對象,分組后對象的第一項(xiàng)是分組的組合元組,第二項(xiàng)是具體分組的元素,如果進(jìn)行迭代遍歷,需要注意其數(shù)據(jù)結(jié)構(gòu)。示例程序如下:46forname,groupindf.groupby(key1):print("name:",name)print("group:",group)分組3.利用字典和序列分組(1)構(gòu)造數(shù)據(jù)。示例程序如下:47people=pd.DataFrame(np.random.randn(5,5),columns=[a,b,c,d,e],index=[張三,李四,趙錢,孫李,王順])people.iloc[2:3,[1,2]]=np.nan#添加新的空值people分組(2)按映射方式分組。示例程序如下:48#映射方式統(tǒng)計(jì)相當(dāng)于按照映射后的對應(yīng)值重新分組,axis=1表示對每個索引分組逐列計(jì)算數(shù)值,求和的空值忽略#如張三的"blue"分組值=原來"c"列和"d"列的和,"red"分組值=原來"a"列、"b"列和"e"列的和mapping={a:red,b:red,c:blue,d:blue,e:red,f:orange}by_column=people.groupby(mapping,axis=1)by_column.sum()by_column=people.groupby(mapping,axis=1)by_column.sum()分組(3)按Series方式分組。示例程序如下49map_series=pd.Series(mapping)print(map_series)#Series也可以作為映射進(jìn)行分組,根據(jù)(索引∶值)的映射進(jìn)行分組people.groupby(map_series,axis=1).count()分組4.利用函數(shù)分組示例程序如下:50#注意函數(shù)的作用對象是誰,該例對索引計(jì)算,然后根據(jù)函數(shù)結(jié)果進(jìn)行分組聚合運(yùn)算people.groupby(len).sum()分組5.在索引水平上分組示例程序如下:51#注意多重索引的列和名稱的對應(yīng),類似于Excel中的分組數(shù)據(jù)透視表columns=pd.MultiIndex.from_arrays([[中國,中國,中國,芬蘭,芬蘭],[1,3,5,1,3]],names=[country,tenor])hier_df=pd.DataFrame(np.random.randn(4,5),columns=columns)hier_df分組示例程序如下:52#多重索引的分組需要指定所在索引的層級hier_df.groupby(level=tenor,axis=1).count()分組聚合運(yùn)算在DataFrame的分組對象上,可以采用多種函數(shù)進(jìn)行運(yùn)算,如用于發(fā)現(xiàn)異常值的四分位運(yùn)算、匯總求和、均值計(jì)算等。1.數(shù)據(jù)聚合以統(tǒng)計(jì)學(xué)上的分位數(shù)函數(shù)quantile(p)為例。原則上,p可以取0~1之間的任意值。當(dāng)p=0.25、0.5、0.75時(shí),即計(jì)算四分位數(shù)。為了更一般化,在計(jì)算的過程中考慮p分位。首先,確定p分位數(shù)的位置:pos=1+(n-1)×p;根據(jù)pos的數(shù)值,確定它處于哪兩個整數(shù)(即i和j,索引下標(biāo)從1開始)之間。然后,計(jì)算p分位數(shù)的值:ret=value[i]+(value[j]-value[i])×(pos的小數(shù)部分)。例如,計(jì)算對key1分組后a對應(yīng)的分位數(shù)值:pos=1+(3-1)×0.9=2.8,確定i=2并且j=3,小數(shù)部分是0.8;ret=0.478943+(1.965781-0.478943)×0.8=1.6684134。示例程序如下:53分組聚合運(yùn)算54grouped=df.groupby(key1)grouped[data1].quantile(0.9)分組聚合運(yùn)算2.聚合函數(shù)agg分組對象提供了聚合函數(shù)agg,可以指定要使用的運(yùn)算函數(shù)。(1)自定義聚合函數(shù)。示例程序如下:55#分組函數(shù)聚合defpeak_to_peak(arr):returnarr.max()-arr.min()grouped[["data1","data2"]].agg(peak_to_peak)#agg函數(shù)的參數(shù)還可以是內(nèi)置函數(shù),如mean、sum等分組聚合運(yùn)算(2)多重函數(shù)的應(yīng)用。示例程序如下:56tips=pd.read_csv(tips.csv)#增加新列"tip_pct",它由列tip和total_bill計(jì)算得到tips[tip_pct]=tips[tip]/tips[total_bill]print(tips[:6])#分組grouped=tips.groupby([day,smoker])#取分組對象的其中一列進(jìn)行聚合計(jì)算grouped_pct=grouped[tip_pct]#print(grouped_pct.describe())grouped_pct.agg(mean)分組聚合運(yùn)算對分組對象進(jìn)行多重函數(shù)聚合運(yùn)算,示例程序如下:57grouped_pct.agg([mean,std,peak_to_peak])分組聚合運(yùn)算3.應(yīng)用函數(shù)apply分組對象還提供了應(yīng)用函數(shù)apply,可以應(yīng)用自定義函數(shù)或內(nèi)置函數(shù)進(jìn)行分組運(yùn)算。示例程序如下:58#定義函數(shù),對DataFrame對象排序并返回部分片段deftop(df,n=5,column=tip_pct):returndf.sort_values(by=column)[-n:]#對分組對象應(yīng)用自定義函數(shù)#分組對象應(yīng)用函數(shù)apply可以帶函數(shù)自身的參數(shù),需注意參數(shù)形式tips.groupby([smoker,day]).apply(top,n=1,column=total_bill)數(shù)據(jù)歸約2024/5/1159數(shù)據(jù)歸約--Reduction數(shù)據(jù)歸約是指在盡可能保持?jǐn)?shù)據(jù)原貌的前提下,最大限度地精簡數(shù)據(jù)量。原數(shù)據(jù)可以用來得到數(shù)據(jù)da集的歸約表示,它接近于保持原數(shù)據(jù)的完整性,但數(shù)據(jù)量比原數(shù)據(jù)小得多,與非歸約數(shù)據(jù)相比,在歸約的數(shù)據(jù)上進(jìn)行挖掘,所需的時(shí)間和內(nèi)存資源更少,挖掘?qū)⒏行?,并產(chǎn)生相同或幾乎相同的分析結(jié)果。數(shù)據(jù)歸約常用方法如下:維歸約:也稱為特征規(guī)約,也叫數(shù)據(jù)降維,指通過減少屬性特征的方式壓縮數(shù)據(jù)量,通過移除不相關(guān)的屬性,可以提高模型效率。對應(yīng)方法包括:AIC準(zhǔn)則可以通過選擇最優(yōu)模型來選擇屬性;LASSO通過一定約束條件選擇變量;分類樹、隨機(jī)森林通過對分類效果的影響大小篩選屬性;小波變換(wavelettransform,WT)、主成分分析(PCA)通過把數(shù)據(jù)變換或投影到較小的空間來降低維數(shù)。數(shù)值歸約:也稱為樣本歸約,指從數(shù)據(jù)集中選出一個有代表性的樣本的子集,常用隨機(jī)不重復(fù)的抽樣方法。60數(shù)據(jù)歸約—數(shù)據(jù)降維數(shù)據(jù)降維方法分類:根據(jù)數(shù)據(jù)的特性分類:線性降維:主成分分析(PrincipalComponentAnalysis,PCA),線性判別分析(LinearDiscriminantAnalysis,LDA)等非線性降維:核方法(核主成分分析KPCA、KFDA,即核+線性),二維化和張量化(如二維主成分分析、二維線性判別分析、二維典型相關(guān)分析,即二維+線性),流形學(xué)習(xí)(如ISOMap等距映射,LE拉普拉斯特征映射,LLE局部線性嵌入,LPP局部保留投影等根據(jù)是否考慮和利用數(shù)據(jù)的監(jiān)督信息分類:無監(jiān)督降維:主成分分析PCA等有監(jiān)督降維:線性判別分析LDA等半監(jiān)督降維:半監(jiān)督概率PCA,半監(jiān)督判別分析SDA等

。61數(shù)據(jù)歸約—數(shù)據(jù)降維62數(shù)據(jù)歸約—圖像壓縮63數(shù)據(jù)降維與圖像壓縮:圖像壓縮是數(shù)據(jù)壓縮技術(shù)在數(shù)字圖像上的應(yīng)用,目的是減少圖像數(shù)據(jù)中的冗余信息,從而用更加高效的格式存儲和傳輸數(shù)據(jù)。數(shù)據(jù)降維的思想也可應(yīng)用到圖像壓縮上,圖像數(shù)據(jù)之所以能被壓縮,就是因?yàn)閿?shù)據(jù)中存在冗余。圖像數(shù)據(jù)的冗余主要體現(xiàn)在以下方面:圖像中相鄰像素之間的相關(guān)性引起的空間冗余圖像序列中不同幀之間存在相關(guān)性引起的時(shí)間冗余不同彩色平面或頻譜帶的相關(guān)性引起的頻譜冗余。數(shù)據(jù)壓縮目的消除數(shù)據(jù)冗余,減少表示數(shù)據(jù)所需的比特?cái)?shù),提高存儲、傳輸和處理時(shí)的效率

。數(shù)據(jù)歸約—因子分析法64管理學(xué)和經(jīng)濟(jì)學(xué)中,類似數(shù)據(jù)降維的方法有時(shí)稱為因子分析法(FactorAnalysisMethod)。概念解釋:因子分析是指研究從變量群中提取共性因子的統(tǒng)計(jì)技術(shù),最早由英國心理學(xué)家C.E.斯皮爾曼提出。因子分析法是指從研究指標(biāo)相關(guān)矩陣內(nèi)部的依賴關(guān)系出發(fā),把一些信息重疊、具有錯綜復(fù)雜關(guān)系的變量歸結(jié)為少數(shù)幾個不相關(guān)的綜合因子的一種多元統(tǒng)計(jì)分析方法?;舅枷胧牵焊鶕?jù)相關(guān)性大小把變量分組,使得同組內(nèi)的變量之間相關(guān)性較高,但不同組的變量不相關(guān)或相關(guān)性較低,每組變量代表一個基本結(jié)構(gòu)一即公共因子。概念:隱性變量(latentvariable,latentfactor,又譯為潛變量):因子分析的主要目的是用來描述隱藏在一組測量到的變量中的一些更基本的,但又無法直接測量到的隱性變量(latentvariable,latentfactor)。比如,如果要測量學(xué)生的學(xué)習(xí)積極性,課堂中的積極參與、作業(yè)完成情況及課外閱讀時(shí)間可以用來反應(yīng)積極性。而學(xué)習(xí)成績可以用期中、期末成績來反映。學(xué)習(xí)積極性與學(xué)習(xí)成績是無法直接用一個測度測準(zhǔn),它們必須用一組測度方法來測量,然后把測量結(jié)果結(jié)合起來,才能更準(zhǔn)確地把握。因子分析法的分類:一類是探索性因子分析法,另一類是驗(yàn)證性因子分析。探索性因子分析不事先假定因子與測度項(xiàng)之間的關(guān)系,而讓數(shù)據(jù)“自己說話”。主成分分析和共因子分析是其中的典型方法。驗(yàn)證性因子分析假定因子與測度項(xiàng)的關(guān)系是部分知道的,即哪個測度項(xiàng)對應(yīng)于哪個因子,雖然我們尚且不知道具體的系數(shù)。65數(shù)據(jù)歸約—因子分析法因子分析法相關(guān)技術(shù)結(jié)構(gòu)方程模型SEM偏最小二乘法PLS主成分分析PCA等應(yīng)用因子分析法的主要步驟:(1)對數(shù)據(jù)樣本進(jìn)行標(biāo)準(zhǔn)化處理。(2)計(jì)算樣本的相關(guān)矩陣R。(3)求相關(guān)矩陣R的特征根和特征向量。(4)根據(jù)系統(tǒng)要求的累積貢獻(xiàn)率確定主因子的個數(shù)。(5)計(jì)算因子載荷矩陣A。(6)確定因子模型。(7)根據(jù)上述計(jì)算結(jié)果,對系統(tǒng)進(jìn)行分析。66數(shù)據(jù)歸約—因子分析法1.主成分分析(PCA)PCA(PrincipalComponentAnalysis)是通過對原始變量的相關(guān)矩陣或協(xié)方差矩陣內(nèi)部結(jié)構(gòu)的研究,將多個變量轉(zhuǎn)換為少數(shù)幾個綜合變量即主成分,從而達(dá)到降維目的的一種線性降維方法。這些主成分能夠反映原始變量的絕大部分信息,它們通常表示為原始變量的線性組合。PCA將數(shù)據(jù)方差作為對信息衡量的準(zhǔn)則:方差越大,它所能包含的信息就越多,反之包含的信息就越少。因此,PCA可以看成一個坐標(biāo)變換(K-L變換,即Karhunen-LoeveTransform,是建立在統(tǒng)計(jì)特性基礎(chǔ)上的一種變換,也稱為霍特林Hotelling變換,將離散信號變換成一串不相關(guān)系數(shù)的方法。K-L變換的突出優(yōu)點(diǎn)是去相關(guān)性好,是均方誤差意義下的最佳變換,它在數(shù)據(jù)壓縮技術(shù)中占有重要地位)的過程:將高維數(shù)據(jù)的坐標(biāo)投影到數(shù)據(jù)方差最大的方向組成的新坐標(biāo)系中。PCA具有容易計(jì)算,解釋性強(qiáng)等特點(diǎn),但也存在不適用非線性結(jié)構(gòu)高維數(shù)據(jù)、不適用非高斯分布數(shù)據(jù)以及主分量的個數(shù)難以確定等缺點(diǎn)算法步驟大致為:67數(shù)據(jù)歸約—數(shù)據(jù)降維基本方法PCA應(yīng)用示例:人臉識別的數(shù)據(jù)降維因在特征提取和數(shù)據(jù)降維方面的優(yōu)越性,PCA近年來被廣泛應(yīng)用于特征提取、信號評測和信號探測等方面,其中人臉識別是PCA的一個經(jīng)典的應(yīng)用領(lǐng)域:利用K-L變換抽取人臉的主要成分,構(gòu)成特征臉空間,識別時(shí)將測試圖像投影到此空間,得到一組投影系數(shù),通過與各個人臉圖像比較進(jìn)行識別。利用特征臉法進(jìn)行人臉識別的數(shù)據(jù)降維部分具體步驟如圖。結(jié)果是提取了面部最重要的部分,將p后面的維數(shù)省去,從而達(dá)到降維的效果,同時(shí)保持了99%以上的原有的數(shù)據(jù)信息,接著就可以很方便的進(jìn)行人臉的識別匹對了。68數(shù)據(jù)歸約—數(shù)據(jù)降維基本方法2.奇異值分解(SingularValueDecomposition,SVD)PCA是通過特征值分解來進(jìn)行特征提取的,但要求矩陣必須是方陣,但在實(shí)際應(yīng)用場景中,經(jīng)常遇到的矩陣不是方陣,而且基于PCA算法在處理大數(shù)據(jù)集時(shí)內(nèi)存處理效率較低。奇異值分解是矩陣分解的一種方法,即將原始矩陣表示成兩個或多個矩陣乘積的形式,使得易于處理(類比代數(shù)因子分解)。69實(shí)際上Sklearn的PCA就是用SVD進(jìn)行求解的,原因有:當(dāng)樣本維度很高時(shí),協(xié)方差矩陣計(jì)算太慢;方陣特征值分解計(jì)算效率不高;SVD除了特征值分解這種求解方式外,還有更高效更準(zhǔn)確的迭代求解方式,避免了ATA

的計(jì)算。SVD缺點(diǎn):對于較大數(shù)據(jù)集,每次推薦都做SVD很耗資源,因此SVD一般在調(diào)入數(shù)據(jù)時(shí)運(yùn)行一次.數(shù)據(jù)歸約—數(shù)據(jù)降維基本方法6、Python的主要數(shù)據(jù)預(yù)處理函數(shù)Pandas與Numpy在Pandas庫有兩個最基本的數(shù)據(jù)類型,分別是Series和DataFrame。其中Series數(shù)據(jù)類型表示一維數(shù)組,與Numpy中的一維array類似,并且二者與Python基本的數(shù)據(jù)結(jié)構(gòu)List也很相近。而DataFrame數(shù)據(jù)類型則代表二維的表格型數(shù)據(jù)結(jié)構(gòu),也可以將DataFrame理解為Series的容器。Pandas使用一維的數(shù)據(jù)結(jié)構(gòu)Series和二維的數(shù)據(jù)結(jié)構(gòu)DataFrame來表示數(shù)據(jù),因此還可以高效繪圖。數(shù)據(jù)缺失處理函數(shù)方面,Pandas使用浮點(diǎn)值NaN表示浮點(diǎn)和非浮點(diǎn)數(shù)組中的確實(shí)數(shù)據(jù),Python內(nèi)置的None值也會被當(dāng)做NA處理2.sklearn與scipy模塊sklearn與scipy模塊也提供了豐富的數(shù)據(jù)預(yù)處理方法,特別是sklearn中的preprocessing子模塊。1)主成分分析方面:可使用sklearn模塊,與PCA有關(guān)的類都在sklearn.decomposition包中。fromsklearn.decompositionimportPCA2)奇異值分解方面:可選模塊有numpy和scipy,使用方法類似。fromscipy.linalgimportsvd;fromnumpy.linalgimportsvd70Python的主要數(shù)據(jù)預(yù)處理函數(shù)Pandas數(shù)據(jù)預(yù)處理常用函數(shù)方法名稱方法描述cleaned清除所有缺失值dropna根據(jù)條件過濾缺失值isnull返回一個布爾值,標(biāo)明哪些是缺失值fillna填充缺失值數(shù)據(jù)notnullisnull的否定式Python的主要數(shù)據(jù)預(yù)處理函數(shù)—數(shù)據(jù)過濾和刪除#探索缺失值frompandasimportSeries,DataFramefromnumpyimportnanasNAdata=Series([12,None,34,NA,68])print(data)print(data.isnull())72#dropna過濾刪除frompandasimportSeries,DataFramefromnumpyimportnanasNAimportnumpyasnpdata=Series([12,None,34,NA,68])print(data.dropna())data=DataFrame(np.random.randn(5,4))data.iloc[:2,1]=NA;data.iloc[:3,2]=NAdata.iloc[0,0]=NAprint(data)print(data.dropna(axis=1))print(data.dropna(thresh=2))Python的主要數(shù)據(jù)預(yù)處理函數(shù)—數(shù)據(jù)填充#fillna數(shù)據(jù)填充frompandasimportSeries,DataFramefromnumpyimportnanasNAimportnumpyasnpdata=DataFrame(np.random.randn(5,4))data.iloc[:2,1]=NAdata.iloc[:3,2]=NAprint(data)##print(data.fillna(0))print(data.fillna({1:11,2:22}))print(data.fillna({1:data[1].mean(),2:data[2].mean()}))73#拉格朗日插值法frompandasimport*fromerpolateimportlagrangeimportnumpyasnpdf=DataFrame(np.random.randn(20,2),columns=['first','second'])df['first'][(df['first']<-1.5)|(df['first']>1.5)]=Nonedefployinterp_column(s,n,k=5):#插值函數(shù)

y=s[list(range(n-k,n))+list(range(n+1,n+1+k))]#取值

y=y[y.notnull()]#剔除空值

returnlagrange(y.index,list(y))(n)#插值并返回插值結(jié)果foriindf.columns:forjinrange(len(df)):if(df[i].isnull())[j]:df[i][j]=ployinterp_column(df[i],j)print(df)Python的主要數(shù)據(jù)預(yù)處理函數(shù)—檢測和過濾異常值#檢測和過濾異常值frompandasimport*importnumpyasnpdata=DataFrame(np.random.randn(10,4))print(data)print(data.desc

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論