iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0
AI & Data

跟我一起在AI的世界裡打怪獸系列 第 17

Day17 資料預處理-資料類型、缺失值、標準化、獨熱編碼、管道器

  • 分享至 

  • xImage
  •  

資料類型-數值型、類別型

  • 數值型資料:以數值存在、能做數值運算的資料。如身高體重、年齡、收入……等。
  • 類別型資料:用來描述事物的屬性或特徵。如性別、尺寸、地區……等。

這兩種是主要的資料類型,要查看使用資料的類型,可以用下列的程式碼:

# 先載入資料後,命名為x
x.info()

缺失值的處理

用螢光筆把缺的資料畫出來

# 因為是pandas中的方法,所以要先引入
import pandas as pd

# 假設把你的DataFrame叫做df,而顏色也可以用red、blue之類
df.style.highlight_null(null_color="yellow")

使用sklean的SimpleImputer轉換器

# 引入需要的函式庫
from sklearn.impute import SimpleImputer

# 創一個轉換器,使用平均數填補空缺
imputer = SimpleImputer(strategy='mean')

# 假設缺失的數據集叫x,使用剛剛設定好的轉換器對數據進行轉換,並放在y裡
y = imputer.fit_transform(x)

可以注意的是,這邊使用的是平均值(mean),也可以用其他的方法填補,比如:

  • median(中位数)
  • most_frequent(眾数)

資料的標準化

不同特徵如果差異過大,可能會導致其權重不平均,影響模型的性能。通過數據標準化,可以消除這種影響,使得特徵的權重更加均衡。

主要有兩種標準化的方法:

Z-score 標準化 Min-Max 標準化
轉換器 StandaScaler MinMaxScaler
方法 使數據的均值為0,標準差為1 將數據縮小到一個範圍,通常是[0,1]或[-1,1]
優點 保留了原始數據的分布特性 不受異常值影響
缺點 會受極端異常值的影響 可能扭曲原始數據分布

Z-score 標準化

# 導入相關函式庫
from sklearn.preprocessing import StandardScaler

#創建轉換器
scaler = StandardScaler()

#假設缺失的數據集叫x,使用剛剛設定好的轉換器對數據進行轉換,並放在y裡
y = scaler.fit_transform(x)

Min-Max 標準化

# 導入相關函式庫
from sklearn.preprocessing import MinMaxScaler

#創建轉換器
scaler = MinMaxScaler()

#假設缺失的數據集叫x,使用剛剛設定好的轉換器對數據進行轉換,並放在y裡
y = scaler.fit_transform(x)

獨熱編碼

在機器學習中所有運算都是基於數值運算的,因為類別型資料不能運算,所以在使用前要先做轉換,這個過程就叫做獨熱編碼。

下面是一個例子:

紅色 藍色 綠色
0 1 0 0
1 0 1 0
2 0 0 1
3 0 0 0

在這個例子中,第零位資料的商品顏色是紅色,所以只在紅色部分會呈現1,其他是0,這也是「獨熱編碼」這個名稱的由來,因為只會有一個資料會是「熱(1)」的。

而資料三全部都是零,就是這個欄位有遺漏值出現,所以才會沒有1。

而獨熱編碼的使用有兩種方式:

用pandas函式庫中的get_dummies

import pandas as pd

# 假設dataframe叫做df
pd.get_dummies(x)

用sklean函式庫中的OneHotEncoder

from sklearn.preprocessing import OneHotEncoder

# 創建 OneHotEncoder 轉換器
encoder = OneHotEncoder()

# 假設資料命名為x,進行獨熱編碼,並放在y裡
y = encoder.fit_transform(x)

# 將結果轉換成 DataFrame 以便查看
import pandas as pd
df_y = pd.DataFrame(y, columns=encoder.get_feature_names(['原本表格的名稱(如顏色、姓名等)']))

print(df_y)

使用管道器(pipeline)將不同轉換器連在一起

管道器的作用是將不同轉換器連接在一起,不僅可以提升可讀性,也能降低出錯率。

上面我們學到了許多不同的轉換器,但有沒有發現,每個轉換器做完都會多出一個變數(比如上面例子中的y),如果有很多轉換器,那變數就會一直增加下去,出錯率也會大大提升。

所以我們用管道器把他們「連」在一起,一次轉換完成,這樣就可以避免掉一直設變數的煩惱啦!

導入需要的函式庫
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler

# 創建一個 Pipeline,將數據處理的步驟連在一起
pipeline_01 = make_pipeline(SimpleImputer(strategy='mean'),  # 使用平均值填充缺失值
                            StandardScaler())  # 標準化處理

# 假設數據集叫作x,使用管道,將結果存在y
y = pipeline_01.fit_transform(x)

print(y)

結語

今天講的東西或許比較無聊,但之後在實作機器學習上會常常用到哦,要好好學起來!


上一篇
Day16 函式庫Pandas-Series、DataFrame、導入資料、缺失值、合併
下一篇
Day18 所以我說那個資料呢?-公開資料集
系列文
跟我一起在AI的世界裡打怪獸30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言