<jupyter_start><jupyter_text><jupyter_code>import pandas as pd
import numpy as np 
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from sklearn.model_selection import StratifiedKFold, RandomizedSearchCV, LeaveOneOut, train_test_split,cross_val_score,GridSearchCV
from scipy.stats import uniform, randint
from sklearn.metrics import f1_score, make_scorer,accuracy_score

random_state = 42
n_iters = 5
n_estimators = 10

rfc = RandomForestClassifier(n_estimators = n_estimators,random_state=random_state)
svc = SVC(random_state=random_state,)

df = pd.read_csv("https://www.openml.org/data/get_csv/1590565/phpOJxGL9")
df.describe().T
df.V2 = df.V2 .map({"Male":1,"Female":2})
print(df.V2.dtype)
df.V2.value_counts().transpose()
y = df.Class.values
x = df.drop(labels="Class", axis=1).values
columns = df.columns
df.shape, y.shape,x.shape
df.Class.value_counts().transpose()
xtrain,xtest, ytrain,ytest = train_test_split(x,y,random_state=random_state, test_size=0.25)
xtrain.shape,xtest.shape, ytrain.shape,ytest.shape
rfc.fit(xtrain,ytrain)
ypred  = rfc.predict(xtest)
accuracy_score(ytest,ypred)
scores_cv = cross_val_score(rfc, xtrain, ytrain, cv=5)
scores_cv, scores_cv.mean(), scores_cv.std()*2
scores_cv = cross_val_score(rfc, xtrain, ytrain, cv=5,scoring="recall")
scores_cv, scores_cv.mean(), scores_cv.std()*2
cv_skfold = StratifiedKFold(n_splits=10)
scores_cv = cross_val_score(rfc, xtrain, ytrain, cv=cv_skfold,scoring="recall")
scores_cv, scores_cv.mean(), scores_cv.std()*2
loo = LeaveOneOut()
scores_cv = cross_val_score(rfc, xtrain, ytrain, cv=loo)
scores_cv, scores_cv.mean(), scores_cv.std()*2<jupyter_output><empty_output><jupyter_text>Pergunta 1 - O objetivo dessa base é avaliar se uma pessoa vai ser um paciente hepático ou não. A feature que determina a classe nessa base é a “V7”.<jupyter_code>print('V7. Sgot Aspartate Aminotransferase')#df.V7.dtype<jupyter_output><empty_output><jupyter_text>Pergunta 2 -  Sobre as informações de número de features e amostras, marque a alternativa CORRETA.<jupyter_code>df.shape<jupyter_output><empty_output><jupyter_text>Pergunta 3  - Essa base conta com 3 atributos categóricos. Precisamos fazer o pré processamento desses atributos para que todos sejam numéricos.<jupyter_code>df.Class.value_counts().transpose()<jupyter_output><empty_output><jupyter_text>Pergunta 4 - A base não tem dados faltantes.<jupyter_code>print(sum(df.isnull().sum())==0 )<jupyter_output><empty_output><jupyter_text>Pergunta 5 - Sobre o best_score_ encontrado durante a otimização do SVC, marque a alternativa<jupyter_code>distributions = dict(kernel = ['sigmoid', 'rbf'], C = uniform(loc=0, scale=10))
svc = SVC()
cv_kfold = StratifiedKFold( n_splits=10)
f1 = make_scorer(f1_score)
random_cv = RandomizedSearchCV(svc, distributions, cv = cv_kfold, scoring = f1, random_state = random_state, n_iter = 5)
random_cv.fit(x, y)
random_cv.best_score_<jupyter_output><empty_output><jupyter_text>Pergunta 6 - O best_params_ encontrado durante a otimização do SVC indica que a melhor combinação de parâmetros usa um kernel RBF.<jupyter_code>random_cv.best_params_<jupyter_output><empty_output><jupyter_text>Pergunta 7 - O best_params_ encontrado durante a otimização do SVC indica que C encontrado é aproximadamente 5.<jupyter_code>random_cv.best_params_<jupyter_output><empty_output><jupyter_text>Pergunta 8  - A melhor combinação de best_params_ encontrado durante a otimização do SVC é:<jupyter_code>random_cv.best_params_<jupyter_output><empty_output><jupyter_text>Pergunta 9 - Sobre o best_score_ encontrado durante a otimização do Random Forest, marque a alternativa CORRETA.<jupyter_code>cv_strat = StratifiedKFold(n_splits = 10)
f1 = make_scorer(f1_score)

distributions = dict(n_estimators = randint(100, 200),bootstrap = [True, False],criterion = ['gini', 'entropy'])
rfc = RandomForestClassifier(random_state = 42)
random_cv = RandomizedSearchCV(rfc, distributions, cv = cv_strat, scoring = f1, random_state = 42, n_iter = 5)
random_cv.fit(x, y)
random_cv.best_score_<jupyter_output><empty_output><jupyter_text>Pergunta 10 - O best_params_ encontrado durante a otimização do Random Forest indica que a melhor combinação de parâmetros usa Boostrap True.<jupyter_code>random_cv.best_params_<jupyter_output><empty_output><jupyter_text>Pergunta 11 - O best_params_ encontrado durante a otimização do Random Forest indica que a melhor combinação de parâmetros usa Criterion Entropy.<jupyter_code>random_cv.best_params_<jupyter_output><empty_output><jupyter_text>Pergunta 12 -  O best_params_ encontrado durante a otimização do Random Forest indica que a melhor combinação de parâmetros conta com quantos estimadores?<jupyter_code>random_cv.best_params_<jupyter_output><empty_output><jupyter_text>Pergunta 13 - Suponha que nossas duas opções para solução do problema sejam o SVC e o Random Forest que foram modelados anteriormente. Além disso, não é possível rodar o experimento novamente com outros parâmetros. Marque a alternativa que justifica de forma CORRETA a escolha do modelo mais adequado.<jupyter_code>random_cv.best_score_<jupyter_output><empty_output><jupyter_text>Pergunta 14 -  Como os dois modelos apresentaram resultados semelhantes de f1, e considerando apenas essa métrica, podemos entender que a capacidade de generalização dos modelos deve ser semelhante na prática.<jupyter_code><jupyter_output><empty_output><jupyter_text>Pergunta 15 - Os resultados encontrados do random search para o SVC e o Random Forest representam a melhor configuração possível desses modelos para solução do problema proposto.
Grupo de escolhas da pergunta<jupyter_code><jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.08918539325842696, 'fraction_numerical': 0.014922752808988764, 'mean_word_length': 7.256521739130434, 'pattern_counts': {'":': 2, '<': 65, '<?xml version=': 0, '>': 65, 'https://': 1, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '16', 'dir': 'jupyter-structured-clean-dedup', 'id': '327919', 'license': 'Apache-2.0', 'n_tokens_mistral': 2172, 'n_tokens_neox': 2107, 'n_words': 482, 'path': 'IGTI_[Módulo_3]_Seleção_de_Modelos_de_Aprendizado_de_Máquina.ipynb', 'repo_name': 'franckepeixoto/igti-ml', 'size': '5696'}