Ich möchte eine Variable als Zahl zwischen 0 und 1 darstellen. Die Variable ist eine nicht negative Ganzzahl ohne inhärente Grenze. Ich ordne 0 zu 0 zu, aber was kann ich 1 oder Zahlen zwischen 0 und 1 zuordnen?
Ich könnte den Verlauf dieser Variablen verwenden, um die Grenzen anzugeben. Dies würde bedeuten, dass ich alte Statistiken neu formulieren muss, wenn sich das Maximum erhöht. Muss ich das tun oder gibt es andere Tricks, die ich kennen sollte?
normalization
Russell Gallop
quelle
quelle
Antworten:
Ein sehr gebräuchlicher Trick, um dies zu tun (z. B. in der konnektionistischen Modellierung), besteht darin, den Tangens Hyperbolicus als "Quetschfunktion" zu verwenden. Er fügt automatisch alle Zahlen in das Intervall zwischen -1 und 1 ein. Dies schränkt in Ihrem Fall den Bereich von ein 0 bis 1. In
r
undmatlab
Sie bekommen es übertanh()
.Eine weitere Squashing-Funktion ist die logistische Funktion (danke an Simon für den Namen), die durch bereitgestellt wird und den Bereich von 0 bis 1 einschränkt (wobei 0 auf 0,5 abgebildet wird). Sie müssten also das Ergebnis mit 2 multiplizieren und 1 subtrahieren, um Ihre Daten in das Intervall zwischen 0 und 1 einzupassen.f(x)=1/(1+e−x)
Hier ist ein einfacher R-Code, der beide Funktionen aufzeichnet (Tanh in Rot, Logistic in Blau), damit Sie sehen können, wie beide Squashs funktionieren:
quelle
Wie oft lautete meine erste Frage " Warum willst du das?". Dann habe ich gesehen, dass du dies bereits in den Kommentaren zu der Frage beantwortet hast: " Ich messe Inhalte über viele verschiedene Dimensionen hinweg und ich möchte es sein Vergleiche in Bezug auf die Relevanz eines bestimmten Inhalts anstellen können. Außerdem möchte ich Werte über diese Dimensionen hinweg anzeigen, die erklärbar und leicht verständlich sind. "
Es gibt keinen Grund, die Daten zu normalisieren, sodass das Maximum 1 und das Minimum Null ist, um dies zu erreichen, und ich bin der Meinung, dass dies im Allgemeinen eine schlechte Idee wäre . Die Max- oder Min-Werte können sehr leicht Ausreißer sein , die für die Bevölkerungsverteilung nicht repräsentativ sind. @osknows Abschiedsanmerkung über die Verwendung von Punktenz ist eine viel bessere Idee . Punkte (auch als Standardwerte bezeichnet) normalisieren jede Variable anhand ihrer Standardabweichung und nicht anhand ihres Bereichs. Die Standardabweichung wird von Ausreißern weniger beeinflusst. Um zz z -scores, es ist vorzuziehen, dass jede Variable eine ungefähr normale Verteilung oder zumindest eine ungefähr symmetrische Verteilung hat (dh keine starke Schräglage aufweist), aber wenn nötig, können Sie zuerst eine geeignete Datentransformation anwenden , um dies zu erreichen; Welche Transformation zu verwenden ist, lässt sich bestimmen, indem die am besten passende Box-Cox-Transformation ermittelt wird .
quelle
mad()
rank()
ecdf()
ecdf(x)
Jede Sigmoid-Funktion funktioniert:
quelle
Zusätzlich zu den guten Vorschlägen von Henrik und Simon Byrne können Sie f (x) = x / (x + 1) verwenden. Zum Vergleich: Die logistische Funktion überträgt die Unterschiede, wenn x größer wird. Das heißt, der Unterschied zwischen f (x) und f (x + 1) ist mit der logistischen Funktion größer als mit f (x) = x / (x + 1). Möglicherweise möchten Sie diesen Effekt nicht.
quelle
My earlier post has a method to rank between 0 and 1. Advice on classifier input correlation
However, the ranking I have used, Tmin/Tmax uses the sample min/max but you may find the population min/max more appropriate. Also look up z scores
quelle
To add to the other answers suggesting pnorm...
For a potentially optimal method for selecting parameters I suggest this approximation for pnorm.
This is essentially Softmax Normalization.
Reference Pnorm in a pinch
quelle
There are two ways to implement this that I use commonly. I am always working with realtime data, so this assumes continuous input. Here's some pseudo-code:
Using a trainable minmax:
This function requires that you either perform an initial training phase (by using
calibrate()
) or that you re-train either at certain intervals or according to certain conditions. For instance, imagine a function like this:Using an historical minmax:
quelle
A very simple option is dividing each number in your data by the largest number in your data. If you have many small numbers and a few very large ones, this might not convey the information well. But it's relatively easy; if you think meaningful information is lost when you graph the data like this, you could try one of the more sophisticated techniques that others have suggested.
quelle