Aprendizado de Máquina com Python e Scikit-learn

Instalando o matplotlib e plotando gráficos

Link do meu Github com o script dessa aula:

Download do script da aula

As aulas são resenhas baseadas na documentação oficial do scikit-learn, disponível no endereço:

https://scikit-learn.org/stable/

Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no Facebook Facebook

Link do código fluente no Pinterest

Meus links de afiliados:

Hostinger

Digital Ocean

One.com

Seguindo de onde paramos na última aula.

O "x" armazena a matriz com as features(variáveis ou características) das iris das flores. x = iris.data o x armazena as 150 amostras, com as 4 features das iris das flores:
    1. O comprimento da sépala em centímetros
    2. A largura da sépala em centímetros
    3. O comprimento da pépala em centímetros
    4. A largura da pépala em centímetros
Armazena o vetor de resposta em "y" com as classificações. y = iris.target 0(zero) representa 'setosa', 1 representa 'versicolor' e 2 'virgínica'.

Verifique a forma das features (recursos)

Primeira dimensão = (LINHAS) ou seja, número de observações Segunda dimensões = (COLUNAS) ou seja, número de features. x.shape Saída: (150, 4)

Verifique a forma da resposta (dimensão única correspondente ao número de observação)

y.shape Saída: (150,) 

Instalando o Matplotlib e suas dependências

saia do shell python e no cmd ou no shell do linux use os comandos abaixo:

python -m pip install -U pip python -m pip install -U matplotlib

Caso queira desinstalar use:

python -m pip uninstall matplotlib

Antes de plotar gráficos, vamos fazer todo o processo da aula passada, já que saímos do python para instalar o matplotlib e as variáveis se perderam.

Obs. Vamos fazer tudo igual, mas, vamos mudar o nome das variáveis.

#Importa os datasets que vem com o scikit learn
from sklearn import datasets
#Guarda na variável iris o dataset iris
iris = datasets.load_iris()
#Armazena a matriz de recurso (feature) em "x"
features = iris.data[: , [0,1,2,3]]
#Armazena o vetor de resposta em "y"
targets = iris.target
Observe que o que antes chamamos de x agora chamamos de features e o que era y agora é chamado de targets. Quero mostrar uma coisa, essa base de dados é composta por duas listas(array) e um dicionário, para conferir isso digite: iris A saída foi mostrada na aula passada, só pra relembrar, veja a visão resumida abaixo: {'data': array([[5.1, 3.5, 1.4, 0.2], [4.9, 3. , 1.4, 0.2], [4.7, 3.2, 1.3, 0.2], [4.6, 3.1, 1.5, 0.2], ..., [6.2, 3.4, 5.4, 2.3], [5.9, 3. , 5.1, 1.8]]), 'target': array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, ..., 2, 2]), 'target_names': array(['setosa', 'versicolor', 'virginica'], dtype='<U10'), 'DESCR': '.. _iris_dataset:\n\nIris plants dataset\n ..., 'filename': 'C:\\Users\\toti.cavalcanti\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages\\sklearn\\datasets\\data\\iris.csv'} A primeira lista, acima em lilás, com os dados das features, ou seja, as características de comprimento e largura das pétalas e sépalas das flores, a segunda lista em azul, tem a classificação das amostras das flores:
  • 0(setosa)
  • 1(versicolor)
  • 2(virgínica)
Por último o dicionário em verde, com detalhes da base de dados, descrição, criadores, etc. Por ter essa estrutura, conseguimos fazer coisas como: x = iris.data y = iris.target Acessando a estrutura da base de dados.

Reorganizando Matrizes

Muitas vezes é necessário reformular os dados, enfim, mudar o formato da matriz. Algumas bibliotecas, como o próprio scikit-learn, podem exigir que uma matriz unidimensional de variáveis de saída (y) seja modelada como uma matriz bidimensional com uma coluna e resultados para cada coluna. Alguns algoritmos, como a rede neural recorrente de Long Short-Term Memory em Keras, exigem que a entrada seja especificada como um array tridimensional composto de amostras, timesteps e features. É importante saber como reformular (reshape) seus arrays para que seus dados atendam à expectativa de bibliotecas específicas do Python. Vamos fazer o reshape do targets sem modificá-lo de fato, só mesmo para ver o efeito do reshape.

targets.reshape(targets.shape[0],-1)
targets.shape
Saída: (150,) 

O targets continua igual, não foi alterado pelo reshape.

Agora vamos plotar alguns gráficos.

Gráfico de dispersão com o conjunto de dados Iris

Crie uma lista chamada featuresAll.

featuresAll=[]
features = iris.data[: , [0,1,2,3]]
features.shape
iris.feature_names

Toda observação será anexada na lista assim que for lida.

Um loop for é usado para o processo de iteração.

Para cada linha lida, os valores das features são somados.

for observation in features:
    featuresAll.append([observation[0] + observation[1] + observation[2] + observation[3]])

