# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     name: python3
# ---

# + [markdown] id="HktQn7JaSCss"
# # Trabalho Prático Módulo 3
#
# Bootcamp Engenheiro de Machine Learning @ IGTI
#
# Objetivos:
# *   Exercitar conceitos sobre medidas de desempenho para regressão.
# *   Modelar um problema como uma tarefa de regressão.
# *   Avaliar um modelo de regressão.
# *   Exercitar conceitos sobre medidas de desempenho para classificação.
# *   Modelar um problema como uma tarefa de classificação.
# *   Avaliar um modelo de classificação.
# *   Exercitar conceitos sobre medidas de desempenho para clusterização.
# *   Modelar um problema como uma tarefa de clusterização.
# *   Avaliar um modelo de clustering.

# + [markdown] id="Ix5BpDViUiw8"
# ## Importação

# + id="g2u1ohkURtb1"
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px

# + id="8hq9GA-0TwWP"
#Regression task com regressão linear
diabetes = pd.read_csv('/content/drive/MyDrive/01 - Data Science/bootcamp engenheiro de ml/modulo 3 - selecao de modelos de aprendizado de maquina/trabalho pratico modulo 3/diabetes_numeric.csv')

#Classification task com SVM
bloodtransf = pd.read_csv('/content/drive/MyDrive/01 - Data Science/bootcamp engenheiro de ml/modulo 3 - selecao de modelos de aprendizado de maquina/trabalho pratico modulo 3/bloodtransf.csv')

#Cluster task com KMeans
wine = pd.read_csv('/content/drive/MyDrive/01 - Data Science/bootcamp engenheiro de ml/modulo 3 - selecao de modelos de aprendizado de maquina/trabalho pratico modulo 3/wine.csv')

# + id="3hUI2KhKV8zE"
#Modelos
from sklearn.linear_model import LinearRegression
from sklearn.cluster import KMeans
from sklearn.svm import SVC #com kernel=rbf

from sklearn.model_selection import train_test_split #test_size = 0.35 e random_state = 54

# + colab={"base_uri": "https://localhost:8080/", "height": 204} id="QayvpEJjb7Km" outputId="44167452-1b5a-4bad-9ceb-31abff7e970a"
diabetes.head()

# + colab={"base_uri": "https://localhost:8080/", "height": 204} id="2sSJWn_Ub2vX" outputId="84293c24-79ce-4a49-c0fc-ae4054e0c091"
bloodtransf.head()

# + colab={"base_uri": "https://localhost:8080/", "height": 224} id="yXnwRkc3bVdc" outputId="788e3203-3402-4497-81fc-13b214c77101"
wine.head()

# + id="lGyW_9OUVH2K"
#Metricas
from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error, accuracy_score, precision_score, recall_score, f1_score, roc_auc_score, silhouette_score, davies_bouldin_score, mutual_info_score

# + [markdown] id="NECoBWEkVxMz"
# ## Perguntas

# + colab={"base_uri": "https://localhost:8080/"} id="4CBPHQBnYSMv" outputId="2c4c0942-f347-4f2c-d6d1-6ecc72e435e1"
# Sobre o número de atributos da base de regressão, marque a alternativa CORRETA:
diabetes.shape

# + colab={"base_uri": "https://localhost:8080/"} id="OiW_QyyBY9y7" outputId="f0857a8a-2eb3-4876-92a3-c6b172b09d84"
# Sobre o número de instâncias da base de classificação, marque a alternativa CORRETA:
bloodtransf.shape

# + colab={"base_uri": "https://localhost:8080/"} id="aR9EfhsQZMNW" outputId="4884d858-2c3a-48ca-a7fc-8d56077ab46d"
# Sobre a base de clusterização, marque a alternativa CORRETA:
wine.shape

# + colab={"base_uri": "https://localhost:8080/"} id="JV2lvQv1tQQy" outputId="79cce43b-116b-4e4f-8199-ac3755b45bbc"
wine['class'].unique()

# + id="mMYCrJnCaxP6"
#Sobre dados faltantes, marque a alternativa CORRETA:

# + colab={"base_uri": "https://localhost:8080/"} id="Rtt-UsAYa1L8" outputId="16ca923d-c4db-420a-a2f6-e731afb20327"
diabetes.isnull().sum()

# + colab={"base_uri": "https://localhost:8080/"} id="PP4WWWIJa1WC" outputId="030798a1-8e87-49d3-d0e7-e5339fd79309"
bloodtransf.isnull().sum()

# + colab={"base_uri": "https://localhost:8080/"} id="c6TckdWja1fS" outputId="350042c1-72e0-4d42-de07-fa9459a1fe7c"
wine.isnull().sum()

# + colab={"base_uri": "https://localhost:8080/"} id="eN8srq12bA6q" outputId="1ca745ab-8eac-4dc1-97f3-1a93fcf0a40b"
# Em relação a modelagem utilizando a regressão linear, marque a alternativa CORRETA sobre a métrica r2, MAE e MSE: 

