Aidemy 2020/10/29
Hallo, es ist ja! Ich bin eine knusprige Literaturschule, aber ich war an den Möglichkeiten der KI interessiert, also ging ich zur KI-Fachschule "Aidemy", um zu studieren. Ich möchte das hier gewonnene Wissen mit Ihnen teilen und habe es in Qiita zusammengefasst. Ich freue mich sehr, dass viele Menschen den vorherigen zusammenfassenden Artikel gelesen haben. Vielen Dank! Dies ist der vierte Beitrag der Vorverarbeitung für maschinelles Lernen. Freut mich, dich kennenzulernen.
Was diesmal zu lernen ・ Über den kontinuierlichen Wert ・ Konvertierung von Kategoriedaten ・ Informationen zur Skaleneinstellung ・ Informationen zu vertikalen und horizontalen Daten
-Wenn Sie Daten vorverarbeiten, möchten Sie möglicherweise fortlaufende Werte in Kategorien unterteilen. Insbesondere gibt es Altersdaten [10,15,18,20,27,32], und ich möchte diese in "Teenager, 20er, 30er" (Kategorisierung kontinuierlicher Werte) unterteilen.
-Die Ausführung erfolgt über die Funktion cut (x, bins = [], labels = [], right =) __ von Pandas. ・ Über jedes Argument - "X" __ steht für die zu übergebenden Daten. -Übergeben Sie die Trennzeichen als Array an __ "Bins" __.
x = [10,15,18,20,27,32]
bins = [10,20,30,40] #10~20,20~30,30~Bedeutet 40
labels = ['10er','20er Jahre','30er Jahre']
#Kategorisieren
pd.cut(x,bins=bins,labels=labels,right=False)
#[10er,10er,10er,20er Jahre,20er Jahre,30er Jahre]
-Konvertieren Sie die im vorherigen Abschnitt kategorisierten Daten in __ "1", wenn sie zu dieser Kategorie gehören, in "0" __, wenn sie nicht zu dieser Kategorie gehören.
result = pd.cut(x,bins=bins,labels=labels,right=False)
df = pd.DataFrame({'age':result})
#one-Hot-Codierung ausführen
pd.get_dummies(df['age'],prefix='age')
'''
age_Teen Alter_20 Jahre alt_30er Jahre
0 1 0 0
1 1 0 0
2 1 0 0
3 0 1 0
4 0 1 0
5 0 0 1
'''
-Wenn Daten mit einem relativ großen Wert in den an das Modell übergebenen numerischen Datenelementen enthalten sind, kann die Lerneffizienz verringert werden.
-Code (Skalenanpassung von 10 normalen Zufallszahlen mit einer durchschnittlichen Verteilung von 50)![Screenshot 2020-10-29 16.24.15.png](https: //qiita-image-store.s3.ap-northeast-1.amazonaws. com / 0/698700 / 7c891221-4251-8f4b-e922-6f155fff7af3.png)
Wenn Sie Daten so konvertieren, dass sie sich __ "Normalverteilung" __ nähern, führen Sie __Box-Cox-Konvertierung __ durch. -Eine Normalverteilung ist eine Verteilung, bei der die Anzahl der Daten zur Mitte hin zunimmt und zu den Kanten hin abnimmt.
Wenn Sie eine Box-Cox-Konvertierung durchführen, verwenden Sie die Funktion __boxcox () __ des Moduls stats von scipy.
Zwei Variablen werden an die Boxcox-Funktion übergeben, die erste ist das konvertierte Array und die zweite ist der Parameter "λ", der während der Konvertierung verwendet wird.
・ Code (konvertiere x ^ 2 mit 3 Freiheitsgraden in Box-Cox)![Screenshot 2020-10-29 16.26.31.png](https: //qiita-image-store.s3.ap-northeast-1. amazonaws.com/0/698700/dd6b1340-1eb4-9a14-8011-8b5b63084156.png)
・ Ergebnis![Screenshot 2020-10-29 16.26.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/4291aee1-314c-7386- 274a-dabcec09dcfd.png)
-__ Vertikale Daten__ hat eine Struktur, die Daten "vertikal" erhöht (Hinzufügen von rows), wenn die Menge an Dateninformationen zunimmt, und horizontale Daten sind "horizontal". Bezieht sich auf eine Struktur, die die Daten erhöht (__ fügt Spalten__ hinzu).
-Verwenden Sie die __pivot-Funktion (Index, Spalten, Werte) __ von Pandas. -Für jedes Argument ist "Index" die Spalte des ursprünglichen DataFrame, der dieselben Elemente in einer Zeile kombiniert, "Spalten" ist die ursprüngliche Spalte zum Erstellen einer neuen Spalte und "Werte" ist die ursprüngliche Spalte, die den Wert der Spalte darstellt.
・ Im vorherigen Beispiel sind viele der gleichen Personen weiterhin dieselbe Person, sodass der "Index" verwendet wird und die "gekauften Artikel" horizontal erweitert werden, sodass die "Spalten" verwendet werden. Speichern Sie es also in "Werten".
df = pd.DataFrame({
'Käufer': ['Sato','Tanaka','Kato','Tanaka','Kato'],
'Gekaufte Artikel': ['Stift','Papier-','Getränk','Schere','Seetang']
'Preis': [500, 250, 250, 600, 200]
})
##Konvertieren Sie vertikale Daten in horizontale Daten
pivoted_df = df.pivot(index='Käufer',columns='Gekaufte Artikel',values='Preis').reset_index()
pivoted_df.columns = pivoted_df.columns.set_names(None)
'''
Käufer Stift Papier Getränkescheren Kleber
0 Sato 500
1 Tanaka 250 600
2 Kato 250 200
'''
-Kann mit __melt (frame, id_vars, value_vars, var_name, value_name) __ von Pandas konvertiert werden. ・ Über jedes Argument ・ Frame: Konvertierungsquelle df -Id_vars: Schlüsselspalten (als Array übergeben) -Value_vars: Spalten, die die konvertierten Werte sind (als Array übergeben) -Var_name: Der Name der Spalte, die die horizontal erweiterten Spalten gruppiert -Wertname: Der Name der Spalte, die der konvertierte Wert sein soll
・ Die im vorherigen Abschnitt erstellten horizontalen Daten lauten wie folgt. __pd.melt (pivoted_df, id_vars = ['Käufer'], value_vars = ['Stift', 'Papier', 'Getränk', 'Schere', 'Kleber'], var_name = 'Kauf', Wertname = 'Preis ') __
・ Wenn Sie fortlaufende Werte kategorisieren möchten, verwenden Sie __cut (x, bins = [], labels = [], right =) __ von Pandas.
Diese Zeit ist vorbei. Vielen Dank für das Lesen bis zum Ende.
Recommended Posts