Leicht verständlich erklären: Normalisierung der Datenvorverarbeitung (mit Python-Code)

Technische Fragen und Antworten

Dieser Artikel stammt aus dem Teilen der technischen Gruppe Freunde. Wenn Sie beitreten möchten, führen Sie die folgenden Schritte aus

Derzeit wurde eine technische Austauschgruppe eröffnet, und die Gruppe hat mehr als 3.000 Personen.Der beste Weg, um beim Hinzufügen zu vermerken, ist: Quelle + Interessenrichtung, was praktisch ist, um gleichgesinnte Freunde zu finden

Methode ①, WeChat-ID hinzufügen: dkl88191, Bemerkungen: von CSDN + technischer Austausch
Methode ②, WeChat-Suche öffentliche Nummer: Python-Lernen und Data Mining, Hintergrundantwort: Gruppe + CSDN hinzufügen

1. Warum Datenvorverarbeitung?

  • Große Datenmengen, die gesammelt werden, können oft nicht sofort nach Erhalt verwendet werden.Zum Beispiel haben einige Daten mit großen Werten eine hohe Rechenkomplexität, sind nicht leicht zu konvergieren und lassen sich nur schwer statistisch verarbeiten.

  • Die Daten entsprechen nicht der Normalverteilung, und einige mathematische Analysen, die der Normalverteilung entsprechen, können nicht durchgeführt werden.

Um die Daten besser nutzen zu können, müssen wir die Daten standardisieren.

2. Datenstandardisierung

Die dimensionslose Verarbeitung von Daten löst hauptsächlich die Vergleichbarkeit von Daten. Es gibt viele Methoden der Datennormalisierung, häufig verwendet werden "Minimum-Maximum-Normalisierung", "Z-Score-Normalisierung" und "Dezimalskalen-Normalisierung".

Nach dem obigen Standardisierungsprozess werden die Originaldaten in dimensionslose Indexbewertungswerte umgewandelt, dh jeder Indexwert hat die gleiche Größenordnung, und eine umfassende Bewertung und Analyse kann durchgeführt werden. Hier konzentrieren wir uns auf die am häufigsten verwendete Datennormalisierungsverarbeitung, die darin besteht, die Daten einheitlich auf das [0,1]-Intervall abzubilden.

1. Normalisierte Ziele

1. Das Konvertieren der Daten in Dezimalzahlen im (0,1)-Intervall wird hauptsächlich zur Vereinfachung der Datenverarbeitung vorgeschlagen.Es ist bequemer und schneller, die Daten zur Verarbeitung auf den Bereich von 0 bis 1 abzubilden.

2. Ändern Sie den Dimensionsausdruck in einen dimensionslosen Ausdruck, um die Vergleichbarkeit von Daten zu lösen.

2. Die Vorteile der Normalisierung

1. Nach der Normalisierung wird die Geschwindigkeit des Gradientenabstiegs zum Finden der optimalen Lösung beschleunigt. Wenn das maschinelle Lernmodell die Gradientenabstiegsmethode verwendet, um die optimale Lösung zu finden, ist eine Normalisierung oft sehr notwendig, da es sonst schwierig oder sogar nicht möglich ist, zu konvergieren konvergieren.

2. Die Normalisierung hat das Potenzial, die Genauigkeit zu verbessern, einige Klassifikatoren müssen den Abstand zwischen Proben berechnen (z. B. den euklidischen Abstand), z. B. KNN. Wenn die Reichweite eines Merkmalsbereichs sehr groß ist, hängt die Entfernungsberechnung hauptsächlich von diesem Merkmal ab, was der tatsächlichen Situation widerspricht (z. B. ist die tatsächliche Situation, dass das Merkmal mit einer kleinen Reichweitenreichweite wichtiger ist).

3. Welche Algorithmen benötigen keine Normalisierung?

Probabilistische Modelle (Baummodelle) benötigen keine Normalisierung, da sie sich nicht um den Wert der Variablen kümmern, sondern um die Verteilung der Variablen und die bedingte Wahrscheinlichkeit zwischen den Variablen, wie z. B. Entscheidungsbäume, RF. Und Optimierungsprobleme wie Adaboost, SVM, LR, Knn, KMeans erfordern eine Normalisierung.

Drittens, Datennormalisierungsmethode

1.Min-Max-Normalisierung

Durch Durchlaufen aller Daten im Merkmalsvektor werden Max und Min aufgezeichnet und die Daten werden normalisiert, indem Max-Min als Basis verwendet wird (dh Min = 0, Max = 1): wobei Max der Maximalwert des Abtastdatenwerts ist , Min ist der Mindestwert der Beispieldaten.

def MaxMinNormalization(x,Max,Min):
 
    x = (x - Min) / (Max - Min);
 
    return x;

Verwenden Sie np.max() und np.min() in numpy, um die maximalen und minimalen Werte zu finden. Dieses Normalisierungsverfahren ist besser geeignet für den Fall eines numerischen Vergleichs. Dieses Verfahren hat einen Fehler: Wenn Max und Min instabil sind, kann das Normalisierungsergebnis leicht instabil werden, und der nachfolgende Verwendungseffekt ist ebenfalls instabil. Bei der tatsächlichen Verwendung können max und min durch empirische konstante Werte ersetzt werden.

ps: Die Methode zur Normalisierung der Daten auf den [a,b]-Intervallbereich:

