Dieser Artikel beschreibt die Skalierung und Normalisierung. Dieser Artikel basiert hauptsächlich auf "Feature Quantity Engineering für maschinelles Lernen". Bitte probieren Sie es aus, wenn Sie werden.
Der Bereich der numerischen Daten, die erfasst werden können, kann festgelegt sein oder nicht. Der Bereich, der für Zähldaten verwendet werden kann, wird grundsätzlich nicht bestimmt, und im Fall eines Modells, das für die Skala von Merkmalsgrößen wie die lineare Regression empfindlich ist, ist das Lernen aufgrund von Abweichungswerten oder Skalendifferenzen zwischen Merkmalsgrößen möglicherweise nicht erfolgreich. .. Die Vereinheitlichung der Skalierung wird in einem solchen Fall als Skalierung bezeichnet. Es gibt Min-Max-Skalierung, Standardisierung, L2-Normalisierung usw. für die Skalierung. Lassen Sie uns sie der Reihe nach einführen. Wenn Sie mehr über Skalierung erfahren möchten, lesen Sie bitte den Artikel hier.
Die Min-Max-Skalierung setzt den Minimalwert auf 0 und den Maximalwert auf 1. Wenn ein Ausreißer enthalten ist, kann der Bereich der Normalwerte, die genommen werden können, aufgrund des Einflusses des Ausreißers zu eng werden, sodass grundsätzlich die Standardisierung verwendet wird.
\tilde{x} = \frac{x - min(x)}{max(x) - min(x)}
import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
##Feste Zufallszahl
np.random.seed(100)
data_array = []
for i in range(1, 100):
s = np.random.randint(0, i * 10, 10)
data_array.extend(s)
data_array.extend(np.zeros(100))
data = pd.DataFrame({'Listen Count': data_array})
print(data.max()) # 977.0
print(data.min()) # 0
scaler = MinMaxScaler()
data_n = scaler.fit_transform(data)
data_n = pd.DataFrame(data_n)
print(data_n.max()) ## 1.0
print(data_n.min()) ## 0
In der Standardisierung ist der Mittelwert 0 und die Varianz 1. Wenn die ursprüngliche Merkmalsmenge eine Normalverteilung ist, ist die standardisierte Merkmalsmenge eine Standardnormalverteilung.
\tilde{x} = \frac{x - mean(x)}{sqrt(var(x))}
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
##Feste Zufallszahl
np.random.seed(100)
data_array = []
for i in range(1, 100):
s = np.random.randint(0, i * 10, 10)
data_array.extend(s)
data_array.extend(np.zeros(100))
data = pd.DataFrame({'Listen Count': data_array})
scaler = StandardScaler()
data_n = scaler.fit_transform(data)
data_n = pd.DataFrame({'Listen Count': data_n.ravel()})
print(data_n.var()) ##1.000918
print(data_n.mean()) ##6.518741e-17
Die L2-Normalisierung normalisiert die Merkmalsmenge durch Teilen durch die L2-Norm.
\tilde{x} = \frac{x}{||x||_2} \\
||x||_2 = \sqrt{x_1^2 + x_2^2+ ...+x_m^2 }
import numpy as np
import pandas as pd
from sklearn.preprocessing import normalize
##Feste Zufallszahl
np.random.seed(100)
data_array = []
for i in range(1, 100):
s = np.random.randint(0, i * 10, 10)
data_array.extend(s)
data_array.extend(np.zeros(100))
data = pd.DataFrame({'Listen Count': data_array})
##L2 Normalisierung
data_l2_normalized = normalize([data['Listen Count']],norm='l2')
data_l2 = pd.DataFrame({'Listen Count': data_l2_normalized.ravel()})
print(np.linalg.norm(data_l2_normalized,ord=2)) ## 0.999999999
Ich denke darüber nach, ein Video über IT auf YouTube zu veröffentlichen. Bitte abonnieren Sie den Kanal und geben Sie uns eine hohe Bewertung, da dies Sie motivieren wird, Youtube und Qiita zu aktualisieren. YouTube: https://www.youtube.com/channel/UCywlrxt0nEdJGYtDBPW-peg Twitter: https://twitter.com/tatelabo
Recommended Posts