Làm thế nào để chia tỷ lệ một mảng các số nguyên đã ký trong phạm vi từ 0 đến 1?


Câu trả lời:


24

Điều này được gọi là bình thường hóa dựa trên sự thống nhất. Nếu bạn có một vectơ X , bạn có thể có được một phiên bản chuẩn hóa của nó, giả sử Z , bằng cách thực hiện:

Z=Xmin(X)max(X)min(X)

1
Cách tiếp cận này còn được gọi là chuẩn hóa tối thiểu tối đa (vì chúng tôi đang sử dụng các giá trị tối thiểu và tối đa)
Shagun Sodhani

Có thể sử dụng phương pháp này để bình thường hóa một giá trị đại diện cho tỷ lệ phần trăm và có thể âm nhưng luôn cao hơn -2% và thấp hơn 30%? Sẽ không khó hơn cho một mạng lưới thần kinh để có được manh mối về ý nghĩa giá trị nếu tôi bình thường hóa nó theo cách này?
Ivan

3

Tìm số dương lớn nhất và số nhỏ nhất (âm nhất) trong mảng. Thêm giá trị tuyệt đối của số nhỏ nhất (âm nhất) vào mỗi giá trị trong mảng. Chia mỗi kết quả cho sự khác biệt giữa số lớn nhất và số nhỏ nhất.


@Jonathan: không quan trọng miễn là cả hai giá trị đều từ cùng một mảng, nguyên bản hoặc được cập nhật. Vì cùng một số được thêm vào mỗi giá trị, sự khác biệt giữa tối thiểu và tối đa giữ nguyên.
RemcoGerlich

1

nói rằng bạn có một vectơ / mảng các giá trị v = [1, -2, 3]

minV = Math.min.apply(Math, v);;
for(var i=0; i<v.length; i++) {v[i] -= minV;}
maxV = Math.max.apply(Math, v);;
for(var i=0; i<v.length; i++) {v[i] /= ( maxV - minV );}

Đầu ra ở cuối sẽ được v = [0.6, 0, 1]. Giải trình:

  1. Đẩy toàn bộ phạm vi giá trị để bắt đầu từ 0, do đó chúng tôi không có tiêu cực

  2. Chia các giá trị theo (tối đa - tối thiểu) của phạm vi, do đó tối đa sẽ là 1


1

Trước khi bạn làm điều đó, bạn có thể muốn kiểm tra các ngoại lệ. Nói 99% dữ liệu nằm trong phạm vi (-5, 5), nhưng một anh chàng nhỏ bé nhận giá trị 25,0. Mảng được chuẩn hóa của bạn sẽ co cụm xung quanh (0, 0,3) và điều đó sẽ gây ra vấn đề cho mạng lưới thần kinh học hỏi.

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.