Machine Learning - Thuật toán StandardScaler

Machine Learning StandardScaler là gì?

Hàm StandardScaler() là một hàm trong thư viện sklearn của Python.Hàm StandardScaler() được dùng để quy đổi tỷ lệ của các giá trị khác nhau để so sánh.

Trong thực tế dữ liệu có các giá trị khác nhau và đơn vị đo lường khác nhau mà chúng khó có thể so sánh được.Ví dụ làm thế nào để so sánh các giá trị là kg và m hoặc độ cao và thời gian…Để giải quyết cho bài toán này chúng ta có thể sử dụng tính năng mở rộng Scale để quy đổi sang một giá trị mới để dễ dàng so sánh hơn.

Để hiểu về tính năng Scale chúng ta sẽ đi tìm hiểu ví dụ dưới đây.

Ví dụ về bài toán dự đoán khí CO2. Giả sử chúng ta có tập dữ liệu của các ô tô trong file csv: cars.csv như sau:

CarModelVolumeWeightCO2
ToyotaVios1.078099
MitsubishiXpander1.2116095
SkodaCitigo1.092995
Fiat5000.986590
MiniCooper1.51140105
VWUp!1.0929105
SkodaFabia1.4110990
MercedesA-Class1.5136592
FordFiesta1.5111298
AudiA11.6115099
HyundaiI201.198099
SuzukiSwift1.3990101
FordFiesta1.0111299
HondaCivic1.6125294
HundaiI301.6132697
OpelAstra1.6133097
BMW11.6136599
Mazda32.21280104
SkodaRapid1.61119104
FordFocus2.01328105
FordMondeo1.6158494
OpelInsignia2.0142899
MercedesC-Class2.1136599
SkodaOctavia1.6141599
VolvoS602.0141599
MercedesCLA1.51465102
AudiA42.01490104
AudiA62.01725114
VolvoV701.61523109
BMW52.01705114
MercedesE-Class2.11605115
VolvoXC702.01746117
FordB-Max1.61235104
BMW21.61390108
OpelZafira1.61405109
MercedesSLK2.51395120

Trong bài thuật toán multiple regression ở bài trước chúng ta đã dự đoán khí thỉ CO2 với cột Volume với đơn vị là cm3.Nhưng trong bài này dữ liệu của cột Volume có đơn vị là lít (liters)

Như các bạn có thể thấy khó có thể so sánh khối lượng Volume 1.0 lít với trọng lượng 790 kg, nhưng nếu chúng ta quy đổi đưa cả hai thành các giá trị mới có thể so sánh được, chúng ta có thể dễ dàng thấy giá trị này bằng bao nhiêu so với giá trị kia.

Có nhiều phương pháp để chia tỷ lệ dữ liệu, tuy nhiên trong hướng dẫn này chúng tôi sẽ sử dụng phương pháp chuẩn standardization.

Thuật toán StandardScaler trong toán học.

Công thức chuẩn của phương pháp standardization như sau:

z = (x – u ) / s

Trong đó:

z : là giá trị mới.

x : là giá trị gốc ban đầu.

u : là giá trị trung bình (mean).

s : là độ lệch chuẩn.

Để so sánh các giá trị kg trong cột trọng lượng Weight với giá trị lít trong cột Volume chúng ta sẽ quy đổi các giá trị đó về một tỷ lệ bằng cách sử dụng scale.

Ban đầu trọng lượng Weight của cột đầu tiên có giá trị là 790 kg và dung tích nhiên liệu Volume 1.0 lít, chúng ta sẽ quy đổi nó.

Áp dụng công thức của phương pháp chuẩn standardization ở trên ta có:

(790 – 1292.23) / 238.74 = -2.1

(1.0 – 1.61) / 0.38 = -1.59

Bây giờ các bạn có thể so sánh -2.1 với -1.59 thay vì so sánh 790 với 1.0

Thuật toán StandardScaler trong machine learning sử dụng sklearn.

Bạn có thể sử dụng hàm StandardScaler() trong module sklearn của python để tính scale một cách dễ dàng mà không phải tính thủ công.

Hàm StandardScaler() trả về một đối tượng Scaler object.

Code python sử dụng thuật toán StandardScaler() với module sklearn như sau:

Ví dụ

import pandas
from sklearn.preprocessing import StandardScaler
from sklearn import linear_model

# Thu thập dữ liệu từ file csv
df = pandas.read_csv("cars.csv")

# Phân tích dữ liệu
X = df[['Weight', 'Volume']]
y = df['CO2']

# Quy đổi dữ liệu scale
scale = StandardScaler()
scaled_X = scale.fit_transform(X)

# Sử dụng mô hình model LinearRegression
regr = linear_model.LinearRegression()
regr.fit(scaled_X, y)

# Dự đoán predict
scaled = scale.transform([[2300, 1.3]])
predictedCO2 = regr.predict([scaled[0]])
print(predictedCO2) 

Kết quả :

[107.11988043]

Tuy khác nhau về giá trị và đơn vị nhưng bằng cách sử dụng scale chúng ta đã quy đổi nó để đưa về giá trị mới có thể so sánh tỉ lệ. Và chúng ta có thể dự đoán được kết quả của khí CO2  là 107.