Tôi không thể hiểu trang của StandardScaler
tài liệu trong tài liệu của sklearn
.
Bất cứ ai có thể giải thích điều này với tôi trong điều kiện đơn giản?
Tôi không thể hiểu trang của StandardScaler
tài liệu trong tài liệu của sklearn
.
Bất cứ ai có thể giải thích điều này với tôi trong điều kiện đơn giản?
Câu trả lời:
Ý tưởng đằng sau StandardScaler
là nó sẽ biến đổi dữ liệu của bạn sao cho phân phối của nó sẽ có giá trị trung bình 0 và độ lệch chuẩn là 1.
Trong trường hợp dữ liệu đa biến, điều này được thực hiện theo tính năng (nói cách khác là độc lập cho từng cột dữ liệu) .
Với sự phân bố của dữ liệu, mỗi giá trị trong tập dữ liệu sẽ có giá trị trung bình bị trừ đi và sau đó chia cho độ lệch chuẩn của toàn bộ tập dữ liệu (hoặc đối tượng trong trường hợp đa biến).
Giới thiệu: Tôi giả sử rằng bạn có một ma trận X
trong đó mỗi hàng / dòng là một mẫu / quan sát và mỗi cột là một biến / tính năng (nhân tiện, đây là đầu vào dự kiến cho bất kỳ sklearn
hàm ML nào - X.shape
nên như vậy [number_of_samples, number_of_features]
).
Cốt lõi của phương pháp : Ý tưởng chính là chuẩn hóa / chuẩn hóa tức là μ = 0
và σ = 1
các tính năng / biến / cột của bạn X
, riêng lẻ , trước khi áp dụng bất kỳ mô hình học máy nào.
StandardScaler()
sẽ chuẩn hóa các tính năng tức là mỗi cột của X, RIÊNG TƯ , để mỗi cột / tính năng / biến sẽ có μ = 0
và σ = 1
.
Tái bút: Tôi thấy câu trả lời được ủng hộ nhiều nhất trên trang này, sai. Tôi đang trích dẫn "mỗi giá trị trong tập dữ liệu sẽ bị trừ đi giá trị trung bình mẫu" - Điều này không đúng cũng không đúng.
Xem thêm: Làm thế nào và tại sao để Chuẩn hóa dữ liệu của bạn: Hướng dẫn python
Thí dụ:
from sklearn.preprocessing import StandardScaler
import numpy as np
# 4 samples/observations and 2 variables/features
data = np.array([[0, 0], [1, 0], [0, 1], [1, 1]])
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)
print(data)
[[0, 0],
[1, 0],
[0, 1],
[1, 1]])
print(scaled_data)
[[-1. -1.]
[ 1. -1.]
[-1. 1.]
[ 1. 1.]]
Xác minh rằng giá trị trung bình của mỗi đối tượng (cột) là 0:
scaled_data.mean(axis = 0)
array([0., 0.])
Xác minh rằng std của mỗi tính năng (cột) là 1:
scaled_data.std(axis = 0)
array([1., 1.])
Các phép toán:
CẬP NHẬT 08/2019 : Kết hợp các tham số đầu vào with_mean
và with_std
đến False
/ True
, tôi đã đưa ra câu trả lời ở đây: Sự khác biệt của StandardScaler giữa “with_std = False hoặc True” và “with_mean = False hoặc True”
[1.15, 1.15]
khi tôi tính toán như một con gấu trúc pd.DataFrame(scaled_data).std(0)
không:?
pd.DataFrame(scaled_data)[0]
tôi nhận được một chuỗi Name: 0, dtype: float64
các giá trị và [-1.0, 1.0, -1.0, 1.0]
. Xin lỗi vì định dạng
StandardScaler
, nó có làm cho thuật toán học máy hoạt động nhanh hơn hay giúp đưa ra quyết định chính xác hơn hay điều gì khác?
Cách tính toán nó:
Bạn có thể đọc thêm ở đây:
StandardScaler thực hiện nhiệm vụ Chuẩn hóa . Thông thường, một tập dữ liệu chứa các biến có tỷ lệ khác nhau. Ví dụ: tập dữ liệu Nhân viên sẽ chứa cột TUỔI với các giá trị trên thang 20-70 và cột LƯƠNG với các giá trị trên thang 10000-80000 .
Vì hai cột này khác nhau về tỷ lệ, chúng được Tiêu chuẩn hóa để có tỷ lệ chung trong khi xây dựng mô hình học máy.
Điều này rất hữu ích khi bạn muốn so sánh dữ liệu tương ứng với các đơn vị khác nhau. Trong trường hợp đó, bạn muốn loại bỏ các đơn vị. Để làm điều đó theo cách nhất quán của tất cả dữ liệu, bạn biến đổi dữ liệu theo cách mà phương sai là đơn nhất và giá trị trung bình của chuỗi là 0.
Các câu trả lời ở trên rất tuyệt, nhưng tôi cần một ví dụ đơn giản để giảm bớt một số lo ngại mà tôi đã có trong quá khứ. Tôi muốn đảm bảo rằng nó thực sự đang xử lý từng cột riêng biệt. Bây giờ tôi đã yên tâm và không thể tìm thấy ví dụ nào đã khiến tôi lo lắng. Tất cả các cột LÀ quy mô riêng biệt như mô tả của những người ở trên.
import pandas as pd
import scipy.stats as ss
from sklearn.preprocessing import StandardScaler
data= [[1, 1, 1, 1, 1],[2, 5, 10, 50, 100],[3, 10, 20, 150, 200],[4, 15, 40, 200, 300]]
df = pd.DataFrame(data, columns=['N0', 'N1', 'N2', 'N3', 'N4']).astype('float64')
sc_X = StandardScaler()
df = sc_X.fit_transform(df)
num_cols = len(df[0,:])
for i in range(num_cols):
col = df[:,i]
col_stats = ss.describe(col)
print(col_stats)
DescribeResult(nobs=4, minmax=(-1.3416407864998738, 1.3416407864998738), mean=0.0, variance=1.3333333333333333, skewness=0.0, kurtosis=-1.3599999999999999)
DescribeResult(nobs=4, minmax=(-1.2828087129930659, 1.3778315806221817), mean=-5.551115123125783e-17, variance=1.3333333333333337, skewness=0.11003776770595125, kurtosis=-1.394993095506219)
DescribeResult(nobs=4, minmax=(-1.155344148338584, 1.53471088361394), mean=0.0, variance=1.3333333333333333, skewness=0.48089217736510326, kurtosis=-1.1471008824318165)
DescribeResult(nobs=4, minmax=(-1.2604572012883055, 1.2668071116222517), mean=-5.551115123125783e-17, variance=1.3333333333333333, skewness=0.0056842140599118185, kurtosis=-1.6438177182479734)
DescribeResult(nobs=4, minmax=(-1.338945389819976, 1.3434309690153527), mean=5.551115123125783e-17, variance=1.3333333333333333, skewness=0.005374558840039456, kurtosis=-1.3619131970819205)
Sau đây là một ví dụ làm việc đơn giản để giải thích cách tính toán chuẩn hóa hoạt động. Phần lý thuyết đã được giải thích kỹ trong các đáp án khác.
>>>import numpy as np
>>>data = [[6, 2], [4, 2], [6, 4], [8, 2]]
>>>a = np.array(data)
>>>np.std(a, axis=0)
array([1.41421356, 0.8660254 ])
>>>np.mean(a, axis=0)
array([6. , 2.5])
>>>from sklearn.preprocessing import StandardScaler
>>>scaler = StandardScaler()
>>>scaler.fit(data)
>>>print(scaler.mean_)
#Xchanged = (X−μ)/σ WHERE σ is Standard Deviation and μ is mean
>>>z=scaler.transform(data)
>>>z
Phép tính
Như bạn có thể thấy trong đầu ra, giá trị trung bình là [6. , 2,5] và độ lệch std là [1,41421356, 0,8660254]
Dữ liệu là (0,1) vị trí là 2 Chuẩn hóa = (2 - 2,5) /0,8660254 = -0,57735027
Dữ liệu ở vị trí (1,0) là 4 Chuẩn hóa = (4-6) /1.41421356 = -1.414
Kết quả sau khi chuẩn hóa
Kiểm tra Trung bình và Độ lệch Std Sau khi Chuẩn hóa
Lưu ý: -2,77555756e-17 rất gần với 0.
Người giới thiệu
Sau khi áp dụng StandardScaler()
, mỗi cột trong X sẽ có giá trị trung bình là 0 và độ lệch chuẩn là 1.
Các công thức được liệt kê bởi những người khác trên trang này.
Cơ sở lý luận: một số thuật toán yêu cầu dữ liệu có dạng như thế này (xem tài liệu sklearn ).
each value in the dataset will have the sample mean value subtracted
-- Đây không phải là sự thật. Giá trị trung bình của MỖI đối tượng / cột sẽ được trừ khỏi các giá trị của cột cụ thể. Điều này được thực hiện theo cột khôn ngoan. Không cósample mean value subtracted
- Xem câu trả lời của tôi bên dưới