Angenommen, ich möchte einen Klassifizierer lernen, der einen Vektor von Zahlen als Eingabe verwendet und eine Klassenbezeichnung als Ausgabe gibt. Meine Trainingsdaten bestehen aus einer großen Anzahl von Eingabe-Ausgabe-Paaren.
Wenn ich jedoch einige neue Daten teste, sind diese Daten normalerweise nur teilweise vollständig. Wenn der Eingabevektor beispielsweise die Länge 100 hat, können nur 30 der Elemente Werte erhalten, und der Rest ist "unbekannt".
Betrachten Sie als Beispiel die Bilderkennung, wenn bekannt ist, dass ein Teil des Bildes verdeckt ist. Oder betrachten Sie die Klassifizierung im allgemeinen Sinne, wenn bekannt ist, dass ein Teil der Daten beschädigt ist. In allen Fällen weiß ich genau, welche Elemente im Datenvektor die unbekannten Teile sind.
Ich frage mich, wie ich einen Klassifikator lernen kann, der für diese Art von Daten funktioniert. Ich könnte die "unbekannten" Elemente einfach auf eine Zufallszahl setzen, aber da es oft mehr unbekannte Elemente als bekannte gibt, klingt dies nicht nach einer guten Lösung. Oder ich könnte Elemente in den Trainingsdaten zufällig in "unbekannt" ändern und mit diesen anstatt mit den vollständigen Daten trainieren, aber dies könnte eine erschöpfende Stichprobe aller Kombinationen bekannter und unbekannter Elemente erfordern.
Insbesondere denke ich über neuronale Netze nach, bin aber offen für andere Klassifikatoren.
Irgendwelche Ideen? Vielen Dank!
quelle
Antworten:
Ich denke, es gibt einen vernünftigen Weg, um es mit neuronalen Netzen zum Laufen zu bringen.
Lassen Sie Ihren Wert für unbekannt 0 sein. Jetzt wählen Sie im Training eine Eingabe aus und setzen einige ihrer Werte mit der Wahrscheinlichkeit zufällig auf 0 , wobei p Ihr erwarteter Anteil fehlender Eingaben zur Testzeit ist. Beachten Sie, dass dieselbe Eingabe bei verschiedenen Iterationen an verschiedenen Positionen Nullen hat.p
Ich habe es noch nie zuvor gesehen, aber dies wäre sehr ähnlich zu Dropout (eine bekannte Regularisierungsmethode in neuronalen Netzen) in Ihren Eingangsneuronen anstelle der versteckten Neuronen. Ich denke nicht, dass es eine gute Idee ist, dies im Allgemeinen zu tun, aber wenn Sie dazu gezwungen sind (wie in Ihrem Fall), ist es zumindest theoretisch nah genug an etwas, von dem bekannt ist, dass es funktioniert.
quelle
Ich denke, es gibt einige Möglichkeiten, die mit jedem Klassifikator funktionieren:
Abgesehen davon können Sie baumbasierte Klassifizierer (z. B. zufällige Gesamtstrukturen) verwenden. Wenn ein Baum eine Aufteilung eines fehlenden Features auswerten muss, können die Daten einfach an beide untergeordneten Knoten weitergegeben werden.
quelle