Seite 1 von 1

scikitlearn werte so übergeben

Verfasst: Freitag 23. August 2019, 21:06
von Darknet
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

Re: scikitlearn werte so übergeben

Verfasst: Freitag 23. August 2019, 21:18
von ThomasL
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.

Re: scikitlearn werte so übergeben

Verfasst: Samstag 24. August 2019, 09:36
von ThomasL
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)

Re: scikitlearn werte so übergeben

Verfasst: Montag 26. August 2019, 22:12
von Darknet
Wo werden:
colums 'pred' und ID-Label definiert

Re: scikitlearn werte so übergeben

Verfasst: Dienstag 27. August 2019, 06:11
von ThomasL
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.

Re: scikitlearn werte so übergeben

Verfasst: Dienstag 27. August 2019, 23:35
von Darknet
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.

Re: scikitlearn werte so übergeben

Verfasst: Mittwoch 28. August 2019, 06:12
von ThomasL
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'