import pandas as pd from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.metrics import classification_report from sklearn.svm import SVC import numpy as np df = pd.read_csv("iris_pandas.csv") featurs = df.columns[:4].tolist() x=df[featurs] y=df["Species"] # Podela podataka na trening i test skup x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3) # Parametri za unakrsnu validacuju parameters = [{'C': [pow(2,x) for x in range(-6,10,2)], 'kernel' : ['linear'] }, {'C': [pow(2,x) for x in range(-6,10,2)], 'kernel': ['poly'], 'degree': [2, 3, 4, 5], 'gamma': np.arange(0.1, 1.1, 0.1), 'coef0': np.arange(0, 2, 0.5) }, {'C': [pow(2,x) for x in range(-6,10,2)], 'kernel' : ['rbf'], 'gamma': np.arange(0.1, 1.1, 0.1), }, {'C': [pow(2,x) for x in range(-6,10,2)], 'kernel' : ['sigmoid'], 'gamma': np.arange(0.1, 1.1, 0.1), 'coef0': np.arange(0, 2, 0.5) }] scores = ['precision', 'f1'] for score in scores: print("Mera ", score) print() """ SVM C : default=1.0 parametar za regularizaciju kernel : default=’rbf’ ‘linear’ ( ), ‘poly’ : ( gamma* + coef0)^degree vezani parametri: degree (stepen): default=3, gamma (koeficijent) : default= 1/n_features coef0 (nezavisni term) default=0.0 ‘rbf’, exp(-gamma*|x-x'|^2) vezani parametri: gamma (koeficijent) : default= 1/n_features gamma>0 ‘sigmoid’, (tanh(gamma* + coef0) vezani parametri: gamma (koeficijent) : default= 1/n_features coef0 (nezavisni term) default=0.0 probability : default=False da li proceniti verovatnocu class_weight : {dict, ‘balanced’} tezina klasa. Ako nije zadat parametar, sve klase imaju tezinu 1. Sa opcijom “balanced” tezine su inverzno proporcionalne frekvenciji klase u y decision_function_shape : ‘ovo’, ‘ovr’ or None, default=None oblik funkcije za odlucivanje klase: ‘ovr’ - one-vs-rest (n_samples, n_classes) ‘ovo’ - one-vs-one (n_samples, n_classes * (n_classes - 1) / 2) atributi: support_ -indeksi podrzavajucih vektora support_vectors_ : podrzavajuci vektori n_support_ : broj podrzavajucih vektora za svaku klasu dual_coef_ : niz oblika [n_class-1, n_SV] koeficijenti podrzavajucih vektora. Ukoliko postoji vise klasa, postoje koeficijenti za sve 1-vs-1 klasifikatore. coef_ : tezine dodeljene aributima ( samo za linearni kernel) intercept_ : konstane u funckiji odlucivanja """ clf = GridSearchCV(SVC(), parameters, cv=5, scoring='%s_macro' % score) clf.fit(x_train, y_train) print() print("Ocena uspeha po klasifikatorima:") means = clf.cv_results_['mean_test_score'] stds = clf.cv_results_['std_test_score'] for mean, std, params in zip(means, stds, clf.cv_results_['params']): print("%0.3f (+/-%0.03f) za %s" % (mean, std * 2, params)) print() print("Najbolji parametri:") print(clf.best_params_) print("Izvestaj za test skup:") y_true, y_pred = y_test, clf.predict(x_test) print(classification_report(y_true, y_pred)) print()