天天看點

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

大資料預處理

  • 0 前言
  • 1 資料标準化
    • 1.1 标準化定義
    • 1.2 為什麼要進行資料标準化?
    • 1.3 執行個體操作
  • 2 資料縮放化
    • 2.1 0-1縮放
    • 2.2 執行個體操作
  • 3 資料歸一化
    • 3.1 資料歸一化定義
    • 3.2 執行個體操作
  • 4 二值化
    • 4.1 二值化定義
    • 4.2 實際操作
  • 5 獨熱編碼
    • 5.1 獨熱編碼定義
    • 5.2 執行個體操作
  • 6、标簽編碼
    • 6.1 标簽編碼定義
    • 6.2 執行個體操作
  • 7 缺失值處理
    • 7.1 處理方式
    • 7.2 執行個體操作

手動反爬蟲,禁止轉載: 原博位址 https://blog.csdn.net/lys_828/article/details/119902718(CSDN部落客:Be_melting)

知識梳理不易,請尊重勞動成果,文章僅釋出在CSDN網站上,在其他網站看到該博文均屬于未經作者授權的惡意爬取資訊
           

0 前言

在進行資料分析項目案例之前,需要了解資料的情況,有時候拿到的資料并不是想象中的完美資料,那麼就需要進行預處理後才能使用。為了系統的縷清預處理的一般的步驟,這裡進行詳細的梳理,采用sklearn工具包和手寫代碼驗證的方式進行。

1 資料标準化

1.1 标準化定義

标準化的定義:又被稱為均值移除(mean removal),對不同樣本的同一特征值進行處理,最終均值為0,标準差為1,采用此種方式我們隻需要使用如下公式即可。

x s c a l e d = x − m e a n s d ⇒ z = X − μ σ x_{scaled} = \frac{x-mean}{sd} \Rightarrow z = \frac{X-\mu}{\sigma} xscaled​=sdx−mean​⇒z=σX−μ​

  • m e a n : mean: mean:資料均值
  • s d : sd: sd:資料标準差

1.2 為什麼要進行資料标準化?

在機器學習中,很多的算法和評估模型的好壞的方法都是基于距離(殘差)的處理,也就是 ( x i − x ) 2 (x_{i} -x)^2 (xi​−x)2或者是 ( y i − y ) 2 (y_{i} -y)^2 (yi​−y)2,是以在進行資料随機采樣的時候應該避免不同距離對模型影響,故需要進行标準化處理,保準随機取的資料是等距離的。說人話,借用圖像舉例,就是要把不同的橢圓,最後處理成為正圓,這樣在圓上取任意值到原點的距離都相等。

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

1.3 執行個體操作

import numpy as np
from sklearn import preprocessing

data = np.array([[3, -1.5,  2, -5.4], [0,  4,  -0.3, 2.1], [1,  3.3, -1.9, -4.3]])
data
           

輸出結果為:(資料随機設定的,友善後面進行手動驗證)

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

按照标準化的公式,要先計算均值和方差,那麼有個問題就來了:計算的資料是橫向(一行資料,axis = 1),還是縱向(一列資料,axis = 0)的呢?每一列(縱向)都代表着一個字段的資料,而每一行卻包含了所有字段中的一個資料,而在計算均值和方差時候應該選取的是某個字段進行,也就是需要計算縱向的資料

print('均值: ',data.mean(axis = 0))
print('标準差: ', data.std(axis = 0))
           

輸出結果為:

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

接下來就可以進行手動驗證

import math

math.sqrt(((3-1.33333333)**2+(0-1.33333333)**2+(1-1.33333333)**2)/3)
           

輸出結果為:1.247219128924647(這裡隻進行第一列的标準差的驗證,其餘列也是一樣的,均值可以口算)

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

最終标準化後的結果為:(以第一列第一行的資料進行展示)

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

以上的過程雖然原理很簡單,操作起來也不是很難,但是要是每次進行資料處理之前都得一個資料一個資料的挨個處理,就顯着很浪費時間,是以就可以使用

preprocessing

函數進行處理

核心代碼:

preprocessing.scale()

data_standarized = preprocessing.scale(data)
print('均值: ',data_standarized.mean(axis = 0))
print('标準差: ', data_standarized.std(axis = 0))
data_standarized
           

輸出的結果為:(一行代碼搞定标準化。由于python計算精度的問題,均值這裡實際上是為0的,10的負17次方,相當于很微小的數值了)

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

2 資料縮放化

2.1 0-1縮放

對不同樣本的同一特征值,減去其最小值,除以(最大值-最小值), 最終原最大值為1,原最小值為0,這樣在資料分析時可以有效的消除不同機關大小對最終結構的權重影響。(例如股票類資訊,如果股價是5-7元之間浮動,但是每天成交量在100萬上下,在不在采用縮放的模式下,成交量的資料權重會比股價高上幾萬倍,導緻最終預測資料出現畸形)

