Hipersík – Lineáris algebra Pythonban

A hipersík a hipertér 1 dimenzióval kevesebb dimenziójú altere. Lényegében egy olyan sík, ami két részre osztja a teret. Gépi tanulás során lényegében minden lineáris osztályozás alapja a hipersík, ezért érdemes egy kicsit átnézni, hogy is dolgozhatunk vele Pythonban.


A hipersík definiálása

Nézzünk egy egyszerű két dimenziós példát. Ugye ezt a teret egy vonallal lehet kétfelé osztani, valahogy így:

A fenti ábra alapján logikus, ahhoz, hogy definiáljuk e hipersíkot, lényegében az egyenest kell definiálni. Amit két lépésben teszünk meg. Először is definiáljuk az egyenes meredekségét, jelöljük ezt \theta  -val. Ez ugye egy olyan egyenest add nekünk ami az origón megy keresztül. A második lépésben ezt az egyenest kell eltolnunk a kívánt pozícióba. Jelöljük ezt az eltolást \theta_0   -val. Innen könnyű általánosítani, hogy \theta     -val egy d dimenziós térben egy d dimenziós vektor lesz, így:

(1)   \theta = \begin{bmatrix} \theta_1\\ \theta_2 \\ \vdots \\ \theta_d   \end{bmatrix}

A \theta_0   ezzel szemben mindig egy skalár. Ezt Pythonban így definiáljuk:

import numpy as np

# hipersík egy 3D térben
theta = np.array([2,4,2])
theta0 = 3

Miden x (szintén d dimenzióban definiált) pont ezen a síkon van, ha igaz rá, hogy:

(2)   \theta \cdot x + \theta_0 =  \theta_0+\theta_1\cdot x_1 +  \theta_2\cdot x_2 + \hdots + \theta_d\cdot x_d + =  0

Annak ellenőrzése, hogy egy vektor merőleges-e a hipertérre

Ahhoz, hogy egy vektor merőleges legyen egy hipersíkra, lényegében annak a feltételnek kel teljesülnie, hogy a vektor és a \theta szorzata 0, vagyis:

(3)   x\cdot \theta = 0

Ez Pythonban pedig:

import numpy as np

x = np.array([2,-1,0])

if np.dot(theta.T,x) == 0:
    print("Merőleges")
else:
    print("Nem merőleges")

Pont és hipersík távolsága

A pont és a hipertér előjeles távolságát így számolhatjuk:

(4)   t = \frac{\theta_0+\theta^T \cdot x}{  || \theta || }

Ahol:

  • ||\theta ||   — a \theta normálja, vagyis, hogy milyen hosszú a vektor. Ez pedig ugye Eukleidészi térben: \sqrt{\theta_1^2 + \theta_2^2 +\hdots +  \theta_d^2  }
import numpy as np

# t mint tavolság
t = (theta0+np.dot(theta.T, x))/numpy.linalg.norm(theta)

Pont vetítése a hipersíkra

Ha azt szeretnénk megállapítani mi a hipersík azon pontja ami legközelebb van egy adott ponthoz, akkor lényegében a síkra kell merőlegesen vetítenünk a pontot. Ezt a vetítést így tehetjük meg:

(5)   x' =  x - \theta \cdot \frac{\theta_0+\theta^T  \cdot x }{ ||\theta||^2}

Ami Pythonban:

import numpy as np

konstant = (theta0+np.dot(theta.T, x))/np.power(numpy.linalg.norm(theta), 2)
x_vesszo = x-theta*konstant

Nagyjából ennyi lenne az, amit a gépi tanulás során alkalmazunk.

Hírdetés

Hipersík – Lineáris algebra Pythonban” bejegyzéshez 2 hozzászólás

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés /  Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés /  Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés /  Módosítás )

Kapcsolódás: %s