Ich arbeite mit einer Matrix X
und einem Etikett für jede Zeile in dieser Matrix y
. Ich beantrage SVM maschinelles Lernen mitWie kann ich die Testgröße bei der Kreuzvalidierung mit train_test_split konstant halten?
df = pd.read_csv('./data/Step7_final.csv', index_col=False, encoding="ISO-8859-1")
y = df.iloc[:, 1].values
Dann: definiert
df = pd.read_csv("./data/svm_matrix_0.csv", sep=',',header=None, encoding="ISO-8859-1")
df2 = df.convert_objects(convert_numeric=True)
X = df_2.values
y
als:
clf = svm.SVC(kernel='linear', C=1) #specify classifier
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2) #splitting randomly the training and test data
clf.fit(X_train,y_train) #training of machine
Nun würde Ich mag die X_train
Größe variieren X
ist definiert als und Berechnen des Zug- und Testfehlers für jeden Wert von X_train
mit:
test_error = clf.score(X_test, y_test)
train_error = clf.score(X_train, y_train)
Die X_train
sollte in der Größe erhöhen (beispielsweise 15 verschiedene Werte), und dann sollten die Werte in einem Wörterbuch in Form gespeichert werden: {X_train size: (test_error, train_error)}
.
Ich habe versucht:
array = [0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9]
dicto = {}
for i in array:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = i)
clf.fit(X_train,y_train)
test = clf.score(X_test, y_test)
train = clf.score(X_train, y_train)
dicto[i] = test, train
print(dicto)
Aber es funktioniert nicht, da ich auch die X_test
unterschiedlichen bin. Kann jemand meinen Code so anpassen, dass er nur die Größe von X_train
variiert (so dass die Fehler bei einer zunehmenden Gesamtgröße des Datensatzes berechnet werden)?
Ich verstehe Ihre Frage nicht, tun Sie Ihre Testdatengröße konstant halten wollen? – hashcode55
Ja, meine Testdatengröße sollte konstant sein, aber die Größe meiner Trainingsdaten sollte von einem niedrigen bis zu einem hohen Wert variieren. Ich möchte eine Lernkurve erstellen;) – Papie