scikitlearn werte so übergeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Darknet
User
Beiträge: 21
Registriert: Freitag 6. Januar 2017, 19:42

Hallo

Ich habe fogenden Code:

Code: Alles auswählen

import pandas as pd
import numpy as np
from sklearn.multioutput import MultiOutputClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split


data = pd.read_csv('fdd.csv',header=None, encoding = "ISO-8859-1")


x = data[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]]

y = data[[24,25]]

x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.33)


cls = KNeighborsClassifier(n_neighbors=3)
classifier = MultiOutputClassifier(cls, n_jobs=-1)
cls.fit(x,y)


print(cls.score(x,y))
print(cls.predict(x))

Soweit funktioniert alles. Ich möchte jetzt nur gerne zur besseren zuordung
y = data[[24,25]] für die Ausgabe von cls.predict(x) zweit werte von data hinzufügen diese sollen Quasi eine beschriftung sein aber es soll mit ihnen nicht gerechnet werden. Also Quasi hat der Wert 24 und 25 entweder true oder false und aber zu zuordnung hat jede Zahl noch eine ID diese ist bei der eingabe der Daten fest und soll der Ausgabe wieder zugeordnet werden
Benutzeravatar
ThomasL
User
Beiträge: 1378
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Das hier macht keinen Sinn:

Code: Alles auswählen

cls.fit(x,y)
print(cls.score(x,y))
print(cls.predict(x))
warum erst die Daten in train und test aufteilen und dann doch mit der gesamten Datenmenge arbeiten?

Code: Alles auswählen

x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.33)
Besser so:

Code: Alles auswählen

cls.fit(x_train, y_train)
print(cls.predict(x_test))
print(cls.score(x_test, y_test))
Das mit der ID muss ich mir morgen überlegen, ist jetzt zu spät dafür.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
ThomasL
User
Beiträge: 1378
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

So könnte man das mit dem zusätzlichem ID-Label machen.

Code: Alles auswählen

import pandas as pd
import numpy as np
from sklearn.multioutput import MultiOutputClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split

# Ich habe mal eine beliebige CSV mit 12 Spalten genommen
df = pd.read_csv('wine.csv', header=None, skiprows=1, sep=';')

# dann eine Dummy Spalte angehängt, wie der Inhalt aussieht ist dir überlassen, hier ist es nur der Text "ID"
df[12] = 'ID'

# aufteilen in Features und Target
x = df[[0,1,2,3,4,5,6,7,8,9,10]]
# mit dem MultiOutputClassifier habe ich noch nicht gearbeitet, deshalb hier nur ein Target und die ID-Spalte
y = df[[11,12]] # 12 ist die ID Spalte

# aufteilen in train und test samples
x_train, x_test, y_train, y_test = train_test_split(x.values, y.values, test_size=0.33)


clf = KNeighborsClassifier(n_neighbors=3)
#classifier = MultiOutputClassifier(clf, n_jobs=-1)  # mit diesem Classifier habe ich noch nicht gearbeitet
# daher hier nur ein 1D Target
train_target = y_train[:,0].astype(np.int) # index 0 denn da ist ja Spalte 11 drin
clf.fit(x_train, train_target)

test_target = y_test[:,0].astype(np.int)
print(clf.score(x_test, test_target))

predictions = clf.predict(x_test)
print(predictions)

pred_df = pd.DataFrame(predictions, columns=['pred'])
pred_df['ID-Label'] = y_test[:, 1]  # hier fügen wir die ID-Spalte 12 hinzu
print(pred_df)
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Darknet
User
Beiträge: 21
Registriert: Freitag 6. Januar 2017, 19:42

Wo werden:
colums 'pred' und ID-Label definiert
Benutzeravatar
ThomasL
User
Beiträge: 1378
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

auf der drittletzten und vorletzten Zeile, hast du den Code mal laufen lassen?
Ich kann dir dazu nur Jupyter Lab oder minimal Jupyter Notebook empfehlen, überhaupt für Data Science Coding.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Darknet
User
Beiträge: 21
Registriert: Freitag 6. Januar 2017, 19:42

Ich habe in laufel lassen ich hatte es auch schonmal so mit MultiOutputClassifier gemacht. macht meinen scre Wert kaputt mit 3-4 werten.

Ja ich sehe das id unten steht ich meine wo die ausglesen werden sind das Textfiles.
Benutzeravatar
ThomasL
User
Beiträge: 1378
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Meine Kommentare im Code hast du bemerkt?

Code: Alles auswählen

# Ich habe mal eine beliebige CSV mit 12 Spalten genommen
df = pd.read_csv('wine.csv', header=None, skiprows=1, sep=';')

# dann eine Dummy Spalte angehängt, wie der Inhalt aussieht ist dir überlassen, hier ist es nur der Text "ID"
df[12] = 'ID'
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Antworten