Làm thế nào để chuẩn hóa một mảng nếu độ lệch chuẩn bằng 0?


8

Tôi đang cố gắng chuẩn hóa các cột dữ liệu cho hồi quy tuyến tính.

Một trong các cột có độ lệch chuẩn = 0.

def standardize(X):
    return (X - mean(X)) / std(X) 

Vì vậy, mã này không hoạt động.

Có bất kỳ thủ thuật để giải quyết vấn đề này? Tôi đã thử hai điều

  1. Ném ra cột với độ lệch chuẩn 0 vì đó là một tham số vô dụng.
  2. Thêm một số tiếng ồn rất nhỏ như vào một trong các phần tử của cột để hàm hoạt động.10-10standardize

Cảm ơn bạn!


Bạn đang làm đúng. Là tùy chọn thứ hai, sẽ tốt hơn khi thêm nhiễu phân phối ngẫu nhiên thông thường với độ lệch chuẩn nhỏ cho mọi giá trị trong cột. Nhưng vì tùy chọn đầu tiên đơn giản hơn, nó được ưa thích hơn.
O_Devinyak

16
Nếu độ lệch chuẩn bằng 0, thì cột được điền bởi một giá trị. Vì vậy, nếu mục tiêu của bạn là chuẩn bị dữ liệu cho hồi quy, bạn có thể ném cột ra, vì nó sẽ không đóng góp gì cho hồi quy. Thêm tiếng ồn nhỏ sẽ chỉ cung cấp cho bạn nhiều vấn đề hơn.
mpiktas

4
(Với lời cảnh báo mà @mpiktas mặc nhiên giả định hồi quy sẽ chứa một số hạng không đổi, thường là như vậy.) Lưu ý rằng việc thêm tiếng ồn nhỏ sẽ khiến cột này và hằng số cực kỳ song song, có khả năng tạo ra tất cả các loại sự tàn phá trong số giải pháp do tính đa hình cao. Nhưng tại sao tiêu chuẩn hóa các cột ở nơi đầu tiên? Điều này sẽ xảy ra tự động, sử dụng hầu hết mọi phương pháp giải pháp tốt.
whuber

5
@Pratik, tôi không nghĩ có cách nào để biến một biến có phương sai bằng 0 thành phương sai 0 và phương sai 1. Nếu bạn thực hiện tùy chọn (2) ở trên, bạn thực sự chỉ cần thay thế biến của mình bằng các số ngẫu nhiên được tiêu chuẩn hóa.
Macro

Câu trả lời:


7

Tình huống bạn mô tả sẽ phát sinh do một trong hai tình huống sau:

  1. Cột bạn đang đề cập đến là cột 1 được thêm vào ma trận hiệp phương sai để hồi quy tuyến tính của bạn có thuật ngữ chặn .
  2. Cột là một cột khác với cột được đề cập trước đó, cung cấp cho bạn hai cột hằng [****].

Đối với Kịch bản 1 : bỏ qua cột đó, chuẩn hóa tất cả các cột khác và sau đó chạy hồi quy như bình thường.

Tuy nhiên, đối với Kịch bản 2 , bạn sẽ phải loại bỏ hoàn toàn cột không đổi bổ sung đó. Trong thực tế, bất kể câu hỏi về Tiêu chuẩn hóa , bạn sẽ không bao giờ có thể chạy hồi quy với hai cột không đổi kể từ đó bạn sẽ có cộng tuyến hoàn hảo . Kết quả là ngay cả khi bạn cố gắng chạy hồi quy, chương trình máy tính sẽ nhổ ra một thông báo lỗi và bỏ nửa chừng [Lưu ý: đây là bởi vì một OLS hồi quy đòi hỏi ma trận X'X được không ít cho những thứ để làm việc ra chính xác].

Dù sao, chúc may mắn với, ừm, thoái lui!

[****] Chỉ cần làm rõ: Ý tôi là "hai cột hằng số" là bạn có một cột trong đó mọi phần tử là '1' và một cột thứ hai trong đó mọi phần tử là một hằng số 'k' .. .


1

Cách đúng sẽ là xóa cột tính năng khỏi dữ liệu. Nhưng như một hack tạm thời -

Bạn chỉ có thể thay thế 0 std thành 1 cho tính năng đó. Điều này về cơ bản có nghĩa là giá trị tỷ lệ sẽ bằng 0 đối với tất cả các điểm dữ liệu cho tính năng đó. Điều này có ý nghĩa vì điều này ngụ ý rằng các giá trị tính năng không sai lệch ngay cả một bit tạo thành giá trị trung bình (vì các giá trị là hằng số, hằng số là giá trị trung bình.)

FYI- Đây là những gì sklearn làm! https://github.com/scikit-learn/scikit-learn/blob/7389dbac82d362f296dc2746f10e43ffa1615660/sklearn/pre Processing / data.py # L70


Độ lệch chuẩn là 0 có nghĩa là tính năng này không đổi và do đó không hữu ích cho dự đoán. Thay đổi độ lệch chuẩn cho một hằng số không có ý nghĩa.
Michael R. Chernick

Vâng, nó sẽ không có ý nghĩa gì từ góc độ mô hình hóa, tôi chỉ đề nghị nó là một hack để không gặp phải rắc rối xóa cột mỗi khi một tính năng không đổi xuất hiện trong một tập dữ liệu.
PankajKabra

0

Tính năng có phương sai bằng không là vô dụng, hãy loại bỏ nó.

Hãy xem xét điều này, nếu đây là tính năng duy nhất , bạn sẽ không học được gì về phản ứng với tính năng này từ dữ liệu. Trong trường hợp đa biến, cần đại số tuyến tính để đi đến cùng một kết luận, nhưng ý tưởng là như nhau.

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.