x s c a l e d = x − x m i n x m a x − x m i n x_{scaled}=\frac{x-x_{min}}{x_{max}-x_{min}} xscaled​=xmax​−xmin​x−xmin​​

2.2 執行個體操作

如果直接使用numpy進行操作,依據計算的公式求解如下

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

除了手動計算外,也可以直接調用sklearn中的子產品,也是在

preprocessing

函數中,使用

MinMaxScaler

方法

核心代碼:

preprocessing.MinMaxScaler()

data_scaler = preprocessing.MinMaxScaler(feature_range = (0,2))
data_scaled = data_scaler.fit_transform(data)
data_scaled
           

輸出結果為:(

MinMaxScaler

括号裡可以進行參數的調整,根據自己的需求進行設定,比如将區間縮放至0-2,得到的結果就是剛剛利用numpy求解的2倍)

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

3 資料歸一化

3.1 資料歸一化定義

如果要調整特征向量中的值時,可以使用資料歸一化,以便可以使用通用比例尺對其進行測量。機器學習中最常用的規範化形式之一是調整特征向量的值,使其總和為1(友善查找重要特征)。常見的處理方式有如下幾種:L1模式, L2模式。

L1模式:了解就是加了絕對值的,也是常見的一種模式,還有其他很多的名字稱呼,比如熟悉的曼哈頓距離,最小最對誤差等。使用L1模式可以度量兩個向量間的差異,如絕對誤差和(Sum of Absolute Difference)

L 1 :      z = ∣ ∣ x ∣ ∣ 1 = ∑ i n ∣ x i ∣ L1: \space \space \space \space z = ||x||_{1} = \sum_{i}^{n}|x_{i}| L1:    z=∣∣x∣∣1​=i∑n​∣xi​∣

L2模式:了解就是加了平方的,是最常見最常用的一種模式,也有其他的稱呼,比如使用最多的歐氏距離就是L2模式。通常用來做優化目标函數的正則化項,放置模型為了迎合訓練集而過于複雜造成的過拟合情況,進而提高模型的泛化能力(可以參考一下邏輯回歸進行信用卡欺詐預測案例中,如果懲罰項參數選擇L2,結果會如何)

L 2 :      z = ∣ ∣ x ∣ ∣ 2 = ∑ i n x i 2 L2: \space \space \space \space z =||x||_{2} = \sqrt{\sum_{i}^{n}x_{i}^{2}} L2:    z=∣∣x∣∣2​=i∑n​xi2​

3.2 執行個體操作

核心代碼:

preprocessing.normalize()

L1 模式

data_normalized = preprocessing.normalize(data,'l1',axis = 0)
print(data_normalized)

data_norm_abs = np.abs(data_normalized)
print(data_norm_abs.sum(axis=0))
           

輸出的結果為:(可以看出每一列轉化後的資料相加都為1)

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

L2模式

data_normalized = preprocessing.normalize(data,'l2',axis = 0)
print(data_normalized)

#0.31622777*3 = 0.9486833...
(data_normalized*data_normalized).sum(axis = 0)
           

輸出的結果為:(每一列轉化後的資料按照公式計算也都為1,比例保持不變)

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

4 二值化

4.1 二值化定義

當我們要将數字特征向量轉換為布爾向量時,可以使用二值化(就是根據自己指定的門檻值,如果超過這個門檻值就為1,小于這個門檻值就為0)。在數字圖像處理領域,圖像二值化是将彩色或灰階圖像轉換為二進制圖像(即僅具有兩種顔色(通常是黑白)的圖像)的過程。

此技術用于識别對象,形狀,尤其是字元。通過二值化,可以将感興趣的對象與發現對象的背景區分開,比如常見的人物黑白畫像。

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

4.2 實際操作

核心代碼:

preprocessing.Binarizer()

data_binarized = preprocessing.Binarizer(threshold = 1.4).transform(data)
print(data_binarized)

print(data)
           

輸出的結果為:(可以設定門檻值,大于該值的資料都為1,不大于的都為0,最後的資料有0和1)

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

5 獨熱編碼

5.1 獨熱編碼定義

在很多的計算模型中都是隻能進行數值的處理,但是資料中經常會遇到各種 分類資料 的情況,是以就需要将分類資料進行數值編碼。獨熱編碼就是将分類資料轉化為0-1編碼的,獨熱編碼器可以将一鍵編碼視為一種可以強化特征向量的工具。基于該方案對特征向量中的每個特征進行編碼。這有助于我們提高空間效率。編碼過程如下

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

關于獨熱的了解:經過編碼後,一行資料中,隻有一個資料是1,其餘的都是0,對比紅路燈,在一個時刻,該訓示燈隻能顯示一種顔色

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

5.2 執行個體操作

核心代碼:

preprocessing.OneHotEncoder()

給出舉例資料

data = np.array([[1, 1, 2], [0, 2, 3], [1, 0, 1], [0, 1, 0]])
print(data)
           

