Làm thế nào để bình thường hóa dữ liệu giữa -1 và 1?


36

Tôi đã thấy công thức chuẩn hóa tối thiểu tối đa nhưng điều đó bình thường hóa các giá trị trong khoảng từ 0 đến 1. Làm cách nào để bình thường hóa dữ liệu của tôi trong khoảng từ -1 đến 1? Tôi có cả giá trị âm và dương trong ma trận dữ liệu của mình.


1
Nếu bạn đang làm việc trong R, hãy xem chủ đề này để biết một vài lựa chọn. Cụ thể, một nhận xét về câu trả lời được chấp nhận có chức năng này khi bạn đặt 'newMax' thành 1 và 'newMin' thành -1 và chạy chức năng trên dữ liệu của bạn
mtreg

Bạn có thể tìm tài liệu tham khảo tại Wikipedia như sau: en.wikipedia.org/wiki/N normalization_(statistic)
salem

Ví dụ Javascript, được lấy từ đây . hàm convertRange (value, r1, r2) {return (value - r1 [0]) * (r2 [1] - r2 [0]) / (r1 [1] - r1 [0]) + r2 [0]; } convertRange (328,17, [300,77, 559,22], [1, 10]); >>> 1.9541497388276272
Giuseppe Canale

1
@covfefe nếu bạn vẫn ở đây, bạn có thể muốn chấp nhận một trong những câu trả lời
Simone

Câu trả lời:


97

x'= =x-tối thiểuxtối đax-tối thiểux
x[0,1]

Để chuẩn hóa trong bạn có thể sử dụng:[-1,1]

x"= =2x-tối thiểuxtối đax-tối thiểux-1

Nói chung, bạn luôn có thể nhận được một biến mới trong :x[một,b]

x= =(b-một)x-tối thiểuxtối đax-tối thiểux+một

15
Thành thật mà nói tôi không có trích dẫn cho việc này. Nó chỉ là một biến đổi tuyến tính của một biến ngẫu nhiên. Hãy xem tác động của các phép biến đổi tuyến tính lên sự hỗ trợ của một biến ngẫu nhiên.
Simone

-1

Tôi đã thử nghiệm trên dữ liệu được tạo ngẫu nhiên và

Xout=(ba)XinminXinmaxXinminXin+a

không bảo tồn hình dạng của phân phối. Tôi thực sự muốn thấy đạo hàm thích hợp của việc này bằng cách sử dụng các hàm của các biến ngẫu nhiên.

Cách tiếp cận đã bảo tồn hình dạng cho tôi là sử dụng:

Xobạnt= =Xtôin-μtôinσtôinσobạnt+μobạnt

Ở đâu

σobạnt= =b-một6

(Tôi thừa nhận rằng sử dụng 6 là một chút bẩn ) và

μobạnt= =b+một2

mộtb a = - 1 b = 1 và là phạm vi mong muốn; vì vậy theo câu hỏi ban đầu sẽ là và .bmột= =-1b= =1

Tôi đi đến kết quả từ lý do này

Zobạnt= =Ztôin

Xobạnt-μobạntσobạnt= =Xtôin-μtôinσtôin


3
Bạn có chắc chắn rằng điều này đảm bảo dữ liệu được chuyển đổi sẽ nằm trong giới hạn không? Trong R, thử : set.seed(1); scale(rnorm(1000))*.333. Tôi nhận được tối đa 1.230871. Phương pháp của bạn dường như chỉ là một tinh chỉnh về việc chuẩn hóa dữ liệu, thay vì bình thường hóa chúng theo yêu cầu. Lưu ý rằng câu hỏi không yêu cầu một phương pháp duy trì hình dạng của phân phối (đó sẽ là một yêu cầu kỳ lạ để chuẩn hóa).
gung - Phục hồi Monica

3
Tôi không chắc làm thế nào việc chuyển đổi ban đầu có thể không giữ được hình dạng của dữ liệu. Nó tương đương với việc trừ một hằng số và sau đó chia cho một hằng số, đó là những gì đề xuất của bạn làm và không thay đổi hình dạng của dữ liệu. Đề xuất của bạn giả định tất cả các dữ liệu nằm trong ba độ lệch chuẩn của giá trị trung bình, có thể hơi hợp lý với các mẫu nhỏ, phân phối bình thường, nhưng không phải với các mẫu lớn hoặc không bình thường.

1
@Noah Nó không tương đương với việc trừ và chia cho các hằng số, bởi vì min và max của dữ liệu là các biến ngẫu nhiên. Thật vậy, đối với hầu hết các phân phối cơ bản, chúng là các biến số khá - biến đổi nhiều hơn so với phần còn lại của dữ liệu - việc sử dụng chúng cho bất kỳ hình thức tiêu chuẩn hóa nào thường không phải là một ý tưởng tốt. Trong câu trả lời này, không rõ ý nghĩa của và hoặc chúng có thể liên quan đến dữ liệu như thế nào. mộtb
whuber

2
@whuber đúng, nhưng ý tôi là trong một tập dữ liệu đã cho (nghĩa là coi dữ liệu là cố định), chúng là các hằng số, giống như cách hàm trung bình mẫu và hàm độ lệch chuẩn của mẫu là hằng số khi chuẩn hóa tập dữ liệu. Ấn tượng của tôi là OP muốn bình thường hóa một tập dữ liệu chứ không phải phân phối.

@ Không, tôi có cùng một ấn tượng, nhưng tôi tin rằng bài viết hiện tại có thể đáp ứng với một cách giải thích khác.
whuber
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.