Küsimus:
Kuidas kujutada piiramatut muutujat arvuna vahemikus 0 kuni 1
Russell Gallop
2010-08-02 19:38:55 UTC
view on stackexchange narkive permalink

Ma tahan kujutada muutujat arvuna vahemikus 0 kuni 1. Muutuja on mittenegatiivne täisarv, millel puudub omane seos. Ma kaardistan 0 kuni 0, kuid mida saan kaardistada 1 või numbritega vahemikus 0 kuni 1?

Piirangute saamiseks võiksin kasutada selle muutuja ajalugu. See tähendaks, et kui maksimum suureneb, pean vana statistika ümber korrigeerima. Kas ma pean seda tegema või on muid trikke, millest peaksin teadma?

Kuidas teie andmed välja näevad? Kas väärtused on seotud?
@spencer See foorum tervitab (IMHO) kõiki. Teil on täiesti hea. Kas saaksite oma andmete kohta natuke täpsemat teavet anda? Kas teie andmed pole negatiivsed? ...
Minu andmed ei ole negatiivsed ega ole seotud.
Kuna mis tahes vähenev funktsioon vahemikus $ [0, \ infty) \ kuni [0, 1] $ teeb selle triki ära, on teil palju paindlikkust. Kuid mõned meetodid on rakendusest paremad kui teised. Mis on teie eesmärk sellise uuesti väljenduse otsimisel?
Mõõtan sisu paljudes erinevates dimensioonides ja tahan, et saaksin teha võrdlusi selle osas, kui asjakohane on sisupala. Lisaks tahan nendes dimensioonides kuvada seletatavaid ja hõlpsasti mõistetavaid väärtusi.
@Spencer Kuidas täpselt sisu ja "asjakohasust" mõõdate? Näiteks suvalistes skaalades, nagu loendused, proportsioonid, vaatamissagedused, seosed muu sisuga jne. Erinevat tüüpi mõõtmed saavad kasu erinevat tüüpi mõõtmetest.
Mõõtan neid meelevaldsetes mõõtkavades. Kui vana on sisu. Mitu "punkti" sisu saab. Ise teatanud "huvist" sisu domeeni vastu.
Üks lihtsamaid teisendusi, mida saaksite kasutada, on andmete teisendamine kvantiiliskoorideks.
Kuidas oleks kasutada protsentiili astmeid?
Kaheksa vastused:
#1
+35
Henrik
2010-08-02 19:56:35 UTC
view on stackexchange narkive permalink

Selleks on väga levinud nipp (nt konstantistlikus modelleerimises) hüperboolse puutuja tanhi kasutamine "pritsimisfunktsioonina". See mahutab kõik numbrid automaatselt vahemikku -1 1. Mis teie puhul piirab vahemikku 0 kuni 1. Aastates r ja matlab saate selle tanh () kaudu.

Teine squash-funktsioon on logistiline funktsioon (tänu Simonile nime eest), mille pakub $ f (x) = 1 / (1 + e ^ {- x}) $, mis piirab vahemikku 0 kuni 1 (kui 0 on kaardistatud väärtusega .5). Seega peate tulemuse korrutama 2-ga ja lahutama 1, et mahutada oma andmed vahemikku 0 kuni 1.

Siin on mõned lihtsad R-koodid, mis joonistavad mõlemad funktsioonid (punane tanh, sinine logistiline), nii et näete, kuidas mõlemad squash:

  x <- seq (0,20,0.001) plot (x, tanh (x), pch = ".", col = "punane", ylab = "y") punkti (x, (1 / (1 + exp (-x))) * 2-1, pch = ".", col = "sinine")  
Tänan sind vastuse eest. See lahendab piiramise probleemi. Minu andmete jaoks läheb see minu andmete jaoks väga kiiresti 1-ni, nii et ma arvan, et järgmine asi, mida pean tegema, on selle teabe laiendamine, et keskenduda huvitavale vahemikule, mida saaksin selle ajaloo põhjal teha kartmata köidetest lahkuda, piirdudes lihtsalt piiriga.
#2
+26
onestop
2011-03-15 15:04:24 UTC
view on stackexchange narkive permalink

