机器学习——数据的预处理(总结大全)
目錄
數(shù)據(jù)清洗
1、重復(fù)觀測處理
?2、缺失值處理
刪除法
?替換法
?插補(bǔ)法
3、異常值處理
刪減特征
? ? ? ? ?1. 去除唯一屬性
數(shù)據(jù)查看
特征縮放
一、為什么要特征數(shù)據(jù)縮放?
二、特征縮放常用的方法
1、歸一化(Normalization)
2、標(biāo)準(zhǔn)化(Standardization)
相同點(diǎn)及其聯(lián)系
數(shù)據(jù)清洗
????????在數(shù)據(jù)處理過程中,一般都需要進(jìn)行數(shù)據(jù)的清洗工作,如數(shù)據(jù)集是 否存在重復(fù)、是否存在缺失、數(shù)據(jù)是否具有完整性和一致性、數(shù)據(jù)中是 否存在異常值等。1、重復(fù)觀測處理
import pandas as pd import numpy as npdata=pd.DataFrame([[8.3,6],[9.3,4],[6,8],[3,1],[3,1]]) # 重復(fù)觀測的檢測 print('數(shù)據(jù)集中是否存在重復(fù)觀測:\n',any(data.duplicated())) # 刪除重復(fù)項(xiàng) data.drop_duplicates(inplace = True) # 重復(fù)觀測的檢測 print('數(shù)據(jù)集中是否存在重復(fù)觀測:\n',any(data.duplicated())) print(data)2、缺失值處理
????????一般而言,當(dāng)遇到缺失值(Python中用NaN表示)時(shí),可以采用三 種方法處置,分別是刪除法、替換法和插補(bǔ)法。-
刪除法
解析:
?????1、刪除全為空值的行或列
? ? ? data=data.dropna(axis=0,how='all') ? #行
? ? ? data=data.dropna(axis=1,how='all') ? #列
2、刪除含有空值的行或列
? ? ?data=data.dropna(axis=0,how='any') ? #行
? ? data=data.dropna(axis=1,how='any') ? #列
函數(shù)具體解釋:
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
函數(shù)作用:刪除含有空值的行或列
axis:維度,axis=0表示index行,axis=1表示columns列,默認(rèn)為0
how:"all"表示這一行或列中的元素全部缺失(為nan)才刪除這一行或列,"any"表示這一行或列中只要有元素缺失,就刪除這一行或列
thresh:一行或一列中至少出現(xiàn)了thresh個(gè)才刪除。
subset:在某些列的子集中選擇出現(xiàn)了缺失值的列刪除,不在子集中的含有缺失值得列或行不會刪除(有axis決定是行還是列)
inplace:刷選過缺失值得新數(shù)據(jù)是存為副本還是直接在原數(shù)據(jù)上進(jìn)行修改。
?
-
?替換法
?
-
?插補(bǔ)法
?插值法是利用已知點(diǎn)建立合適的插值函數(shù),未知值由對應(yīng)點(diǎn)xi求出的函數(shù)值f(xi)近似代替
三、(數(shù)據(jù)分析)-數(shù)據(jù)清洗----缺失值處理__23__的博客-CSDN博客
3、異常值處理
4、特征編碼處理
5、特征創(chuàng)建
刪減特征
1. 去除唯一屬性
唯一屬性通常是一些id屬性,這些屬性并不能刻畫樣本自身的分布規(guī)律,所以簡單地刪除這些屬性即可。
數(shù)據(jù)查看
- 查看行列: data.shape
- 查看數(shù)據(jù)詳細(xì)信息: data.info(),可以查看是否有缺失值
- 查看數(shù)據(jù)的描述統(tǒng)計(jì)分析: data.describe(),可以查看到異常數(shù)據(jù)
- 獲取前/后10行數(shù)據(jù): data.head(10)、data.tail(10)
- 查看列標(biāo)簽: data.columns.tolist()
- 查看行索引: data.index
- 查看數(shù)據(jù)類型: data.dtypes
- 查看數(shù)據(jù)維度: data.ndim
- 查看除index外的值: data.values,會以二維ndarray的形式返回DataFrame的數(shù)據(jù)
- 查看數(shù)據(jù)分布(直方圖):?seaborn.distplot(data[列名].dropna())
特征縮放
一、為什么要特征數(shù)據(jù)縮放?
????????有特征的取值范圍變化大,影響到其他的特征取值范圍較小的,那么,根據(jù)歐氏距離公式,整個(gè)距離將被取值范圍較大的那個(gè)特征所主導(dǎo)。
為避免發(fā)生這種情況,一般對各個(gè)特征進(jìn)行縮放,比如都縮放到[0,1],以便每個(gè)特征屬性對距離有大致相同的貢獻(xiàn)。
作用:確保這些特征都處在一個(gè)相近的范圍。
優(yōu)點(diǎn):1、這能幫助梯度下降算法更快地收斂,2、提高模型精
直接求解的缺點(diǎn):
1、當(dāng)x1 特征對應(yīng)權(quán)重會比x2 對應(yīng)的權(quán)重小很多,降低模型可解釋性
2、梯度下降時(shí),最終解被某個(gè)特征所主導(dǎo),會影響模型精度與收斂速度
3、正則化時(shí)會不平等看待特征的重要程度(尚未標(biāo)準(zhǔn)化就進(jìn)行L1/L2正則化是錯(cuò)誤的)
哪些機(jī)器學(xué)習(xí)算法不需要(需要)做歸一化?
????????概率模型(樹形模型)不需要?dú)w一化,因?yàn)樗鼈儾魂P(guān)心變量的值,而是關(guān)心變量的分布和變量之間的條件概率,如決策樹、RF。而像Adaboost、SVM、LR、Knn、KMeans之類的最優(yōu)化問題就需要?dú)w一化。
二、特征縮放常用的方法
1、歸一化(Normalization)
- 數(shù)值的歸一,丟失數(shù)據(jù)的分布信息,對數(shù)據(jù)之間的距離沒有得到較好的保留,但保留了權(quán)重。
- 1.小數(shù)據(jù)/固定數(shù)據(jù)的使用;2.不涉及距離度量、協(xié)方差計(jì)算、數(shù)據(jù)不符合正態(tài)分布的時(shí)候;3.進(jìn)行多指標(biāo)綜合評價(jià)的時(shí)候。
?將數(shù)值規(guī)約到(0,1)或(-1,1)區(qū)間。
一個(gè)特征X的范圍[min,max]
import pandas as pd import numpy as npdata=pd.DataFrame([[8.3,6],[9.3,4],[6,8],[3,1]]) print(data)data[0]=(data[0]-data[0].min())/(data[0].max()-data[0].min()) data[1]=(data[1]-data[1].min())/(data[1].max()-data[1].min()) print(data)結(jié)果:
2、標(biāo)準(zhǔn)化(Standardization)
- 數(shù)據(jù)分布的歸一,較好的保留了數(shù)據(jù)之間的分布,也即保留了樣本之間的距離,但丟失了權(quán)值
- 1.在分類、聚類算法中,需要使用距離來度量相似性;2.有較好的魯棒性,有產(chǎn)出取值范圍的離散數(shù)據(jù)或?qū)ψ畲笾底钚≈滴粗那闆r下。
?將數(shù)據(jù)變換為均值為0,標(biāo)準(zhǔn)差為1的分布切記,并非一定是正態(tài)的。
其中μ為所有樣本數(shù)據(jù)的均值,σ為所有樣本數(shù)據(jù)的標(biāo)準(zhǔn)差。
先求均值(mean)
再求方差(std)
?
import numpy as np from sklearn.preprocessing import StandardScalerdata=np.array([[2,2,3],[1,2,5]]) print(data) print()scaler=StandardScaler() # fit函數(shù)就是要計(jì)算這兩個(gè)值 scaler.fit(data) # 查看均值和方差 print(scaler.mean_) print(scaler.var_) # transform函數(shù)則是利用這兩個(gè)值來標(biāo)準(zhǔn)化(轉(zhuǎn)換) X=scaler.transform(data) print() print(X)結(jié)果:
??
大家可以用以上公式進(jìn)行驗(yàn)證一下
?這兩組數(shù)據(jù)的均值是否為0,方差(σ2)是否為1
相同點(diǎn)及其聯(lián)系
- 歸一化廣義上是包含標(biāo)準(zhǔn)化的,以上主要是從狹義上區(qū)分兩者。本質(zhì)上都是進(jìn)行特征提取,方便最終數(shù)據(jù)的比較。都是為了縮小范圍,便于后續(xù)的數(shù)據(jù)處理。
- 加快梯度下降,損失函數(shù)收斂; 提升模型精度; 防止梯度爆炸(消除因?yàn)檩斎氩罹噙^大而帶來的輸出差距過大,進(jìn)而在反向傳播的過程當(dāng)中導(dǎo)致梯度過大,從而形成梯度爆炸)
?
總結(jié)
以上是生活随笔為你收集整理的机器学习——数据的预处理(总结大全)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上传本地新项目到SVN服务器
- 下一篇: FLTK Fl_File_Chooser