#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun Jul  8 10:03:40 2018

@author: sadievrenseker
"""

#1. kutuphaneler
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# veri kümesi
dataset = pd.read_csv('Social_Network_Ads.csv')
X = dataset.iloc[:, [2, 3]].values
y = dataset.iloc[:, 4].values

# eğitim ve test kümelerinin bölünmesi
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)

# Ölçekleme
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

# SVM
from sklearn.svm import SVC
classifier = SVC(kernel = 'rbf', random_state = 0)
classifier.fit(X_train, y_train)

# Tahminler
y_pred = classifier.predict(X_test)

#  Confusion Matrix
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)

print(cm)

#k-fold_cross_validation 
from sklearn.model_selection import cross_val_score
"""
1.estimator: classifier (bizim durum)
2.X
3.Y
5. cv:kaç katlamalı
"""
basari=cross_val_score(estimator=classifier,X=X_train,y=y_train,cv=4)
print(basari.mean()) #accurys değeri başarılarının ortalaması
print(basari.std()) #standart sapması ne kadar az okadar iyi

#parametre optimizasyonu ve algoritma seçimi
from sklearn.model_selection import GridSearchCV
p=[
   {'C':[1,2,3,4,5],'kernel':['linear']},
   {'C':[1,10,100,1000],'kernel':['rbf'], 'gamma':[1,0.5,0.1,0.01]}
   ]

"""
GSCV parametreleri:
estimator:sınıflandırma algoritması(neyi optimize etmek istedin)
param_grid=parametreler/denenecekler
scoring:neye göre skorlanacak:örneğin 'accuracy'
cv:kaç katlamalı olacağı
n_jobs:aynı anda çalışacak iş
"""
gs=GridSearchCV( estimator=classifier,#svm algoritması
                 param_grid=p,
                 scoring='accuracy',
                 cv=10,
                 n_jobs=-1)

grid_search=gs.fit(X_train,y_train)
eniyisonuc=grid_search.best_score_
eniyiparametreler=grid_search.best_params_
print(eniyisonuc)
print(eniyiparametreler)







   


















