Menu
CoddyTech

PCA

Parte da seção Aprendizado não supervisionado do Journey de Machine Learning da Coddy. Lição 26 de 51.

PCA encontra a direção de maior dispersão, depois a melhor direção em ângulo reto em relação a ela, e assim por diante: os componentes. Nos gêmeos do vinho:

Os gêmeos do vinho escalados como uma nuvem que sobe para a direita, com duas setas vermelhas a partir do centro: uma longa, componente 1, ao longo da nuvem, e uma curta, componente 2, atravessando-a

As projeções de cada linha nos primeiros componentes se tornam suas novas características:

from sklearn.decomposition import PCA
scaled = StandardScaler().fit_transform(X)
points = PCA(n_components=2).fit_transform(scaled)
print(X.shape, points.shape)

Para todas as 13 medições de vinho, isso imprime (178, 13) (178, 2).

Faça o escalonamento primeiro. A PCA busca dispersão, então um recurso em unidades grandes, como a prolina na casa das centenas, se destaca apenas pelo tamanho:

Dois mapas de PCA dos 178 vinhos. À esquerda, sem escalonamento: as três cultivares se sobrepõem em uma única mancha. À direita, com escalonamento prévio: três grupos nítidos

challenge icon

Desafio

Médio

Um laboratório de água testa garrafas de três fontes, com 8 medições cada. Um mapa 2D consegue distinguir as fontes? draw_springs(ax, points) colore quaisquer pontos 2D de acordo com a fonte.

  1. Padronize X e, em seguida, reduza-o a 2 componentes com PCA, em points.
  2. Imprima o número de características antes e depois.
  3. Desenhe os pontos com draw_springs e mostre o gráfico.

Para outro laboratório, com 6 medições:

From 6 features to 2

Um gráfico intitulado Águas de fontes em 2D, com o primeiro componente no eixo horizontal e o segundo no vertical: garrafas alpinas na parte inferior esquerda, vulcânicas na parte inferior direita e costeiras na parte superior, com uma legenda

O Coddy descreve seu mapa.

Experimente você mesmo

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

# Um laboratório de análise de água: 8 medições para cada uma das 120 garrafas de três nascentes
waters = pd.read_csv("waters.csv")
X = waters.drop(columns="spring")


# Plota pontos 2D em um gráfico de dispersão, com um grupo por nascente e uma legenda
def draw_springs(ax, points):
    for spring in ["alpine", "volcanic", "coastal"]:
        rows = (waters["spring"] == spring).to_numpy()
        ax.scatter(points[rows, 0], points[rows, 1], s=16, label=spring)
    ax.legend()


fig, ax = plt.subplots()
ax.set_title("Spring Waters in 2D")
ax.set_xlabel("First component")
ax.set_ylabel("Second component")

# Escreva seu código abaixo
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Aprendizado não supervisionado

Pratique por conta própria: Compilador de Python online