Bagaimana cara menormalkan data antara -1 dan 1?

36

Saya telah melihat rumus normalisasi min-max tetapi itu menormalkan nilai antara 0 dan 1. Bagaimana saya akan menormalkan data antara -1 dan 1? Saya memiliki nilai negatif dan positif dalam matriks data saya.

covfefe
sumber
1
Jika Anda bekerja di R, lihat utas ini untuk beberapa opsi. Secara khusus, komentar pada jawaban yang diterima memiliki fungsi ini di mana Anda mengatur 'newMax' ke 1 dan 'newMin' ke -1 dan menjalankan fungsi pada data Anda
mtreg
Anda dapat menemukan referensi di Wikipedia sebagai berikut: en.wikipedia.org/wiki/Normalization_(statistics)
salem
Contoh Javascript, diambil dari sini . function 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 jika Anda masih ada, Anda mungkin ingin menerima salah satu jawaban
Simone

Jawaban:

97

Dengan: Anda menormalkan fitur Andaxdalam[0,1].

x=xminxmaxxminx
x[0,1]

Untuk menormalkan dalam Anda dapat menggunakan:[1,1]

x=2xminxmaxxminx1

Secara umum, Anda selalu bisa mendapatkan variabel baru di :x[a,b]

x=(ba)xminxmaxxminx+a
Simone
sumber
15
Jujur saya tidak punya kutipan untuk ini. Ini hanyalah transformasi linear dari variabel acak. Lihat efek transformasi linear pada dukungan variabel acak.
Simone
-1

Saya menguji pada data yang dihasilkan secara acak, dan

Xout=(ba)XinminXinmaxXinminXin+a

tidak mempertahankan bentuk distribusi. Benar-benar ingin melihat derivasi yang tepat dari ini menggunakan fungsi variabel acak.

Pendekatan yang mempertahankan bentuk bagi saya menggunakan:

Xout=Xinμinσinσout+μout

dimana

σout=ba6

(Saya akui bahwa menggunakan 6 agak kotor ) dan

μout=b+a2

dan

aba=1b=1

Saya sampai pada hasil dari alasan ini

Zout=Zin

Xoutμoutσout=Xinμinσin

AL Verminburger
sumber
3
Apakah Anda yakin ini menjamin data yang diubah akan berada dalam batas? Dalam R, coba: set.seed(1); scale(rnorm(1000))*.333. Saya mendapatkan maks 1.230871. Metode Anda tampaknya hanya men-tweak pada standardisasi data, daripada menormalkannya seperti yang diminta. Perhatikan bahwa pertanyaan tidak menanyakan metode yang mempertahankan bentuk distribusi (yang akan menjadi persyaratan aneh untuk normalisasi).
gung - Reinstate Monica
3
Saya tidak yakin bagaimana transformasi asli bisa gagal mempertahankan bentuk data. Ini sama dengan mengurangi konstanta dan kemudian membaginya dengan konstanta, yang merupakan apa yang dilakukan proposal Anda, dan yang tidak mengubah bentuk data. Proposal Anda mengasumsikan semua data termasuk dalam tiga standar deviasi rata-rata, yang mungkin agak masuk akal dengan sampel kecil, yang kira-kira terdistribusi normal, tetapi tidak dengan sampel besar atau tidak normal.
Nuh
1
ab
2
@whuber benar, tapi saya maksudkan bahwa dalam dataset yang diberikan (yaitu, memperlakukan data sebagai tetap), mereka adalah konstanta, dengan cara yang sama contoh mean dan sampel fungsi standar deviasi sebagai konstanta ketika membakukan dataset. Kesan saya adalah OP ingin menormalkan dataset, bukan distribusi.
Nuh
@Noah saya memiliki kesan yang sama, tetapi saya percaya posting ini mungkin menanggapi interpretasi yang berbeda.
Whuber