#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Feb 21 12:04:50 2018

@author: kony
"""


#---------------------------------------------------------------
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target

labels = ["Setosa","Versicolour","Virginica"]


#---------------------------------------------------------------
from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X,y)
model.predict([[3,4,3,4]])
model.score(X,y)

#---------------------------------------------------------------
from sklearn import tree
model = tree.DecisionTreeClassifier()
model.fit(X, y)
model.predict([[3,4,3,4]])
model.score(X,y)




#---------------------------------------------------------------
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.333)

model = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train,y_train)
model.score(X_test,y_test)


#---------------------------------------------------------------
from sklearn import metrics as mc
y_pred = model.predict(X_test)

mc.confusion_matrix(y_test,y_pred)
print(mc.classification_report(y_test,y_pred))



#---------------------------------------------------------------
#---------------------------------------------------------------

#Visualizace

import numpy as np
import matplotlib.pyplot as plt
#---------------------------------------------------------------
# bereme jen prvni dva atributy
# (at se to snadno vykresluje)
X = iris.data[:, :2]
y = iris.target
#---------------------------------------------------------------
# vykresleni:

def draw_map(X,model):
    x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
    y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
    
    
    h = .01 # step size in the mesh
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
    Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
    
    # Put the result into a color plot
    Z = Z.reshape(xx.shape)
    plt.figure(1, figsize=(20,10))
    plt.set_cmap(plt.cm.Paired)
    plt.pcolormesh(xx, yy, Z)
    
    # Plot also the training points
    plt.scatter(X[:,0], X[:,1],c=y,marker='o',edgecolors="black",s=120)
    plt.xlabel('Sepal length')
    plt.ylabel('Sepal width')
    
    plt.xlim(xx.min(), xx.max())
    plt.ylim(yy.min(), yy.max())
    plt.xticks(())
    plt.yticks(())

    plt.show()



#---------------------------------------------------------------

model = KNeighborsClassifier(n_neighbors=1)
model.fit(X,y)
draw_map(X,model)


model = KNeighborsClassifier(n_neighbors=1,p=1)
model.fit(X,y)
draw_map(X,model)


#---------------------------------------------------------------
model = tree.DecisionTreeClassifier()
model.fit(X, y)
draw_map(X,model)

#---------------------------------------------------------------
from sklearn import svm
model = svm.SVC()
model.fit(X, y)
draw_map(X,model)

#---------------------------------------------------------------
from sklearn.neural_network import MLPClassifier
model = MLPClassifier()
model.fit(X, y)
draw_map(X,model)
