In [2]:
%matplotlib notebook
Para este exemplo, vamos usar o dataset Iris, que pode ser obtido aqui: https://archive.ics.uci.edu/ml/datasets/Iris
In [3]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import decomposition
from sklearn import datasets
In [4]:
tabela = pd.read_csv("exemplo_7/iris.data",header=None,sep=',')
In [5]:
tabela
Out[5]:
In [6]:
tabela.columns=['sepal_len', 'sepal_wid', 'petal_len', 'petal_wid', 'class']
In [ ]:
tabela
In [7]:
tabela.tail()
Out[7]:
Agora, vamos separar os dados entre as medidas e as espécies.
In [8]:
X = tabela.ix[:,0:4].values
y = tabela.ix[:,4].values
In [ ]:
X
In [19]:
y
Out[19]:
In [70]:
nomes = list(set(y))
In [66]:
tabela.columns
Out[66]:
In [88]:
colors = ['navy', 'turquoise', 'darkorange']
fig,ax = plt.subplots(2,2)
#n, bins, patches = P.hist(x, 10, normed=1, histtype='bar',
# color=['crimson', 'burlywood', 'chartreuse'],
# label=['Crimson', 'Burlywood', 'Chartreuse'])
# Coluna 0
dados_sepal_len = [X[y==nomes[0],0], X[y==nomes[1],0], X[y==nomes[2],0]]
n, bins, patches = ax[0,0].hist(dados_sepal_len,color=colors, label=list(set(y)))
ax[0,0].set_title('Sepal Length (cm)')
# Coluna 1
dados_sepal_wid = [X[y==nomes[0],1], X[y==nomes[1],1], X[y==nomes[2],1]]
ax[0,1].hist(dados_sepal_wid,color=colors, label=list(set(y)))
#ax[0,1].legend()
ax[0,1].set_title('Sepal Width (cm)')
# Coluna 2
dados_sepal_wid = [X[y==nomes[0],2], X[y==nomes[1],2], X[y==nomes[2],2]]
ax[1,0].hist(dados_sepal_wid,color=colors, label=list(set(y)))
#ax[1,0].legend()
ax[1,0].set_title('Petal Length (cm)')
# Coluna 3
dados_sepal_wid = [X[y==nomes[0],3], X[y==nomes[1],3], X[y==nomes[2],3]]
ax[1,1].hist(dados_sepal_wid,color=colors, label=list(set(y)))
#ax[1,1].legend()
ax[1,1].set_title('Petal Width (cm)')
fig.legend(patches, list(set(y)))
Out[88]:
Agora, vamos calcular a decomposição em componentes principais:
In [9]:
pca = decomposition.PCA()
In [ ]:
print(pca)
pca agora é uma referência para a função que calcula o PCA de X. Para efetivamente calcularmos os componentes principais, fazemos
In [10]:
pca.fit(X)
Out[10]:
Daqui pra frente, o objeto pca será onde nossas informações estão armazenadas. Para, por exemplo, verificarmos quais são os autovalores (variâncias) do nosso conjunto de dados, podemos fazer
In [ ]:
print(pca.explained_variance_ratio_)
Podemos ver então que o primeiro componente principal explica 92% dos dados.
Para transformarmos os dados para que fiquem alinhados/projetados nestes componentes principais, usamos
In [11]:
Xnew = pca.transform(X)
In [ ]:
print(X)
In [ ]:
print(Xnew)
Agora, queremos visualizar estes dados. Precisamos então selecionar quantos componentes queremos representar. Se quisermos mostrar dois componentes, fazemos
In [89]:
fig,ax = plt.subplots()
plt.cla()
ax.scatter(Xnew[:, 0], Xnew[:, 1], cmap=plt.cm.spectral)
plt.show()
In [33]:
y[0]
Out[33]:
In [90]:
list(set(y))
Out[90]:
In [91]:
Xnew[y=='Iris-setosa']
Out[91]:
In [123]:
fig2, ax2 = plt.subplots()
for color, i, name in zip(colors, [0, 1, 2], list(set(y))):
ax2.scatter(Xnew[y == name, 0], Xnew[y == name, 1], color=color, label=names)
ax2.legend(loc='best', shadow=False, scatterpoints=1)
ax2.set_title('PCA of IRIS dataset')
Out[123]:
In [124]:
colors
Out[124]:
In [137]:
from mpl_toolkits.mplot3d import Axes3D
fig3d = plt.figure(3)
ax = Axes3D(fig3d)
for color, i, name in zip(colors, [0, 1, 2], list(set(y))):
ax.scatter(Xnew[y == name, 0], Xnew[y == name, 1], Xnew[y==name, 2], color=color, label=names)
ax.legend(loc='best', shadow=False, scatterpoints=1)
plt.show()
In [ ]: