from sklearn.naive_bayes import MultinomialNB
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDClassifier
from sklearn.neighbors import KNeighborsClassifier

import numpy as np


classifiers = [
                ('bayes', MultinomialNB()),
                ('lr', LogisticRegression()),
                ('sgd', SGDClassifier()),
                ('svm', SVC() ),
                #('decisionTree',DecisionTreeClassifier()),
                ('rfc', RandomForestClassifier()),
                #('knn', KNeighborsClassifier())
                ]


param_grid_svm = {'kernel':['linear','rbf']}
#param_grid_decisionTree = { 'criterion' : ['gini', 'entropy'], 'max_depth':range(5,10), 'min_samples_split': range(5,10), 'min_samples_leaf': range(1,5) }
param_grid_rfc = { 'max_features': ['sqrt', 'log2'], 'max_depth' : [4,5,6,7,8]}
param_grid_lr = {"C":np.logspace(-3,3,7)}
param_grid_sgd = { "loss" : ["log", "modified_huber"]}
#param_grid_knn = {'n_neighbors' : list(range(3,20)), 'weights' : ['uniform', 'distance'], 'metric' : ['euclidean', 'manhattan'] }


grid_params = [
                ('bayes', None),
                ('lr', param_grid_lr),
                ('sgd', param_grid_sgd ),
                ('svm', param_grid_svm),
                #('decisionTree', param_grid_decisionTree),
                ('rfc', param_grid_rfc ),
                #('knn', param_grid_knn),

                ]