In diesem Artikel Erklärt die logarithmische Konvertierung und die Box-Cox-Konvertierung. Dieser Artikel basiert hauptsächlich auf "Feature Quantity Engineering für maschinelles Lernen". Bitte probieren Sie es aus, wenn Sie werden.
Der Inhalt dieses Artikels wird auf YouTube ausführlicher erläutert. Wenn Sie also interessiert sind, lesen Sie ihn bitte durch.
Die Protokollkonvertierung wird hauptsächlich für die folgenden Zwecke verwendet.
--Lassen Sie es einer Normalverteilung folgen
Die logarithmische Funktion ist eine Funktion wie in der folgenden Abbildung gezeigt, und der Wert von x ist klein, da der Bereich von [1,10] nach [0,1] und der Bereich von [10.100] nach [1,2] kopiert wird. Es ist ersichtlich, dass der Fall in einem weiten Bereich kopiert wird und der Fall in einem engen Bereich kopiert wird, wenn der Wert von x groß ist.
Durch Verwendung dieser logarithmischen Transformation ist es möglich, die Oberseite der Schwerschwanzverteilung wie unten gezeigt zu komprimieren und die Unterseite zu erweitern, um sie näher an die Normalverteilung zu bringen. Viele Methoden des maschinellen Lernens machen keine besonderen Annahmen über die Grundgesamtheit ** nichtparametrische Modelle **, so dass es nicht erforderlich ist, sich der Normalverteilung anzunähern, aber die Verteilung der statistischen Grundgesamtheit wird angenommen ** parametrisches Modell * Wenn Sie * verwenden, muss die Verteilung der Daten normal sein.
Ferner kann durch Verwendung einer logarithmischen Umwandlung für die folgenden Daten mit einer großen Dispersion die Dispersion verringert werden.
** Vor dem Anwenden der logarithmischen Konvertierung (Verteilung: 5.0e + 06) **
** Nach Anwendung der logarithmischen Konvertierung (Verteilung: 0.332007) **
** Beispielcode für die Anwendung der logarithmischen Konvertierung **
log.py
import numpy as np
import pandas as pd
##Feste Zufallszahl
np.random.seed(100)
data_array = []
for i in range(1, 10000):
max_num = i if i > 3000 else 1000
s = np.random.randint(0, max_num, 10)
data_array.extend(s)
data = pd.DataFrame({'Listen Count': data_array})
data_log = pd.DataFrame()
##Addiere 1, um zu verhindern, dass es 0 wird
data_log['Listen Count'] = np.log10(data['Listen Count'] + 1)
Konvertierung, die durch die folgende Formel definiert werden kann
y=\begin{eqnarray}
\left\{
\begin{array}{l}
\frac{x^\lambda - 1}{\lambda}~~~~~(if ~~ \lambda\neq0) \\
\log(x)~~~~~(if ~~ \lambda=0)
\end{array}
\right.
\end{eqnarray}
Durch Verwendung der Box-Cox-Transformation, um die Daten bis zu einem gewissen Grad einer Normalverteilung zu folgen, können die Daten einer Normalverteilung folgen. (* Es kann jedoch nur verwendet werden, wenn die Daten positiv sind.)
Die folgende Grafik zeigt diese Konvertierung. Sie müssen den Lambda-Wert bestimmen, bevor Sie die Box-Cox-Transformation verwenden. Unter Verwendung der wahrscheinlichsten Methode wird das Lambda so bestimmt, dass die konvertierten Daten der Normalverteilung am nächsten kommen.
Wenn Sie die Box-Cox-Transformation für die tatsächlich verteilten Daten verwenden, wie in der folgenden Abbildung gezeigt, können Sie sehen, dass sie in eine Verteilung konvertiert werden können, die als Normalverteilung erscheint.
** Vor dem Anwenden der Box-Cox-Konvertierung **
** Nach dem Anwenden der Box-Cox-Konvertierung **
** Beispielcode für die Anwendung der Box-Cox-Konvertierung **
from scipy import stats
import numpy as np
import pandas as pd
##Feste Zufallszahl
np.random.seed(100)
##Datengenerierung
data_array = []
for i in range(1, 1000):
s = np.random.randint(1, i * 100, 10)
data_array.extend(s)
data = pd.DataFrame({'Listen Count': data_array})
##Box-Cox-Konvertierung
rc_bc, bc_params = stats.boxcox(data['Listen Count'])
print(bc_params) ##0.3419237117680786
Das Q-Q-Diagramm ist ein Diagramm von gemessenen und idealen Werten. Mit anderen Worten, wenn es sich um eine gerade Linie handelt, kann gesagt werden, dass der gemessene Wert eine Normalverteilung ist. Unten sehen Sie eine grafische Darstellung der Originaldaten, der Daten nach der logarithmischen Konvertierung und der Daten nach der Box-Cox-Konvertierung.
Originale Daten
** Nach logarithmischer Umwandlung **
** Nach Box-Cox-Konvertierung **
Aus diesen Ergebnissen können wir erkennen, dass die Box-Cox-Transformation der normalsten Verteilung folgen konnte.
Ich plane, Rezensionen und Kommentarvideos von technischen Büchern auf YouTube zu veröffentlichen, wobei der Schwerpunkt auf maschinellem Lernen liegt. Wir stellen auch Unternehmen vor, die Sie kennen sollten, wenn Sie in die IT gehen. 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
https://yolo-kiyoshi.com/2018/12/26/post-1037/ https://toukei-lab.com/box-cox%E5%A4%89%E6%8F%9B%E3%82%92%E7%94%A8%E3%81%84%E3%81%A6%E6%AD%A3%E8%A6%8F%E5%88%86%E5%B8%83%E3%81%AB%E5%BE%93%E3%82%8F%E3%81%AA%E3%81%84%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E8%A7%A3%E6%9E%90 https://toukeier.hatenablog.com/entry/2019/09/08/224346 https://sigma-eye.com/2018/09/23/qq-plot/
Recommended Posts