Nagu sageli, oli minu esimene küsimus " miks sa tahad seda teha", siis nägin, et sa oled sellele juba vastanud küsimuse kommentaarides: " Mõõdan sisu mitmel erineval dimensioonil ja tahan, et saaksin teha võrdlusi selle kohta, kui asjakohane sisutükk on. Lisaks tahan kuvada nendes dimensioonides väärtusi, mis on seletatavad ja hõlpsasti mõistetavad. "

Selle saavutamiseks pole põhjust andmeid normaliseerida nii, et max oleks 1 ja min null, ja minu arvates oleks see üldiselt halb idee . Maksimaalsed või minimaalsed väärtused võivad väga kergesti olla kõrvalarvud, mis ei esinda populatsiooni jaotust. @osknows lahusmärkus $ z $ -skooride kasutamise kohta on palju parem idee . $ z $ -skoorid (teise nimega standardhinded) normaliseerivad iga muutuja, kasutades selle standardhälvet, mitte vahemikku. Standardhälvet mõjutavad kõrvalekalded vähem. $ Z $ -skoori kasutamiseks on soovitatav, et igal muutujal oleks ligikaudu normaalne jaotus või vähemalt ligikaudu sümmeetriline jaotus (st see ei oleks tugevalt viltu), kuid vajadusel saate rakendada asjakohast andmete teisendust kõigepealt selle saavutamiseks; millist transformatsiooni kasutada, võiks leida sobivaima Box – Coxi teisenduse.

nii et pole midagi teha andmete sundimisega $ [0, 1] $ -le ja üldiselt nõustun standardimisega, kui autor seda tõesti otsib :) Vastasin enne arutelu ilmumist, nii et ilmselt kustutage oma vastus, kui see üks on õige :)
Kui inimene on mures kõrvalekallete pärast, võiks kaaluda keskmise absoluuthälbe (mediaanist) kasutamist standardhälbe asemel.R-s kasutage funktsiooni `mad ()`.Ja kui keegi on mures vildakuse pärast, võib algsete vaatluste asemel kasutada andmete auastmeid.R-is oleks see "rank ()", kuid kui keegi kavatseb seda uutel andmetel kasutada, oleks "ecdf ()" parem alternatiiv ("ecdf (x)" tagastab uue funktsiooni, mis * põhimõtteliselt * annabväärtus $ p $ kuni $ p $ -kvantiilini $ x $, nt 0 (tõesti $ 1 / n $) madalaima väärtuseni $ x $, $ 1 $ kõrgeima väärtuseni, 0,5 mediaani jne)
#3
+10
Simon Byrne
2010-08-02 20:20:12 UTC
view on stackexchange narkive permalink

Töötab mis tahes sigmoidfunktsioon:

erf ei ole eriti mugav funktsioon, kui te ei soovi seda pigem tuletise jaoks kasutada.
Lõpuks kasutasin lihtsat logistilist funktsiooni koos väikeste muudatustega: (1 / (1 + java.lang.Math.exp (-1 * (tegur * i))) - 0,5) * 2. Valisin teguri 0,05, misnäib hästi töötavat i puhul vahemikus 0 kuni paarsada.
1,0 / (1,0 + exp (-1,69897 * (x-keskmine (x)) / sd (x))) on lähedane ligikaudne väärtus pnormile
#4
+4
stoplan
2010-08-02 21:49:48 UTC
view on stackexchange narkive permalink

Lisaks Henriku ja Simon Byrne'i headele ettepanekutele võiksite kasutada f (x) = x / (x + 1). Võrdluseks võib öelda, et logistiline funktsioon suurendab erinevusi, kui x kasvab suuremaks. See tähendab, et erinevus f (x) ja f (x + 1) vahel on logistikafunktsiooniga suurem kui f (x) = x / (x + 1). Võite seda efekti soovida või mitte.