print(featuresAll)
Saída: [[10.2], [9.5], [9.4], [9.399999999999999], [10.2], [11.4], [9.700000000000001], [10.1], [8.9], [9.6], [10.8], [9.999999999999998], [9.299999999999999], [8.5], [11.2], [12.000000000000002], [11.000000000000002], [10.3], [11.5], [10.7], [10.7], [10.700000000000001], [9.399999999999999], [10.599999999999998], [10.299999999999999], [9.799999999999999], [10.4], [10.399999999999999], [10.2], [9.7], [9.7], [10.700000000000001], [10.9], [11.299999999999999], [9.7], [9.599999999999998], [10.5], [10.0], [8.9], [10.2], [10.100000000000001], [8.4], [9.1], [10.7], [11.2], [9.5], [10.699999999999998], [9.399999999999999], [10.7], [9.9], [16.299999999999997], [15.600000000000001], [16.4], [13.100000000000001], [15.4], [14.3], [15.9], [11.600000000000001], [15.4], [13.200000000000001], [11.5], [14.600000000000001], [13.2], [15.1], [13.4], [15.600000000000001], [14.6], [13.6], [14.4], [13.1], [15.700000000000003], [14.2], [15.200000000000001], [14.799999999999997], [14.900000000000002], [15.4], [15.799999999999999], [16.4], [14.9], [12.8], [12.799999999999999], [12.600000000000001], [13.6], [15.399999999999999], [14.4], [15.5], [16.0], [14.3], [14.0], [13.3], [13.7], [15.1], [13.6], [11.6], [13.8], [14.099999999999998], [14.100000000000001], [14.7], [11.7], [13.9], [18.1], [15.5], [18.1], [16.599999999999998], [17.5], [19.3], [13.6], [18.3], [16.8], [19.4], [16.799999999999997], [16.3], [17.400000000000002], [15.2], [16.099999999999998], [17.200000000000003], [16.8], [20.4], [19.500000000000004], [14.7], [18.1], [15.299999999999999], [19.2], [15.700000000000001], [17.8], [18.2], [15.600000000000001], [15.8], [16.9], [17.6], [18.199999999999996], [20.1], [17.0], [15.7], [15.7], [19.099999999999998], [17.7], [16.8], [15.600000000000001], [17.5], [17.8], [17.4], [15.5], [18.2], [18.2], [17.2], [15.700000000000001], [16.7], [17.3], [15.8]]

Plotando o gráfico de dispersão (Relação entre comprimento e largura sépala)


import matplotlib.pyplot as plt
plt.scatter(featuresAll, targets, color='red', alpha =1.0)
plt.rcParams['figure.figsize'] = [10,8]
plt.title('Iris Dataset scatter Plot')
plt.xlabel('Features')
plt.ylabel('Targets')
Saída:Text(0,0.5,'Targets')
plt.show()
Saída:

Gráfico de Dispersão com Dataset Iris (Relação entre o Comprimento e a Largura da Sépala)


#Encontrando o relacionamento entre o comprimento e a largura da sépala
sepal_len = []
sepal_width = []
for feature in features:
    sepal_len.append(feature[0]) #Comprimento da sépala
    sepal_width.append(feature[1]) #Largura da sépala

groups = ('Iris-setosa','Iris-versicolor','Iris-virginica')
colors = ('blue', 'green','red')
data = ((sepal_len[:50], sepal_width[:50]), (sepal_len[50:100], sepal_width[50:100]), 
        (sepal_len[100:150], sepal_width[100:150]))

for item, color, group in zip(data, colors, groups): 
    #item = (sepal_len[:50], sepal_width[:50]), (sepal_len[50:100], sepal_width[50:100]), 
    #(sepal_len[100:150], sepal_width[100:150])
    x0, y0 = item
    plt.scatter(x0, y0,color=color,alpha=1)
    plt.title('Iris Dataset scatter Plot')

plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.show()
Saída:

Gráfico de Dispersão com Conjunto de Dados Iris (Relação entre o Comprimento e a Largura da Pétala)


#Encontrando o relacionamento entre o comprimento e a largura da pétala
petal_len = []
petal_width = []
for feature in features:
    petal_len.append(feature[2]) #Comprimento da pétala
    petal_width.append(feature[3]) #Largura da pétala

groups = ('Iris-setosa','Iris-versicolor','Iris-virginica')
colors = ('blue', 'green','red')
data = ((petal_len[:50], petal_width[:50]), (petal_len[50:100], petal_width[50:100]), 
        (petal_len[100:150], petal_width[100:150]))

for item, color, group in zip(data,colors,groups): 
    #item = (petal_len[:50], petal_width[:50]), (petal_len[50:100], petal_width[50:100]), 
    #(petal_len[100:150], petal_width[100:150])
    x0, y0 = item
    plt.scatter(x0, y0,color=color,alpha=1)
    plt.title('Iris Dataset scatter Plot')

plt.xlabel('Petal length')
plt.ylabel('Petal width')
plt.show()
Saída:

Na próxima aula instalaremos o pandas e continuaremos a explorar a base de dados das íris.

Link do meu Github com o script dessa aula:

Download do script da aula

Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no

Facebook

Link do código fluente no Pinterest

Novamente deixo meus link de afiliados:

Hostinger

Digital Ocean

One.com

Obrigado, até a próxima e bons estudos. ;)