Pesquisa de site

Analisando Árvore de Decisão e Clustering K-means usando o conjunto de dados Iris


Árvores de decisão e algoritmos de agrupamento K-means são técnicas populares usadas em ciência de dados e aprendizado de máquina para descobrir padrões e insights de grandes conjuntos de dados, como o conjunto de dados Iris. Como todos sabemos, a Inteligência Artificial é amplamente utilizada no nosso dia a dia, desde a leitura de notícias num dispositivo móvel até à análise de dados complicados no trabalho. A IA melhorou a velocidade, a precisão e a eficiência dos esforços humanos. Os desenvolvimentos da IA permitiram-nos fazer coisas que antes eram consideradas impossíveis.

Aqui neste artigo, aprenderemos sobre o algoritmo de árvore de decisão e k significa algoritmo de agrupamento e como aplicar o algoritmo de árvore de decisão e k significa algoritmo de agrupamento no conjunto de dados da íris

Conjunto de dados de íris

O conjunto de dados Fisher's Iris é um conjunto de dados multivariados que ficou famoso pelo estatístico e biólogo britânico Ronald Fisher em seu trabalho de 1936, O uso de numerosas medições em questões taxonômicas como um exemplo de análise discriminante linear. O trabalho de Fisher foi publicado na revista. Edgar Anderson coletou os dados para investigar as diferenças morfológicas que existem entre as flores de três espécies de íris intimamente relacionadas. Na Península de Gaspé, duas das três espécies foram coletadas “todas na mesma pastagem, no mesmo dia, pela mesma pessoa e utilizando o mesmo equipamento de medição”.

O conjunto de dados consiste em 50 espécimes coletados de cada uma das três espécies de Iris (Iris setosa, Iris virginica e Iris versicolor). O comprimento e a largura das sépalas e pétalas foram medidos em centímetros para cada amostra individual. Estas são duas das quatro características que foram medidas.

Árvore de decisão

Os aplicativos que incluem classificação e regressão geralmente fazem uso de um método conhecido como árvore de decisão, que é uma forma não paramétrica de aprendizagem supervisionada. Possui uma estrutura hierárquica que se parece com uma árvore e é composta por um nó raiz, ramos, nós internos e nós folha.

Agrupamento K-means

O agrupamento k-means é uma técnica de quantização vetorial que tem suas raízes no campo do processamento de sinais. Seu objetivo é dividir n observações em k clusters para que cada observação pertença ao cluster com a média mais próxima (centros do cluster ou centróide do cluster), que atua como protótipo do cluster. Como consequência, isso faz com que o espaço de dados seja dividido em células Voronoi. Embora a mediana geométrica seja a única que pode minimizar as distâncias euclidianas, a média é otimizada para erros quadráticos. É possível, por exemplo, localizar soluções euclidianas melhoradas fazendo uso de k-medianas e k-medóides.

Árvore de decisão e algoritmo de agrupamento k-means no conjunto de dados iris

Exemplo

import pandas as pdd
from sklearn import datasets
import numpy as npp
import sklearn.metrics as smm
import matplotlib.patches as mpatchess
from sklearn.cluster import KMeans
import matplotlib.pyplot as pltt
from sklearn.metrics import accuracy_score
%matplotlib inline
iris = datasets.load_iris()
print(iris.target_names)
print(iris.target)
x1 = pdd.DataFrame(iris.data, columns=['Sepal Length', 'Sepal Width', 'Petal Length', 'Petal Width'])
y1 = pdd.DataFrame(iris.target, columns=['Target'])
x1.head()

Saída

['setosa' 'versicolor' 'virginica']

 [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 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]

     Sepal Length  Sepal Width  Petal Length Petal Width
0   5.1        3.5                   1.4                0.2
1   4.9        3.0                 1.4                0.2
2   4.7        3.2                   1.3                0.2
3   4.6        3.1                   1.5                0.2
4   5.0        3.6                   1.4                0.2