#5
+1
terrace
2010-08-02 21:57:34 UTC
view on stackexchange narkive permalink

Selle rakendamiseks on kaks võimalust, mida ma tavaliselt kasutan. Töötan alati reaalajas olevate andmetega, seega eeldab see pidevat sisestamist. Siin on mõni pseudokood:

treenitava minmaxi kasutamine:

  define function peak: // hoiab saadud suurimat väärtustdefine funktsiooni kaudu : // hoiab madalaimat saadud väärtust funktsiooni kalibreerimine defineerib: // vahetab, kas tipp () ja küna () saavad väärtusi või ei määra funktsiooni skaalat: // kaardistab sisendivahemiku [küna.väärtus () kuni tipp. väärtus ()] kuni [0.0 kuni 1.0]  

Selle funktsiooni täitmiseks peate kas sooritama esmase koolitusetapi (kasutades calibrate () ) või treenima uuesti aadressil teatud intervallidega või vastavalt teatud tingimustele. Kujutage näiteks ette sellist funktsiooni:

  define function outBounds (val, thresh): if val > (thresh * peak.value ()) || val < (trough.value () / thresh): kalibreeri ()  

tipp ja küna ei saa tavaliselt väärtusi, kuid kui outBounds () saab väärtuse, mis on praegusest tipust rohkem kui 1,5 korda suurem või väiksem kui praegune küna 1,5-ga jagatuna, siis kutsutakse calibrate () , mis võimaldab funktsioonil automaatselt uuesti kalibreerida.

Ajaloolise minmax kasutamine:

  var arrayLength = 1000var histArray [arrayLength] define historiaArray (f): histArray.pushFront (f) // lisab massiivi algusse fdefine max (massiiv): // leiab maksimaalse elemendi histArray-st [] return maxdefine min (massiiv): // leiab histArray-st minimaalse elemendi [] return mindefine-funktsiooni skaala: // kaardistab sisendivahemiku [min (histArray) kuni max (histArray)] kuni [0.0 kuni 1.0] main () historyArray (histArray) skaala (min (histArray), max (histArray), histArray [0]) // histArray [0] on praegune element  
Seda kõike saab rakenduses Max / MSP / Jitter rakendada esimese näite objektide [tipp] ja [küna] ning teise näite puhul [jit.3m].
#6
+1
osknows
2011-03-15 02:20:55 UTC
view on stackexchange narkive permalink

Minu varasemas postituses on meetod järjestamiseks vahemikus 0 kuni 1. Nõuanded klassifikaatori sisendi korrelatsiooni kohta

Siiski kasutab minu kasutatud järjestus Tmin / Tmax valimi min / max, kuid võite leida populatsiooni min / max sobivamaks. Vaadake ka z-punkte

#7
+1
Chris
2016-08-24 15:04:50 UTC
view on stackexchange narkive permalink

Muudele vastustele, mis viitavad pnormile ...

Potentsiaalselt optimaalse meetodi jaoks parameetrite valimiseks soovitan pnormi jaoks seda ligikaudset väärtust. + exp (-1.69897 * (x-keskmine (x)) / sd (x)))

pnormish

See on sisuliselt Softmaxi normaliseerimine.

Viide Pnorm näpistuses

#8
  0
DanB
2011-03-16 05:27:25 UTC
view on stackexchange narkive permalink

Väga lihtne võimalus on iga teie andmete arvu jagamine suurima arvuga teie andmetes. Kui teil on palju väikeseid ja paar väga suurt numbrit, ei pruugi see teavet hästi edastada. Kuid see on suhteliselt lihtne; kui arvate, et sellise graafiku koostamisel on mõttekas teave kadunud, võiksite proovida ühte keerukamat tehnikat, mida teised on soovitanud.



See küsimus ja vastus tõlgiti automaatselt inglise keelest.Algne sisu on saadaval stackexchange-is, mida täname cc by-sa 2.0-litsentsi eest, mille all seda levitatakse.
Loading...