Menu
CoddyTech

PCA

Coddy'nin Machine Learning Journey'sinin Denetimsiz Öğrenme bölümünün bir parçası. Ders 26 / 51.

PCA en geniş dağılımın yönünü, ardından ona dik açı yapan en iyi yönü ve böyle devam ederek bileşenleri bulur. Şarap ikizlerinde:

Sağa doğru yükselen bir bulut şeklindeki ölçeklenmiş şarap ikizleri; merkezden çıkan iki kırmızı ok: bulut boyunca uzanan uzun ok, bileşen 1, ve bulutun üzerinden geçen kısa ok, bileşen 2

Her satırın ilk birkaç bileşen üzerindeki izdüşümleri yeni özellikleri olur:

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

13 şarap ölçümünün tümü için bu, (178, 13) (178, 2) çıktısını verir.

Önce ölçeklendirin. PCA yayılımı temel alır; bu yüzden yüzlerle ifade edilen prolin gibi büyük birimlere sahip bir özellik, yalnızca büyüklüğü sayesinde öne çıkar:

178 şarabın iki PCA haritası. Solda, ölçeklendirilmemiş: üç kültivar tek bir karmaşada örtüşüyor. Sağda, önce ölçeklendirilmiş: üç belirgin grup

challenge icon

Görev

Orta

Bir su laboratuvarı, üç kaynaktan gelen şişeleri test ediyor; her birinde 8 ölçüm var. 2B bir harita kaynakları birbirinden ayırt edebilir mi? draw_springs(ax, points), tüm 2B noktaları kaynağa göre renklendirir.

  1. X'i ölçeklendir, ardından PCA ile 2 bileşene indirgeyerek points içine aktar.
  2. Özellik sayısını öncesinde ve sonrasında yazdır.
  3. Noktaları draw_springs ile çiz ve grafiği göster.

6 ölçümlü başka bir laboratuvar için:

From 6 features to 2

Spring Waters in 2D başlıklı bir grafik; yatay eksende birinci bileşen, dikey eksende ikinci bileşen: alpin şişeler sol altta, volkanik şişeler sağ altta, kıyı şişeleri üstte; ayrıca bir gösterge

Coddy haritanı açıklıyor.

Kendin dene

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

# Bir su laboratuvarı: üç kaynaktan alınan 120 şişenin her biri için 8 ölçüm
waters = pd.read_csv("waters.csv")
X = waters.drop(columns="spring")


# 2D noktaları, her kaynak için bir grup olacak şekilde, açıklama kutusuyla dağılım grafiğinde gösterir
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")

# Kodunuzu aşağıya yazın
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Denetimsiz Öğrenme bölümündeki tüm dersler

Kendi başına pratik yap: Online Python derleyicisi