日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python数据科学-数据预处理

發(fā)布時(shí)間:2023/12/19 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python数据科学-数据预处理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

總第88篇

數(shù)據(jù)預(yù)處理是我們在做機(jī)器學(xué)習(xí)之前必經(jīng)的一個(gè)過程,在機(jī)器學(xué)習(xí)中常見的數(shù)據(jù)預(yù)處理包括缺失值處理,縮放數(shù)據(jù)以及對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理這三個(gè)過程。

01|缺失值處理:

缺失值處理是我們在做數(shù)據(jù)分析/機(jī)器學(xué)習(xí)過程中經(jīng)常會(huì)遇到的問題,我們需要一種處理不完整數(shù)據(jù)的策略/方法。對缺失值處理有兩種方法,一種是直接對某一列中的缺失值進(jìn)行處理,一種是根據(jù)類別標(biāo)簽,分類別對缺失值進(jìn)行處理。

我們先看如何在沒有類別標(biāo)簽的情形下修補(bǔ)數(shù)據(jù)。比較簡單粗暴的方法就是直接忽略,也就是刪除缺失值,這種策略適用于數(shù)據(jù)集中缺失值占比很小,去掉其以后對整體影響不大的情況。這里需要注意的是刪除某一個(gè)缺失值時(shí),需要把和該值一個(gè)維度/行的值也一起刪除,但是其他值可能對數(shù)據(jù)整體的影響比較大,所以用這種方法的時(shí)候要慎重

一種可以避免這種情況的方法就是給缺失值賦予一個(gè)值,這個(gè)值一般就是該缺失值所在列的均值、中位數(shù)之類的。我們這里用sklearn庫中的preprocessing模塊中的Imputer()函數(shù)來處理缺失值。

#加載庫 from sklearn.datasets import load_iris from sklearn.preprocessing import Imputer import numpy as np import numpy.ma as ma #加載數(shù)據(jù)集 data=load_iris() x=data["data"] y=data["target"] #將原始數(shù)據(jù)復(fù)制一份 x_t=x.copy() #在第2行制造一些缺失值 x_t[2,:]=np.repeat(0,x.shape[1]) #創(chuàng)建Imputer對象,采用平均值策略 imputer=Imputer(missing_values=0,strategy="mean")#先聲明一個(gè)替換策略 x_imputed=imputer.fit_transform(x_t)#讓x_t利用該策略 print(x_t) 制造缺失值以后的數(shù)據(jù)填充缺失以后的數(shù)據(jù)

preprocessing.Imputer函數(shù)解釋:

sklearn.preprocessing.Imputer(missing_values=’NaN’, strategy=’mean’, axis=0, verbose=0, copy=True) #missing_values為待替換的缺失值,可以為NaN,也可以為具體數(shù)值 #strategy為替換策略,有mean、medium、most_frequent分別表示均值、中位數(shù)、眾數(shù)三者來填充 #axis=0表示按列填充,1表示按行填充 #copy設(shè)置為False時(shí)表示不在原數(shù)據(jù)基礎(chǔ)上修改 關(guān)于Imputer的用法

缺失值處理對應(yīng)于pandas庫中的方法為dropna()刪除缺失值;fillna()填充缺失值。

dropna()默認(rèn)刪除任何含有缺失值的行;傳入?yún)?shù)“how=”all””表示刪除全是缺失值的行;傳入?yún)?shù)“axis=1”可刪除含有缺失值的列。

fillna()一般情況下會(huì)給定一個(gè)常數(shù),會(huì)把數(shù)據(jù)集中的所有缺失值替換成該常數(shù),比如fillna(0);也可以實(shí)現(xiàn)對不同列中的缺失值進(jìn)行不同的替換,比如df.fillna({1:0.5,3:1})表示將第一列(從0開始計(jì)數(shù))中的缺失值替換成0.5,第三列中的缺失值替換成1;傳入?yún)?shù)“inplace=True”表示對源數(shù)據(jù)進(jìn)行修改。這里面填充的具體的常數(shù)值也可以直接換為中位數(shù),平均數(shù)之類的,比如df.fillna(data.mean())就表示用平均值填充。

我們有的時(shí)候可能需要根據(jù)類別(比如我們要根據(jù)性別這個(gè)分類來分別給身高這個(gè)缺失值進(jìn)行填充)分別進(jìn)行缺失值的處理,這個(gè)時(shí)候需要先把不同類別的數(shù)據(jù)找出來,這里用的是np.where()函數(shù),該函數(shù)在前面有提到,用該函數(shù)找出不同類別以后,處理方法就和不分類別處理的方法一致,只不過是根據(jù)類別的不同,處理的次數(shù)不同。

02|縮放數(shù)據(jù):

