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:
Car | Model | Volume | Weight | CO2 |
---|---|---|---|---|
Toyota | Vios | 1.0 | 780 | 99 |
Mitsubishi | Xpander | 1.2 | 1160 | 95 |
Skoda | Citigo | 1.0 | 929 | 95 |
Fiat | 500 | 0.9 | 865 | 90 |
Mini | Cooper | 1.5 | 1140 | 105 |
VW | Up! | 1.0 | 929 | 105 |
Skoda | Fabia | 1.4 | 1109 | 90 |
Mercedes | A-Class | 1.5 | 1365 | 92 |
Ford | Fiesta | 1.5 | 1112 | 98 |
Audi | A1 | 1.6 | 1150 | 99 |
Hyundai | I20 | 1.1 | 980 | 99 |
Suzuki | Swift | 1.3 | 990 | 101 |
Ford | Fiesta | 1.0 | 1112 | 99 |
Honda | Civic | 1.6 | 1252 | 94 |
Hundai | I30 | 1.6 | 1326 | 97 |
Opel | Astra | 1.6 | 1330 | 97 |
BMW | 1 | 1.6 | 1365 | 99 |
Mazda | 3 | 2.2 | 1280 | 104 |
Skoda | Rapid | 1.6 | 1119 | 104 |
Ford | Focus | 2.0 | 1328 | 105 |
Ford | Mondeo | 1.6 | 1584 | 94 |
Opel | Insignia | 2.0 | 1428 | 99 |
Mercedes | C-Class | 2.1 | 1365 | 99 |
Skoda | Octavia | 1.6 | 1415 | 99 |
Volvo | S60 | 2.0 | 1415 | 99 |
Mercedes | CLA | 1.5 | 1465 | 102 |
Audi | A4 | 2.0 | 1490 | 104 |
Audi | A6 | 2.0 | 1725 | 114 |
Volvo | V70 | 1.6 | 1523 | 109 |
BMW | 5 | 2.0 | 1705 | 114 |
Mercedes | E-Class | 2.1 | 1605 | 115 |
Volvo | XC70 | 2.0 | 1746 | 117 |
Ford | B-Max | 1.6 | 1235 | 104 |
BMW | 2 | 1.6 | 1390 | 108 |
Opel | Zafira | 1.6 | 1405 | 109 |
Mercedes | SLK | 2.5 | 1395 | 120 |
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.
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
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.
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)
[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.