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