Dieser Artikel beschreibt die Binärisierung und Dezentralisierung, die als Vorverarbeitung für Zähldaten verwendet werden. 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.
Wie der Name schon sagt, wird der Zielwert binär gemacht. Betrachten Sie beispielsweise das folgende Beispiel.
Beispiel
Ich möchte ein System erstellen, das Songs empfiehlt, die Benutzern empfohlen werden.
Ich möchte die Häufigkeit, mit der der Benutzer einen Titel gehört hat, als Feature-Menge verwenden. Wie soll ich die Daten formatieren?
Wenn ich dort die Daten eines bestimmten Benutzers herausgenommen habe, wird angenommen, dass die Daten wie folgt waren. Die erste Spalte ist die ID des Songs und die zweite Spalte gibt an, wie oft der Song gespielt wurde.
Das Ergebnis dieser Daten als Histogramm ist wie folgt.
Um nun ein dem Benutzer empfohlenes Lied empfehlen zu können, ist es wichtig zu wissen, ob der Benutzer an dem Lied interessiert war. Wenn das oben Gesagte jedoch unverändert bleibt, gibt ein Song, der 20 Mal angehört wurde, dem Modell die Information, dass es 20 Mal so gut gefällt wie ein Song, der nur einmal angehört wurde. Unter der Annahme, dass Sie interessiert sind, wenn Sie den Song einmal gespielt haben, werden die Songs, die mehr als einmal gespielt wurden, auf 1 und die Songs, die noch nie gespielt wurden, auf 0 binärisiert. Auf diese Weise konnte ich die Unterschiede zwischen den Songs beseitigen und sie in Songs, die mich interessierten, und Songs, die mich nicht interessierten, unterteilen.
Dies wird in einem Diagramm wie folgt dargestellt.
Der implementierte Code wird unten gezeigt.
binary.py
import math
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
##Feste Zufallszahl
np.random.seed(100)
##Generieren Sie Pseudodaten
data_array = []
for i in range(1, 1000):
s = np.random.randint(0, i * 10, 10)
data_array.extend(s)
data_array.extend(np.zeros(9000))
data = pd.DataFrame({'Listen Count': data_array})
data_binary = pd.DataFrame()
##Wahr durch Multiplikation mit 1,Falsch zu 1,In 0 konvertieren
data_binary['Listen Count'] = (data['Listen Count'] > 0) * 1
Durch die Durchführung der Verbreitung können kontinuierliche Daten als dieselbe Gruppe behandelt werden
Es gibt einen Verdienst
Wenn beispielsweise das Alter einer Person als numerische Daten angegeben wird, werden alle Altersgruppen in Gruppen eingeteilt, indem 0 bis 10 als Gruppe 1, 10 bis 20 als Gruppe 2 ..... und 80 oder mehr als Gruppe 9 gruppiert werden. Wird möglich sein. Möglicherweise haben Sie das Gefühl, dass Sie die numerischen Daten unverändert lassen können. Wenn jedoch mehrere Personen bis zu 110 Jahre alt sind, werden sie von den großen Datenmengen erfasst und der Einfluss anderer Faktoren wird verringert. Kann gemacht werden. Durch die Gruppierung von 80- und 110-Jährigen als ältere Menschen in derselben Gruppe können solche Probleme jedoch gelöst werden.
Dieses Mal wird das Alter durch 10 Jahre geteilt, aber je nach Lebensstil können 0 bis 12 (von der Kindheit bis zur Grundschule) in Gruppen 1 und 12 bis 17 (Schüler der Mittel- und Oberstufe) in Gruppen 2 eingeteilt werden.
Wenn sich die Zahl über mehrere Ziffern erstreckt, kann sie auch durch eine Potenz von 10 gruppiert werden, z. B. 0-9, 10-99, 100-999 usw.
** Beim Teilen durch 10 **
discretization.py
import numpy as np
small_counts = np.random.randint(0, 100, 20)
print(small_counts)
print(np.floor_divide(small_counts, 10))
** Ausführungsergebnis **
** Bei Gruppierung mit einer Potenz von 10 **
discretization.py
import numpy as np
large_counts = []
for i in range(1, 100, 10):
tmp = np.random.randint(0, i * 1000, 5)
large_counts.extend(tmp)
print(np.array(large_counts))
print(np.floor(np.log10(large_counts)))
Eine Unterscheidung mit einer festen Breite ist sehr praktisch, aber wenn es beispielsweise eine große Lücke in den Zähldaten gibt, gibt es mehrere Gruppen, die keine Daten enthalten. Verwenden Sie in solchen Fällen die Fraktion. Die Anzahl der Brüche teilt die Daten durch den Medianwert in zwei und die geteilten Daten durch den Medianwert weiter in zwei. Der Quadrant teilt also die Daten in vier und das Dezil teilt die Daten in zehn.
Zum Beispiel zeigt die folgende Tabelle, wie die Verteilungsdaten wie unten gezeigt ausreichen.
Wenn dieser Wert in der Grafik angezeigt wird, entspricht er der Abbildung unten, und Sie können sehen, dass die Breite so berechnet wird, dass die Datenmenge gleichmäßig ist.
Das implementierte Programm ist unten dargestellt.
** Bei Gruppierung nach Bruch (Grafik) **
quantile.py
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
##Feste Zufallszahl
np.random.seed(100)
data_array = []
for i in range(1, 1000):
s = np.random.randint(0, i * 10, 10)
data_array.extend(s)
data_array.extend(np.zeros(2000))
data = pd.DataFrame({'Listen Count': data_array})
deciles = data['Listen Count'].quantile([.1, .2, .3, .4, .5, .6, .7, .8, .9])
print(deciles)
plt.vlines(deciles, 0, 5500, "blue", linestyles='dashed')
** Bei Gruppierung nach Bruch **
quantile.py
import numpy as np
large_counts = []
for i in range(1, 100, 10):
tmp = np.random.randint(0, i * 1000, 5)
large_counts.extend(tmp)
np.array(large_counts)
#In Quadranten konvertieren
print(pd.qcut(large_counts, 4, labels=False))
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
Recommended Posts