dataframe数据标准化处理_数据预处理——标准化/归一化(实例)
這次我們來說說關(guān)于數(shù)據(jù)預(yù)處理中的數(shù)據(jù)標(biāo)準(zhǔn)化及歸一化的問題。主要以理論+實(shí)例的方式為大家展示。
本次實(shí)驗(yàn)也將會(huì)展示部分?jǐn)?shù)據(jù)以及代碼,有興趣的小伙伴可以自己動(dòng)手試試~
在本次實(shí)例過程中,我們使用的數(shù)據(jù)是:2010-2018年間廣州市經(jīng)濟(jì)與環(huán)境的時(shí)間序列資料,數(shù)據(jù)來源為《廣州市統(tǒng)計(jì)年鑒》及《國民經(jīng)濟(jì)和社會(huì)發(fā)展統(tǒng)計(jì)公報(bào)》,感興趣的同學(xué)也可利用其它數(shù)據(jù)進(jìn)行實(shí)例操作。(本次實(shí)驗(yàn)的Excel數(shù)據(jù)附在文后)
一、歸一化(Normalization)
描述:
將數(shù)據(jù)映射到指定的范圍,如:把數(shù)據(jù)映射到0~1或-1~1的范圍之內(nèi)處理。
作用:1、數(shù)據(jù)映射到指定的范圍內(nèi)進(jìn)行處理,更加便捷快速。
2、把有量綱表達(dá)式變成無量綱表達(dá)式,便于不同單位或量級(jí)的指標(biāo)能夠進(jìn)行比較和加權(quán)。經(jīng)過歸一化后,將有量綱的數(shù)據(jù)集變成純量,還可以達(dá)到簡化計(jì)算的作用。
常見做法:Min-Max歸一化
python實(shí)現(xiàn):
(1)導(dǎo)入數(shù)據(jù)并刪除我們不要的列:
import numpy as np
import pandas as pd
df=pd.read_excel('C://Users/Administrator/Desktop/data_py.xlsx',sheet_name='廣州',encoding='utf-8')
df.drop(columns="時(shí)間",axis=1,inplace=True)
df.set_index([[2010,2011,2012,2013,2014,2015,2016,2017,2018]],inplace=True)
df.drop(columns=['第二產(chǎn)業(yè)產(chǎn)值占比','第三產(chǎn)業(yè)產(chǎn)值占比','一般工業(yè)固體廢物綜合利用率'],axis=1,inplace=True)
(2)查看數(shù)據(jù):
可以看到,數(shù)據(jù)前三列特征的數(shù)量級(jí)明顯大于后面的特征很多,如果這個(gè)時(shí)候我們想要利用這個(gè)數(shù)據(jù)表來衡量廣州市的發(fā)展情況時(shí),地區(qū)生產(chǎn)總值、公共財(cái)政收入、人均生產(chǎn)總值這三項(xiàng)特征就會(huì)起到主導(dǎo)作用從而遮蓋住其他的特征,這樣的模型效果是很差的,因此我們可以通過歸一化來解決這個(gè)問題。
(3)Min-Max歸一化:
for i in list(df.columns):
# 獲取各個(gè)指標(biāo)的最大值和最小值
Max = np.max(df[i])
Min = np.min(df[i])
df[i] = (df[i] - Min)/(Max - Min)
(4)查看歸一化結(jié)果:
二、標(biāo)準(zhǔn)化(Normalization)
注:在英文翻譯中,歸一化和標(biāo)準(zhǔn)化的翻譯是一致的,而在實(shí)際使用中,我們需要根據(jù)實(shí)際的公式(或用途)去理解~
數(shù)據(jù)標(biāo)準(zhǔn)化方法有多種,如:直線型方法(如極值法、標(biāo)準(zhǔn)差法)、折線型方法(如三折線法)、曲線型方法(如半正態(tài)性分布)。不同的標(biāo)準(zhǔn)化方法,對(duì)系統(tǒng)的評(píng)價(jià)結(jié)果會(huì)產(chǎn)生不同的影響。其中,最常用的是Z-Score 標(biāo)準(zhǔn)化。
Z-Score 標(biāo)準(zhǔn)化
其中,
為數(shù)據(jù)均值(mean),
為標(biāo)準(zhǔn)差(std)。
描述:
將原數(shù)據(jù)轉(zhuǎn)換為符合均值為0,標(biāo)準(zhǔn)差為1的標(biāo)準(zhǔn)正態(tài)分布的新數(shù)據(jù)。
作用:1、提升模型的收斂速度(加快梯度下降的求解速度)
2、提升模型的精度(消除量級(jí)和量綱的影響)
3、簡化計(jì)算(與歸一化的簡化原理相同)
python實(shí)現(xiàn):
(1)(這里我們重置一下數(shù)據(jù)表df,避免實(shí)驗(yàn)的偶然性)
from sklearn import preprocessing
df=pd.read_excel('C://Users/Administrator/Desktop/data_py.xlsx',sheet_name='廣州',encoding='utf-8')
df.drop(columns="時(shí)間",axis=1,inplace=True)
df.set_index([[2010,2011,2012,2013,2014,2015,2016,2017,2018]],inplace=True)
df.drop(columns=['第二產(chǎn)業(yè)產(chǎn)值占比','第三產(chǎn)業(yè)產(chǎn)值占比','一般工業(yè)固體廢物綜合利用率'],axis=1,inplace=True)
(2)Z-Score 標(biāo)準(zhǔn)化,最簡便、也是L推薦的方法是用:sklearn庫里的StandardScaler()。
實(shí)例化:
zscore = preprocessing.StandardScaler()
# zscore標(biāo)準(zhǔn)化
zscore = zscore.fit_transform(df)
查看標(biāo)準(zhǔn)化后的數(shù)據(jù):
df_zscore = pd.DataFrame(zscore,index=df.index,columns=df.columns)
df_zscore
使用歸一化/標(biāo)準(zhǔn)化會(huì)改變數(shù)據(jù)原來的規(guī)律嗎?
歸一化/標(biāo)準(zhǔn)化實(shí)質(zhì)是一種線性變換,線性變換有很多良好的性質(zhì),這些性質(zhì)決定了對(duì)數(shù)據(jù)改變后不會(huì)造成“失效”,反而能提高數(shù)據(jù)的表現(xiàn),這些性質(zhì)是歸一化/標(biāo)準(zhǔn)化的前提。比如有一個(gè)很重要的性質(zhì):線性變換不會(huì)改變?cè)紨?shù)據(jù)的數(shù)值排序。
如果是單純想實(shí)現(xiàn)消除量級(jí)和量綱的影響,用Min-Max還是用Z-Score?
1、數(shù)據(jù)的分布本身就服從正態(tài)分布,使用Z-Score。
2、有離群值的情況:使用Z-Score。
這里不是說有離群值時(shí)使用Z-Score不受影響,而是,Min-Max對(duì)于離群值十分敏感,因?yàn)殡x群值的出現(xiàn),會(huì)影響數(shù)據(jù)中max或min值,從而使Min-Max的效果很差。相比之下,雖然使用Z-Score計(jì)算方差和均值的時(shí)候仍然會(huì)受到離群值的影響,但是相比于Min-Max法,影響會(huì)小一點(diǎn)。
當(dāng)數(shù)據(jù)出現(xiàn)離群點(diǎn)時(shí),用什么方法?
當(dāng)數(shù)據(jù)中有離群點(diǎn)時(shí),我們可以使用Z-Score進(jìn)行標(biāo)準(zhǔn)化,但是標(biāo)準(zhǔn)化后的數(shù)據(jù)并不理想,因?yàn)楫惓|c(diǎn)的特征往往在標(biāo)準(zhǔn)化后容易失去離群特征,此時(shí)就可以用RobustScaler 針對(duì)離群點(diǎn)做標(biāo)準(zhǔn)化處理。
三、Robust標(biāo)準(zhǔn)化(RobustScaler)
很多時(shí)候我們?cè)跈C(jī)器學(xué)習(xí)中,或是其他模型都會(huì)經(jīng)常見到一個(gè)詞:魯棒性。也就是Robust的音譯。
計(jì)算機(jī)科學(xué)中,健壯性(英語:Robustness)是指一個(gè)計(jì)算機(jī)系統(tǒng)在執(zhí)行過程中處理錯(cuò)誤,以及算法在遭遇輸入、運(yùn)算等異常時(shí)繼續(xù)正常運(yùn)行的能力。 諸如模糊測(cè)試之類的形式化方法中,必須通過制造錯(cuò)誤的或不可預(yù)期的輸入來驗(yàn)證程序的健壯性。很多商業(yè)產(chǎn)品都可用來測(cè)試軟件系統(tǒng)的健壯性。健壯性也是失效評(píng)定分析中的一個(gè)方面。
關(guān)于Robust,是這么描述的:
This Scaler removes the median(中位數(shù)) and scales the data according to the quantile range(四分位距離,也就是說排除了outliers).
Huber從穩(wěn)健統(tǒng)計(jì)的角度系統(tǒng)地給出了魯棒性3個(gè)層面的概念:
一是模型具有較高的精度或有效性,這也是對(duì)于機(jī)器學(xué)習(xí)中所有學(xué)習(xí)模型的基本要求;
二是對(duì)于模型假設(shè)出現(xiàn)的較小偏差,只能對(duì)算法性能產(chǎn)生較小的影響;
主要是:噪聲(noise)
三是對(duì)于模型假設(shè)出現(xiàn)的較大偏差,不可對(duì)算法性能產(chǎn)生“災(zāi)難性”的影響。
主要是:離群點(diǎn)(outlier)
在機(jī)器學(xué)習(xí),訓(xùn)練模型時(shí),工程師可能會(huì)向算法內(nèi)添加噪聲(如對(duì)抗訓(xùn)練),以便測(cè)試算法的「魯棒性」。可以將此處的魯棒性理解述算法對(duì)數(shù)據(jù)變化的容忍度有多高。魯棒性并不同于穩(wěn)定性,穩(wěn)定性通常意味著「特性隨時(shí)間不變化的能力」,魯棒性則常被用來描述可以面對(duì)復(fù)雜適應(yīng)系統(tǒng)的能力,需要更全面的對(duì)系統(tǒng)進(jìn)行考慮。
使用方法
(1)和Z-Score一樣,進(jìn)行實(shí)例化:
robust = preprocessing.RobustScaler()
# robust標(biāo)準(zhǔn)化處理
df_robust = robust.fit_transform(df)
(2)查看標(biāo)準(zhǔn)化后的數(shù)據(jù):
df_robust = pd.DataFrame(df_robust,index=df.index,columns=df.columns)
df_robust
(在這里我們僅僅是做一個(gè)示范,并不是說當(dāng)前這個(gè)數(shù)據(jù)表必須用Robust進(jìn)行標(biāo)準(zhǔn)化)
實(shí)驗(yàn)數(shù)據(jù)表:
鏈接:https://pan.baidu.com/s/1MOmda_0kDbwRNp9jJ0XOgw?pan.baidu.com
提取碼:5ca2
由于時(shí)間關(guān)系,剩下的內(nèi)容我會(huì)在下次更新中一并補(bǔ)充~
以上便是的內(nèi)容,感謝大家的細(xì)心閱讀,同時(shí)歡迎感興趣的小伙伴一起討論、學(xué)習(xí),想要了解更多內(nèi)容的可以看我的其他文章,同時(shí)可以持續(xù)關(guān)注我的動(dòng)態(tài)~
總結(jié)
以上是生活随笔為你收集整理的dataframe数据标准化处理_数据预处理——标准化/归一化(实例)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rust核电分解机在哪里_腐蚀RUST个
- 下一篇: echart关系树状图_干货 | 25个