(1) Finden Sie zuerst den Minimalwert Min und den Maximalwert Max der ursprünglichen Probendaten X
(2) Berechnen Sie den Koeffizienten: k=(ba)/(Max-Min)
(3) Erhalten Sie die auf [a, b] Intervall: Y=a+k(X-Min) oder Y=b+k(X-Max)

2. Z-Score-Normalisierung

Die gebräuchlichste Standardisierungsmethode ist die Z-Standardisierung, die auch die am häufigsten verwendete Standardisierungsmethode in SPSS ist. Die Standard-Standardisierungsmethode von spss ist die Z-Score-Standardisierung.

Diese Methode wird auch als Standardabweichungsstandardisierung bezeichnet und gibt den Mittelwert und die Standardabweichung der Originaldaten an, um die Daten zu standardisieren.

def  Z_ScoreNormalization(x,mu,sigma):
 
    x = (x - mu) / sigma;
 
    return x;

Die Funktionen mean und std in numpy und die von sklearn bereitgestellte StandardScaler -Methode können sowohl den Mittelwert als auch die Standardabweichung ermitteln. Der normierte Variablenwert schwankt um 0, größer als 0 bedeutet überdurchschnittlich und kleiner als 0 bedeutet unterdurchschnittlich.

Im Folgenden wird numpy verwendet , um eine Standardabweichungsstandardisierung einer Matrix zu erreichen

importiere numpy als np

x_np = np.array([[1.5, -1., 2.],
[2., 0., 0.]])
mean = np.mean(x_np, axis=0)
std = np.std(x_np, axis=0)
print('Der Anfangswert der Matrix ist: {}'.format(x_np))
print('Der Mittelwert der Matrix ist: {}\n Die Standardabweichung der Matrix ist: {}' .format(mean,std ))
other_trans_data = x_np - mean
other_trans_data = other_trans_data / std
print('Die normalisierte Standardabweichungsmatrix ist: {}'.format(another_trans_data))

Der Anfangswert der Matrix ist: [[ 1.5 -1.2.]
[ 2. 0. 0. ]]
Der Mittelwert der Matrix ist: [ 1.75 -0.5 1. ]
Die Standardabweichung der Matrix ist: [ 0,25 0,5 1. ]
Standard Die normalisierte Differenzmatrix ist: [[-1. -1. 1.]
[ 1. 1. -1.]]

Im Folgenden wird die von sklearn bereitgestellte StandardScaler-Methode verwendet

from sklearn.preprocessing import StandardScaler # Standardisierungstool
import numpy as np

x_np = np.array([[1.5, -1., 2.],
[2., 0., 0.]]) scaler
= StandardScaler()
x_train = scaler.fit_transform(x_np)
print('Der Anfangswert von die Matrix ist: {}'.format(x_np))
print('Der Mittelwert dieser Matrix ist: {}\n Die Standardabweichung dieser Matrix ist: {}'.format(scaler.mean_,np.sqrt(scaler .var_)))
print('Die standardisierte Matrix der Standardabweichung ist: {}'.format(x_train))

Der Anfangswert der Matrix ist: [[ 1.5 -1.2.]
[ 2. 0. 0. ]]
Der Mittelwert der Matrix ist: [ 1.75 -0.5 1. ]
Die Standardabweichung der Matrix ist: [ 0,25 0,5 1. ]
Standard Die normalisierte Differenzmatrix ist: [[-1. -1. 1.]
[ 1. 1. -1.]]

Um festzustellen, dass das Standardisierungstool von sklearn nach der Instanziierung zwei Attribute hat, eines ist mean_ (Mittelwert) und eines ist var_ (Varianz). Das Endergebnis ist dasselbe wie bei der Verwendung von numpy.

Warum ist die Standardabweichung der z-Score normalisierten Daten 1?

x-μ ändert nur den Mittelwert, die Standardabweichung ändert sich nicht, also wird der Mittelwert 0; (x-μ)/σ dividiert einfach die Standardabweichung durch σ mal, also wird die Standardabweichung 1.

3.Sigmoid-Funktion:

Die Sigmoidfunktion ist eine Funktion mit einer S-förmigen Kurve und stellt eine gute Schwellwertfunktion dar. Sie ist zentralsymmetrisch bei (0, 0,5) und hat eine relativ große Steigung um (0, 0,5), und wenn die Daten gegen unendlich tendieren und negativ unendlich Wenn , tendiert der zugeordnete Wert unendlich zu 1 und 0. Entsprechend der Änderung der Formel kann die Segmentierungsschwelle geändert werden.Hier als Normalisierungsverfahren betrachten wir nur den Fall von (0, 0,5) als Segmentierungsschwelle:

from matplotlib import pyplot as plt
import numpy as np
import math


def sigmoid_function(z):
    fz = []
    for num in z:
        fz.append(1 / (1 + math.exp(-num)))
    return fz


if __name__ == '__main__':
    z = np.arange(-10, 10, 0.01)
    fz = sigmoid_function(z)
    plt.title('Sigmoid Function')
    plt.xlabel('z')
    plt.ylabel('σ(z)')
    plt.plot(z, fz)
    plt.show()

Zusammenfassen

Es geht vor allem darum , das Konzept der Datenstandardisierung nach der StandardScaler -Methode von sklearn im maschinellen Lernen zu entdecken und den Friedman-Test weiter zu verstehen.

Ich denke du magst

Origin blog.csdn.net/m0_59596937/article/details/127181149
Empfohlen
Rangfolge