Lineare Klassifikation (sklearn): Falsche Hyperplanes

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
cspecial
User
Beiträge: 4
Registriert: Donnerstag 6. Juni 2019, 10:36

Hallo,

ich habe das Problem, dass sich durch die Anwendung der sklearn-Bibliotheksfunktionen inkorrekte Trenngeraden ergeben. Hier eine kurze Einführung:
Das Nutzen des OneVsRest-Classifiers führt dazu, dass sich teilweise absurde Trennebenen ergeben, wie ich den Bildern zu sehen ist. X besteht aus 80 Zeilen und 371 Spalten. Wo könnte der Fehler liegen?

Code: Alles auswählen

#X wird zuvor aus einer csv-Datei ausgelesen
#Y sind die zu den einzelnen Zeilen (Datensatz) gehörenden Klassen

X = StandardScaler().fit_transform(X)
clf = OneVsRestClassifier(sklearn.svm.SVC(kernel = "linear")).fit(X[:, [283, 370]], Y)

for i in clf.estimators_:
    y = []

    for val in X[:, 283]:
        y = y + [(-1) * (val * i.coef_[0][0] + i.intercept_) / i.coef_[0][1]]

    plt.plot(X[:, 283], y)

for i in range(0, 80): 
    if (Y[i] not in colors_table.keys()): #Festlegen einer Farbe für die erstmalig erfasste Klasse
        colors_table[Y[i]] = color
        color = color + 1

    color_ = plot_colors[color_table[Y[i]]]
    plt.plot(X[i, 283], X[i, 370], "." + color_) 

plt.show()
Bild

Vielen Dank für eure Hilfe im Voraus!
Benutzeravatar
__blackjack__
User
Beiträge: 13071
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@cspecial: Was ist denn da absurd? Beim ersten stellt sich mir die Frage was Du denn bei *den* Daten erwartest, und beim zweiten, wo das Problem liegt?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
cspecial
User
Beiträge: 4
Registriert: Donnerstag 6. Juni 2019, 10:36

Die Datenpunkte in beiden Bilder sind identisch. Das zweite Bild ist durch das Heranzoomen an die Datenpunkte entstanden. Die blaue und orangene Trenngerade sind offensichtlich nicht korrekt. Es fehlt zum Beispiel die Trennebene, die die türkisen von den grünen Punkten trennt.

Gruß
cspecial
cspecial
User
Beiträge: 4
Registriert: Donnerstag 6. Juni 2019, 10:36

Ich hoffe, jemand kann mir helfen. Ich konnte bisher die Fehlerursache nicht ausfindig machen.
doerflia
User
Beiträge: 20
Registriert: Freitag 3. Mai 2019, 14:49

Hi,
welche Version von sklearn hast du installiert?

Versuche mal folgendes:

Code: Alles auswählen

clf = sklearn.svm.LinearSVC(gamma='scale', decision_function_shape='ovo')
clf.fit(X[:, [283, 370]], Y)
Also einerseitd den "LinearSVC" -Befehl, andererseits die Trennung von Modellerzeugung und Training.

Ämdert sich etwas?
doerflia
User
Beiträge: 20
Registriert: Freitag 3. Mai 2019, 14:49

"decision_function_shape" sollte bei multi-label-classification gesetzt sein.
In deinem Fall als "ovr".
Sorry hatte mich oben vertippt.
Antworten