Imprima as primeiras 5 linhas da variável de destino que é y -

y1.head()

Saída

   Target
0   0
1   0
2   0
3   0
4   0

Na próxima etapa, trace a figura do conjunto de dados que mostra a diferença entre as variáveis do conjunto de dados -

pltt.figure(figsize=(12,3))
colors = npp.array(['red', 'green', 'blue'])
iris_targets_legend = npp.array(iris.target_names)
red_patch = mpatchess.Patch(color='red', label='Setosa')
green_patch = mpatchess.Patch(color='green', label='Versicolor')
blue_patch = mpatchess.Patch(color='blue', label='Virginica')
pltt.subplot(1, 2, 1)
pltt.scatter(x1['Sepal Length'], x1['Sepal Width'], c=colors[y1['Target']])
pltt.title('Sepal Length vs Sepal Width')

pltt.legend(handles=[red_patch, green_patch, blue_patch])

pltt.subplot(1,2,2)

pltt.scatter(x1['Petal Length'], x1['Petal Width'], c= colors[y1['Target']])
pltt.title('Petal Length vs Petal Width')
pltt.legend(handles=[red_patch, green_patch, blue_patch])

Saída

Definiremos clusters na próxima etapa

iris_k_mean_model = KMeans(n_clusters=3)
iris_k_mean_model.fit(x1)
print(iris_k_mean_model.labels_)

Saída

KMeans(n_clusters=3)
[[5.9016129  2.7483871  4.39354839 1.43387097]
 [5.006      3.428      1.462      0.246     ]
 [6.85       3.07368421 5.74210526 2.07105263]]

Agora, vamos traçar a figura antes e depois da classificação -

pltt.figure(figsize=(12,3))

colors = npp.array(['red', 'green', 'blue'])

predictedY = npp.choose(iris_k_mean_model.labels_, [1, 0, 2]).astype(npp.int64)

pltt.subplot(1, 2, 1)
pltt.scatter(x1['Petal Length'], x1['Petal Width'], c=colors[y1['Target']])
pltt.title('Before classification')
pltt.legend(handles=[red_patch, green_patch, blue_patch])

pltt.subplot(1, 2, 2)
pltt.scatter(x1['Petal Length'], x1['Petal Width'], c=colors[predictedY])
pltt.title("Model's classification")
pltt.legend(handles=[red_patch, green_patch, blue_patch])

Saída

A seguir, imprimiremos a precisão do modelo -

smm.accuracy_score(predictedY, y1['Target'])

Saída

0.24

A seguir, testaremos o modelo e imprimiremos a precisão do conjunto de dados de teste e do conjunto de dados de treinamento -

from sklearn.metrics import accuracy_score

X = iris.data

# Extracting Target / Class Labels
y = iris.target

# Import Library for splitting data
from sklearn.model_selection import train_test_split

# Creating Train and Test datasets
X_train, X_test, y_train, y_test = train_test_split(X,y, random_state = 50, test_size = 0.25)

# Creating Decision Tree Classifier
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier()

clf.fit(X_train,y_train)
# Predict Accuracy Score
y_pred = clf.predict(X_test)
print("Train data accuracy:",accuracy_score(y_true = y_train, y_pred=clf.predict(X_train)))
print("Test data accuracy:",accuracy_score(y_true = y_test, y_pred=y_pred))

Saída

Train data accuracy: 1.0
Test data accuracy: 0.9473684210526315

Conclusão

Concluindo, o conjunto de dados da íris é um conjunto de dados convencional de aprendizado de máquina frequentemente usado para testar diferentes algoritmos. Aqui, usamos o popular algoritmo de árvore de decisão e o algoritmo de agrupamento K-means para examinar os dados.

Ao usar esses métodos, podemos aprender mais sobre a estrutura dos dados e usar essa estrutura para fazer previsões e agrupar os dados.

Artigos relacionados: