[PYTHON] Ich habe mit Chainer eine supereinfache lineare Trennung versucht

Als Übung von Chainer habe ich ein einfaches lineares Trennungsproblem ausprobiert.

Umgebung

Aufgabe

Ich möchte eine Funktion lernen, um festzustellen, ob ich fettleibig bin oder nicht, indem ich Größe (cm), Gewicht (kg) und Brustumfang (cm) eingebe. Fettleibigkeit wird hier jedoch als BMI (Gewicht geteilt durch Größe im Quadrat) von 25 oder mehr definiert. Daher sind Informationen zu Gewicht und Größe ausreichend, um festzustellen, ob der Patient fettleibig ist oder nicht, und Informationen zum Brustumfang sind nicht erforderlich. Kann das diesmal hergestellte Lerngerät dann feststellen, ob es fettleibig ist oder nicht, indem es sich nur auf Größe und Gewicht konzentriert, ohne durch die Informationen auf dem Brustumfang verwirrt zu werden?

Daten

Ich habe Dummy-Daten in Excel erstellt. Die Flaggen für Größe, Gewicht, Brustumfang und Fettleibigkeit sind in einer durch Leerzeichen getrennten Linie angeordnet. Größe, Gewicht und Brustumfang wurden jeweils durch Hinzufügen einer normalen Zufallszahl mit einer angemessenen Varianz zum Durchschnittswert von Männern erzeugt. Das Adipositas-Flag wurde auf 1 gesetzt, wenn der aus Größe und Gewicht berechnete BMI 25 oder mehr betrug. Wir haben 1000 davon unabhängig voneinander hergestellt, 900 davon zum Lernen und 100 zur Bewertung.

 Größe Gewicht Brustumfang Fettleibigkeitsflagge
152.5110992	70.64096855	76.24909648	1
176.5483602	72.54812988	79.99468908	0
171.9815877	78.13768514	80.87788608	1
180.013773	77.60660479	79.71464192	0
171.9685041	81.20240554	84.93720091	1
186.3999693	77.03393024	82.25099179	0
175.1117213	81.23388203	86.89111757	1

data.png

Wie Sie sehen können, ist es fast linear.

Lerner

Nachdem ich Chainer geübt hatte, versuchte ich ein mehrschichtiges Perzeptron aufzubauen. Es hat eine dreischichtige Struktur mit drei Dimensionen für die Eingabe, vier Dimensionen für verborgene Elemente und zwei Dimensionen für die Ausgabe. (Da es sich um eine lineare Trennaufgabe handelt, kann sie mit einem einschichtigen Perzeptron durchgeführt werden.) Andere Einstellungen sind wie folgt.

--Aktivierungsfunktion: ReLu

class MLP(Chain):
  def __init__(self):
    super(MLP, self).__init__(
 # 3-4-2 dimensionales Netzwerk
      l1=L.Linear(3, 4),
      l2=L.Linear(4, 2),
     )
  def forward(self, x, t, train):
    h1 = F.dropout(F.relu(self.l1(x)), train=train)
    y = self.l2(h1)
    return F.softmax_cross_entropy(y, t), F.accuracy(y, t)

# Instanziierung
model = MLP()
# Adam wird als Optimierungsalgorithmus übernommen
optimizer = optimizers.Adam()
optimizer.setup(model)

 N = 900 # Anzahl der Trainingsdaten
 N_test = 100 # Anzahl der Bewertungsdaten
 n_epoch = 100 # Anzahl der Iterationen
 Batchgröße = 5 # Minibatch
# Unten weggelassen

Ergebnis

Die Fehlerfunktion und die Genauigkeitsrate wurden durch die Anzahl der Epochen aufgetragen. loss_acc.png

Es war etwas weniger als 80% Leistung. subtil?

Wir haben uns auch angesehen, welche Art von Ausgabe nach dem Lernen auf die Bewertungsdaten erfolgt.

 Höhe Gewicht Brustumfangssystem geschätzte Adipositas-Flagge Richtige Adipositas-Flagge
[ 179.30055237   69.73477936   84.73832703] 0 0
[ 176.89619446   84.05502319   85.10128021] 1 1
[ 172.04129028   77.36618805   87.89541626] 1 1
[ 168.48660278   73.91072845   84.5171814 ] 1 1
[ 166.53656006   71.42696381   83.17546844] 0 1
[ 163.44270325   77.11021423   90.57539368] 1 1
[ 180.63993835   77.33372498   85.33548737] 0 0
[ 165.73175049   71.87976837   80.57328033] 0 1

Der zweite und vierte von unten, die ursprünglich fettleibig waren, wurden als normal beurteilt. Alle von ihnen sind niedrig, wenn man nur das Gewicht betrachtet. Hast du die Beziehung zu deiner Größe nicht verstanden?

Wo man stecken bleibt

