StandardScaler trước và sau khi chia dữ liệu


20

Khi tôi đọc về việc sử dụng StandardScaler, hầu hết các khuyến nghị đều nói rằng bạn nên sử dụng StandardScaler trước khi chia dữ liệu thành train / test, nhưng khi tôi kiểm tra một số mã được đăng trực tuyến (sử dụng sklearn) thì có hai cách sử dụng chính.

1- Sử dụng StandardScalertrên tất cả các dữ liệu. Ví dụ

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_fit = sc.fit(X)
X_std = X_fit.transform(X)

Hoặc là

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X = sc.fit(X)
X = sc.transform(X)

Hoặc đơn giản

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_std = sc.fit_transform(X)

2- Sử dụng StandardScalertrên dữ liệu tách.

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform (X_test)

Tôi muốn chuẩn hóa dữ liệu của mình, nhưng tôi bối rối không biết phương pháp nào là tốt nhất!

Câu trả lời:


25

Để ngăn chặn thông tin về việc phân phối bộ kiểm tra rò rỉ vào mô hình của bạn, bạn nên chọn tùy chọn # 2 và chỉ phù hợp với bộ chia tỷ lệ trên dữ liệu đào tạo của bạn, sau đó chuẩn hóa cả bộ đào tạo và bộ kiểm tra với bộ chia tỷ lệ đó. Bằng cách điều chỉnh bộ chia tỷ lệ trên bộ dữ liệu đầy đủ trước khi chia (tùy chọn số 1), thông tin về bộ kiểm tra được sử dụng để chuyển đổi tập huấn luyện, lần lượt được truyền xuống.

Ví dụ, việc biết phân phối toàn bộ tập dữ liệu có thể ảnh hưởng đến cách bạn phát hiện và xử lý các ngoại lệ, cũng như cách bạn tham số hóa mô hình của mình. Mặc dù bản thân dữ liệu không được tiết lộ, thông tin về việc phân phối dữ liệu là. Do đó, hiệu suất của bộ kiểm tra của bạn không phải là ước tính thực sự về hiệu suất trên dữ liệu chưa xem. Một số thảo luận thêm mà bạn có thể thấy hữu ích là về Xác thực chéo .


Điều tương tự sẽ áp dụng cho một bộ xác nhận? Nói cách khác, nếu tôi chia Bộ huấn luyện của mình thành các bộ Đào tạo và Xác thực, tôi có tìm hiểu sự phù hợp trên chỉ tàu và sau đó áp dụng cho cả bộ Xác thực và Kiểm tra sau không? hoặc tôi có tìm hiểu sự phù hợp trên toàn bộ tập dữ liệu bao gồm cả ví dụ Xác thực và Đào tạo và chỉ lo lắng về việc áp dụng nó cho Tập kiểm tra sau này.
Phil Glau

hi - đúng vậy, chỉ phù hợp trên tàu - không phải xác nhận hoặc kiểm tra
redhqs

0

Làm thế nào về những điều sau đây:

from sklearn.preprocessing import StandardScaler

sc = StandardScaler()

X_train = sc.fit_transform(X_train)

X_test = sc.fit_transform (X_test)

Bởi vì nếu X_test = sc.transform(X_test), nó trả về lỗi X_testchưa được trang bị. Hay tôi đã bỏ lỡ một cái gì đó ở đây?


2
Chỉ cần loại bỏ sự phù hợp khỏi X_test
tsumaranaina

0

Bạn không nên thực hiện fit_transform (X_test) trên dữ liệu thử nghiệm.
Sự phù hợp đã xảy ra ở trên.

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform (X_test)

Xin lỗi, điều này có nghĩa là một câu trả lời cho những gì bên dưới :)
starsini
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.