縮放數(shù)據(jù)集的目的是為了防止“大數(shù)吃小數(shù)”的現(xiàn)象發(fā)生,大數(shù)吃小數(shù)就類似于生活中同樣一個(gè)環(huán)境下聲音大的蓋過聲音小的,最后導(dǎo)致只能聽見聲音大的發(fā)聲,導(dǎo)致了最后的結(jié)果只考慮了聲音較大的那一部分,而忽略了聲音較小的那一部分,但實(shí)際中聲音小的也需要被聽到,為了防止這種聲音大的蓋過聲音小的現(xiàn)象的發(fā)聲,我們采取了一定的限制,就是把所有的聲音按照一定的規(guī)則限制在某一個(gè)區(qū)間內(nèi)(在這個(gè)區(qū)間內(nèi),能夠保證不管聲音大小都會(huì)被聽到),你聲音再大也不能超過這個(gè)限制的最大值。我們把這個(gè)過程稱為數(shù)據(jù)的縮放(當(dāng)然了,剛剛舉得那個(gè)例子是縮的方面)。

上面那個(gè)在生活中的例子,而在機(jī)器學(xué)習(xí)的學(xué)習(xí)過程中,也會(huì)有很多特征之間出現(xiàn)上面大數(shù)吃小數(shù)的問題,所以我們在進(jìn)行學(xué)習(xí)之前,需要先對數(shù)據(jù)進(jìn)行預(yù)處理以后再進(jìn)行學(xué)習(xí)。

#加載庫 import numpy as np #生成待縮放的隨機(jī)數(shù) np.random.seed(10) x=[np.random.randint(10,25)*1.0 for i in range(10)] #定義縮放函數(shù) def min_max(x):return([round((xx-min(x))/(1.0*(max(x)-min(x))),2) for xx in x]) #對給定的數(shù)據(jù)進(jìn)行縮放 print(x) print(min_max(x)) np.random.seed()#用于指定隨機(jī)數(shù)生成時(shí)所用算法開始的整數(shù)值。 np.random.randint(low,high=None,size=None)#生成在半開半閉區(qū)間[low,high)上離散均勻分布的整數(shù)值,若high=None,則取值區(qū)間變?yōu)閇0,low)。 round(x,a)#用來返回浮點(diǎn)數(shù)的四舍五入值,x表示待處理的值,a表示保留的位數(shù)。 np.round()實(shí)例

把數(shù)據(jù)縮放到(0,1)范圍內(nèi)除了上面提到的自定義一個(gè)函數(shù)以外,還可以通過preprocessing.MinMaxScaler()進(jìn)行實(shí)現(xiàn)。

關(guān)于preprocessing.MinMaxScaler的一些注意事項(xiàng),該函數(shù)對象需要是多維數(shù)組&float類型數(shù),要不然會(huì)報(bào)錯(cuò),雖然也能出來結(jié)果。

關(guān)于數(shù)據(jù)縮放:


通常情況下是把數(shù)據(jù)縮放到[0,1]區(qū)間內(nèi),公式是(x-min(x)/(max(x)-min(x)),我們上面用到的就是這種方式,當(dāng)然了也可以將值縮放到任意區(qū)間內(nèi)[nr_min,nr_max],公式是(x-min(x))/(max(x)-min(x))*(nr_max-nr_min)+nr_min

03|標(biāo)準(zhǔn)化數(shù)據(jù):

所謂的標(biāo)準(zhǔn)化就是將給定向量轉(zhuǎn)換成平均值為0,標(biāo)準(zhǔn)差為1的形式。公式如下:X=x-mean(value)/std(x)

#加載庫 import numpy as np from sklearn.preprocessing import scale #生成隨機(jī)數(shù) np.random.seed(10) x=[np.random.randint(10,25)*1.0 for i in range(10)] #數(shù)據(jù)標(biāo)準(zhǔn)化 x_centered=scale(x,with_mean=True,with_std=False) x_standard=scale(x,with_mean=True,with_std=True) print("x:{}".format(x)) print("x_centered:{}".format(x_centered)) print("x_standard:{}".format(x_standard))

輸出結(jié)果如下:

x:[19.0, 23.0, 14.0, 10.0, 11.0, 21.0, 22.0, 19.0, 23.0, 10.0] x_centered:[ 1.8 ?5.8 -3.2 -7.2 -6.2 ?3.8 ?4.8 ?1.8 ?5.8 -7.2] x_standard:[ 0.35059022 ?1.12967961 -0.62327151 -1.4023609 ?-1.20758855 ?0.740134920.93490726 ?0.35059022 ?1.12967961 -1.4023609 ]

關(guān)于preprocessing.scale函數(shù)解釋:

sklearn.preprocessing.scale(X, axis=0, with_mean=True,with_std=True,copy=True) #參數(shù)解釋: #X:數(shù)組或者矩陣 #axis:int類型,初始值為0,axis用來計(jì)算均值 means 和標(biāo)準(zhǔn)方差 standard deviations. 如果是0,則單獨(dú)的標(biāo)準(zhǔn)化每個(gè)特征(列),如果是1,則標(biāo)準(zhǔn)化每個(gè)觀測樣本(行)。 #with_mean: boolean類型,默認(rèn)為True,表示將數(shù)據(jù)均值規(guī)范到0 #with_std: boolean類型,默認(rèn)為True,表示將數(shù)據(jù)方差規(guī)范到1

縮放和標(biāo)準(zhǔn)化分別是歸一化的兩種不同方式。關(guān)于歸一化具體在機(jī)器學(xué)習(xí)中的應(yīng)用,我們在之后再說。

總結(jié)

以上是生活随笔為你收集整理的python数据科学-数据预处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。