x_diabetes = diabetes.drop('c_peptide', axis=1)
x_diabetes = np.array(x_diabetes)
y_diabetes = np.array(diabetes['c_peptide'])

x_treino_diabetes, x_teste_diabetes, y_treino_diabetes, y_teste_diabetes = train_test_split(x_diabetes, y_diabetes, test_size = 0.35, random_state = 54)

lr = LinearRegression()
lr.fit(x_treino_diabetes, y_treino_diabetes)
lr_pred = lr.predict(x_teste_diabetes)

#avaliando o modelo
print('R2:', r2_score(y_teste_diabetes, lr_pred)) 
print('MAE:', mean_absolute_error(y_teste_diabetes, lr_pred))
print('MSE:', mean_squared_error(y_teste_diabetes, lr_pred))

# + colab={"base_uri": "https://localhost:8080/"} id="dDlKPdMAYVfn" outputId="a30fd330-7c79-4364-8164-029add982c82"
# mapeando classes do bloodtransf
bloodtransf['Class'].value_counts()

# + colab={"base_uri": "https://localhost:8080/"} id="_Goj0o26agiA" outputId="da46213c-046a-46aa-a587-f2e60bcb6b77"
# Substituindo
bloodtransf['Class'] = bloodtransf['Class'].replace(1, 0)
bloodtransf['Class'] = bloodtransf['Class'].replace(2, 1)

bloodtransf['Class'].value_counts()

# + colab={"base_uri": "https://localhost:8080/"} id="Sl8SitMyfPX_" outputId="817d2309-1963-4e81-be0d-4a8602bd6f0f"
# Em relação a modelagem utilizando o SVM, marque a alternativa CORRETA sobre a métrica acurácia, precision e recall, f1 e AUROC: 

x_blood = bloodtransf.drop('Class', axis=1)
x_blood = np.array(x_blood)
y_blood = np.array(bloodtransf['Class'])

x_treino_blood, x_teste_blood, y_treino_blood, y_teste_blood = train_test_split(x_blood, y_blood, test_size = 0.35, random_state = 54)

svc = SVC(kernel='rbf')
svc.fit(x_treino_blood, y_treino_blood)
svm_pred = svc.predict(x_teste_blood)

#avaliando o modelo
print('Accuracy:', accuracy_score(y_teste_blood, svm_pred)) 
print('Precision:', precision_score(y_teste_blood, svm_pred))
print('Recall:', recall_score(y_teste_blood, svm_pred))
print('F1:', f1_score(y_teste_blood, svm_pred))
print('AUROC:', roc_auc_score(y_teste_blood, svm_pred))

# + colab={"base_uri": "https://localhost:8080/"} id="Z5JwM7yBsvXl" outputId="e216c626-799d-40f6-ba17-6ab52dc4c85a"
# Em relação a modelagem utilizando o Kmeans, marque a alternativa CORRETA sobre o número de clusters:

x_wine = wine.drop('class', axis=1)
x_wine = np.array(x_wine)
y_wine = np.array(wine['class'])

x_treino_wine, x_teste_wine, y_treino_wine, y_teste_wine = train_test_split(x_wine, y_wine, test_size = 0.35, random_state = 54)

for n_cluster in range(2, 10):
    kmeans = KMeans(n_clusters=n_cluster).fit(x_wine)
    label = kmeans.labels_
    sil_coeff = silhouette_score(x_wine, label, metric='euclidean')
    print("Para n_clusters={}, o Silhouette Coefficient é {}".format(n_cluster, sil_coeff))

# + colab={"base_uri": "https://localhost:8080/", "height": 295} id="jZbEXftY31VK" outputId="e913038d-8721-4431-b9b4-380ec0684ba9"
#elbow method

distortions = []
K = range(1,10)
for k in K:
    kmeans = KMeans(n_clusters=k)
    kmeans.fit(x_wine)
    distortions.append(kmeans.inertia_)

plt.plot(K, distortions, 'bx-')
plt.xlabel('k')
plt.ylabel('Distortion')
plt.title('The Elbow Method showing the optimal k')
plt.show()

# + colab={"base_uri": "https://localhost:8080/"} id="YumGn_wk9Akq" outputId="ab2e5e92-9339-4f12-f01e-2a8c7482b55d"
#Em relação a modelagem utilizando o Kmeans, marque a alternativa CORRETA sobre 
#a métrica Coeficiente de Silhueta, Davies-Bouldin Score e Mutual information

kmeans = KMeans(n_clusters=3) #porque é o número de clusters, como visto acima
kmeans.fit(x_treino_wine, y_treino_wine)
k_pred = kmeans.predict(x_teste_wine)
k_pred

# + colab={"base_uri": "https://localhost:8080/"} id="YQxhY8zrAJgW" outputId="96ce41d7-b264-4907-c98c-9d3f08bf7249"
print('Silhouette Score:', silhouette_score(x_teste_wine, k_pred)) 
print('Davies-Bouldin Score:', davies_bouldin_score(x_teste_wine, k_pred))
print('Mutual Info Score:', mutual_info_score(y_teste_wine, k_pred))

StarcoderdataJupyterScriptsDedupFiltered