輸出的結果為:(資料共四行三列,假設這三列的名稱分别為ABC,可以發現A中共有兩個特征0和1,B中有三個特征,C中有四個特征)

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

那麼接下來進行獨熱編碼,根據上面的設定,經過獨熱編碼後的結果應該有9個特征,前兩個對應A字段,中間三個對應B字段,最後四個對應C字段

encoder = preprocessing.OneHotEncoder()
encoder.fit(data)
encoder_vector = encoder.transform([[0,0,0]]).toarray()
print(encoder_vector)

encoder_vector = encoder.transform([[1,0,3]]).toarray()
print(encoder_vector)
           

輸出結果為:(這裡以[[0,0,0]]舉例,A中兩個特征,0在前面第一個位置,B中三個特征,0在第一個位置,C中三個特征,0也在第一個位置。對比這種位置關系[[1,0,3]]獨熱編碼後就不難了解了)

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

如果數字覺得不好了解的話,那這裡進行張三李四帶入

data = np.array([['張三', '張三', '李四'], ['王五', '李四', '趙六'], ['張三', '王五', '張三'], ['王五','張三', '王五']])
print(data)
encoder = preprocessing.OneHotEncoder()
encoder.fit(data)
encoder_vector = encoder.transform([['張三','張三','張三']]).toarray()
print(encoder_vector)
           

輸出結果為:(這裡就和上面是一個原理,隻不過采用中文文本資料進行展示,友善了解)

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

6、标簽編碼

6.1 标簽編碼定義

除了進行獨熱編碼外,分類變量可以進行标簽編碼,就是不光隻有0和1,還可以有其它的數值。标簽編碼常見的稱呼就是給資料“貼标簽”和找标簽對應的資料,也可以手動操作

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

6.2 執行個體操作

核心代碼:

preprocessing.LabelEncoder()

input_classes = ['audi', 'ford', 'audi', 'toyota', 'ford', 'bmw']

label_encoder = preprocessing.LabelEncoder()
label_encoder.fit(input_classes)
for i, item in enumerate(label_encoder.classes_):
    print(item, "-->", i)
           

輸出結果為:(回顧基礎部分講解

for

循環時講到的

for-enumerate

的配合使用,可以直接輸出對應的标簽資訊和标簽值)

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

經過

fit

訓練之後的标簽資訊,就可以對部分資料甚至全部的資料的标簽資訊甚至逆标簽資訊查詢,比如指定原清單中的部分資料,就可以直接獲得對應資料的編碼

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

同時也可以逆标簽資訊查詢,指定經過編碼後的數值,輸出對應的标簽資訊

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

7 缺失值處理

7.1 處理方式

最常見的資料情況就是缺失部分資料,那麼怎麼處理缺失值?有沒有固定的公式呢?處理方式如下:

  • 删除:缺失樣本量 非常大,删除整個字段;如果缺失量較少,且 難以填充 則删除缺失樣本
  • 填充:缺失量 小于10%,根據缺失變量的資料分布采取 均值(正态分布) 或 中位數(偏态分布) 進行填充
  • 模拟或預測缺失樣本:根據樣本的資料分布,生成 随機值填充(插值);使用與缺失相比相關性非常高的特征,建立模型,預測缺失值

在第二章已經詳細介紹了使用pandas對缺失值進行處理,接下來介紹sklearn中如何對大資料樣本進行缺失值處理

7.2 執行個體操作

采用sklearn子產品中的

SimpleImputer

函數進行處理,使用的步驟共四步

  • (1)從子產品中導入函數
  • (2)設定填充的對象和填充的方式
  • (3)選取資料
  • (4)處理資料

讀取測試資料,其中

Age

Salary

字段有缺失值

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

提取對應字段,可以使用列的方式進行提取,也可以使用坐标的方式進行提取

#采用坐标的方式進行提取
X = dataset.iloc[:, :-1].values
Y = dataset.iloc[:, -1].values
           

輸出結果如下:(一般會把所有的特征字段提取後指派為

X

,标簽字段提取後指派為

Y

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

嚴格按照sklearn處理缺失值的步驟進行,代碼如下

#導入處理子產品
from sklearn.impute import SimpleImputer  
#設定要處理的對象和處理規則
imputer=SimpleImputer(missing_values=np.nan,strategy='mean')
#選取資料fit訓練
imputer= imputer.fit(X[:,1:3])
#處理資料
X[:,1:3]=imputer.transform(X[:,1:3])
           

輸出結果如下:

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

最後補充關于可以設定的規則,通過調用說明文檔,可以發現能夠使用的類型如下:(平均值,中位數,衆數和常量)

【資料分析師-資料分析項目案例】大資料預處理0 前言1 資料标準化2 資料縮放化3 資料歸一化4 二值化5 獨熱編碼6、标簽編碼7 缺失值處理

至此關于大資料預處理的部分就介紹完畢,撒花✿✿ヽ(°▽°)ノ✿

繼續閱讀