--Fallen Sie in eine lokale Lösung Es gab Zeiten, in denen ich in eine lokale Lösung geriet und das Lernen nicht fortgesetzt wurde. Ich reduzierte die Anzahl der Mini-Batches, ordnete den Anfangswert des Gewichts neu zu, versuchte es viele Male und versuchte es erneut, bis es gut gelernt war.

von jetzt an

Die Leistung dieser Aufgabe ist zu weniger als 80% niedrig. Ich möchte ein Gefühl dafür bekommen, indem ich verschiedene Anpassungen wie Lernrate, Mini-Batch-Größe, Abbrecherquote und Datennormalisierung vornehme.

Recommended Posts

Ich habe mit Chainer eine supereinfache lineare Trennung versucht
Ich habe versucht, die Sündenfunktion mit Chainer zu trainieren
Ich habe fp-Wachstum mit Python versucht
Ich habe versucht, mit Python zu kratzen
Ich habe versucht, mit Elasticsearch Ranking zu lernen!
Ich habe versucht, mit PyCaret zu clustern
Ich habe gRPC mit Python ausprobiert
Ich habe versucht, mit Python zu kratzen
Ich habe versucht, Follow Management mit Twitter API und Python (einfach)
Ich habe versucht, ListNet of Rank Learning mit Chainer zu implementieren
Ich habe versucht, Sätze mit summpy zusammenzufassen
Ich habe maschinelles Lernen mit liblinear versucht
Ich habe versucht, WebScraping mit Python.
Ich habe versucht, DeepPose mit PyTorch zu implementieren
Ich habe versucht, das Gesicht mit MTCNN zu erkennen
Ich habe versucht, Prolog mit Python 3.8.2 auszuführen.
Ich habe die SMTP-Kommunikation mit Python versucht
Ich habe versucht, Sätze mit GPT-2 zu generieren
Ich habe versucht, LightGBM mit Yellowbrick zu lernen
Ich habe versucht, das Gesicht mit OpenCV zu erkennen
Ich habe versucht, den DNN-Teil von OpenPose mit Chainer-CPU auszuführen
Ich habe eine multiple Regressionsanalyse mit Polypoly-Regression versucht
Ich habe versucht, eine SMS mit Twilio zu senden
Ich habe versucht, Amazon SQS mit Django-Sellerie zu verwenden
[Python] Super einfacher Test mit Assert-Anweisung
Ich habe versucht, Autoencoder mit TensorFlow zu implementieren
Ich habe Linebot mit Flasche (Anaconda) + Heroku ausprobiert
Ich habe versucht, AutoEncoder mit TensorFlow zu visualisieren
Machen Sie GUI-Apps mit tkinter ganz einfach
Ich habe versucht, Selen mit Headless-Chrom zu verwenden
Ich habe versucht, Faktoren mit Titanic-Daten zu analysieren!
Ich habe versucht, mit Kaggles Titanic (kaggle②) zu lernen.
765 Ich habe versucht, die drei Berufsfamilien durch CNN zu identifizieren (mit Chainer 2.0.0).
[AWS] [GCP] Ich habe versucht, die Verwendung von Cloud-Diensten mit Python zu vereinfachen
Ich habe eine funktionale Sprache mit Python ausprobiert
Ich habe versucht, den Winkel von Sin und Cos mit Chainer zu lernen
(Maschinelles Lernen) Ich habe versucht, die Bayes'sche lineare Regression bei der Implementierung sorgfältig zu verstehen
Ich habe versucht, mit Python ② (Fibonacci-Zahlenfolge) aufzuklären.
Ich habe versucht, DeepPose mit PyTorch PartⅡ zu implementieren
Ich habe versucht, CVAE mit PyTorch zu implementieren
Ich habe versucht, mit Pillow mit dem Bild zu spielen
Ich habe versucht, TSP mit QAOA zu lösen
Ich habe mit Jupyter eine einfache Bilderkennung versucht
Ich habe versucht, CNN mit Resnet fein abzustimmen
Ich habe versucht, natürliche Sprache mit Transformatoren zu verarbeiten.
[Zaif] Ich habe versucht, den Handel mit virtuellen Währungen mit Python zu vereinfachen
# Ich habe so etwas wie Vlookup mit Python # 2 ausprobiert
Ich habe versucht, meinen eigenen Quellcode mit Chainer v2 alpha kompatibel zu machen
Ich habe versucht, Runenfiguren mit Scikit-Learn handschriftlich zu erkennen
Ich habe versucht, nächstes Jahr mit AI vorherzusagen
Ich habe Hunderte Millionen SQLite mit Python ausprobiert
Ich habe versucht, das Lesen von Dataset mit PyTorch zu implementieren
Ich habe versucht, lightGBM, xg Boost mit Boruta zu verwenden
Ich habe versucht, Bilder mit CIFAR-10 mit Keras-Learning- zu erkennen.
Ich habe versucht, mit TF Learn die logische Operation zu lernen
Ich habe versucht, GAN (mnist) mit Keras zu bewegen