Írtam egy python programot, ami a mesterséges intelligenciát modellezi és a gépi tanulást segítő alkalmazás. Egy mesterséges intelligenciát és gépi tanulást bemutató programhoz a legjobb kiindulópont egy lineáris regressziós modell elkészítése a semmiből (külső könyvtárak, mint a scikit-learn nélkül). Ez tökéletesen szemlélteti a gépi tanulás alapjait: a modell adatokat kap, hibát számol, majd a gradiens süllyedés (gradient descent) algoritmus segítségével "tanul", azaz módosítja a saját paramétereit. Egy ingatlan becslő Python kódot írtam, ami AI-t modellez a ház mérete alapján, értékbecsélt végez. A gépi tanulás megértését szolgűlja a z adatok fontossága: A program az X és Y listákból indul ki. Minél pontosabbak és tisztábbak ezek az adatok, annál jobb lesz az AI. A "Tippelés" mechanizmusa: A modell nem bonyolult logikai szabályokat követ, hanem egy matematikai függvényt (y=w⋅x+b). Hiba visszacsatolás (Loss Function): A program méri, hogy mekkorát tévedett a valósághoz képest (error). Gradiens süllyedés: A w_gradient és b_gradient változók határozzák meg, hogy a súlyokat növelni vagy csökkenteni kell-e a hiba minimalizálásához. Tanulási ráta (learning_rate): Ha túl nagyra veszed, a modell "túltanul" vagy összeomlik, ha túl kicsi, örökké tart a tanítás. Nyugodtan kísérletezhetsz az átírásával!
--- Tanítás ELŐTTI állapot ---
Kezdeti súly (w): 0.6303
Kezdeti eltolás (b): 0.4796
Python program forrása;
import random
# 1. Tanulhato adatok (Alapterület négyzetméterben -> Ár millió Ft-ban)
# x = terület, y = valós ár
X = [40, 50, 60, 70, 80, 90, 100, 120]
Y = [22, 28, 32, 38, 42, 49, 55, 64]
# 2. A Modell paramétereinek inicializálása (véletlenszerűen)
# A képletünk: becsült_ár = w * terület + b
w = random.uniform(0.0, 1.0) # súly (weight)
b = random.uniform(0.0, 1.0) # eltolás (bias)
# Hiperparaméterek
learning_rate = 0.0001 # Tanulási ráta (milyen gyorsan változzanak a paraméterek)
epochs = 5000 # Hány alkalommal fusson át az összes adaton (tanítási ciklus)
print("--- Tanítás ELŐTTI állapot ---")
print(init_w := f"Kezdeti súly (w): {w:.4f}")
print(init_b := f"Kezdeti eltolás (b): {b:.4f}")
print("-" * 30)
# 3. Önfejlesztés, autodidakta folyamat (Machine Learning)
for epoch in range(epochs):
w_gradient = 0
b_gradient = 0
total_error = 0
n = len(X)
for i in range(n):
x = X[i]
y_valos = Y[i]
# Predikció (Mit tippel most a MI?)
y_becsult = w * x + b
# Hiba számítása (Valós és becsült érték különbsége)
error = y_becsult - y_valos
total_error += error ** 2 # Négyzetes hiba a teljesítmény követéséhez
# Gradiensek (milyen irányba és mennyivel kell módosítani w-t és b-t)
w_gradient += (2/n) * error * x
b_gradient += (2/n) * error
# Paraméterek frissítése (A lényegi "tanulás")
w = w - (learning_rate * w_gradient)
b = b - (learning_rate * b_gradient)
# Állapotjelentés minden 1000. ciklusban
if (epoch + 1) % 1000 == 0:
Átlagos_hiba = total_error / n
print(f"Ciklus {epoch+1}/{epochs} -> Átlagos hiba: {Átlagos_hiba:.4f}")
print("-" * 30)
print("--- Tanítás UTÁNI állapot ---")
print(f"Optimalizált súly (w): {w:.4f}")
print(f"Optimalizált eltolás (b): {b:.4f}")
print("-" * 30)
# 4. Tesztelés / Predikció új adatokkal
print("--- MI Tesztelése (Predikció) ---")
uj_hazak = [45, 75, 110] # Olyan méretek, amik nem voltak a tanító adatok között
for haz in uj_hazak:
tippelt_ar = w * haz + b
print(f"Egy {haz} m²-es ház becsült ára: {tippelt_ar:.2f} millió Ft.")
A program minden lefutásból tanul.
--- Tanítás ELŐTTI állapot ---
Kezdeti súly (w): 0.1027
Kezdeti eltolás (b): 0.8969
------------------------------
Ciklus 1000/5000 -> Átlagos hiba: 0.5184
Ciklus 2000/5000 -> Átlagos hiba: 0.5184
Ciklus 3000/5000 -> Átlagos hiba: 0.5183
Ciklus 4000/5000 -> Átlagos hiba: 0.5183
Ciklus 5000/5000 -> Átlagos hiba: 0.5182
------------------------------
--- Tanítás UTÁNI állapot ---
Optimalizált súly (w): 0.5295
Optimalizált eltolás (b): 0.8902
------------------------------
--- MI Tesztelése (Predikció) ---
Egy 45 m²-es ház becsült ára: 24.72 millió Ft.
Egy 75 m²-es ház becsült ára: 40.60 millió Ft.
Egy 110 m²-es ház becsült ára: 59.13 millió Ft.
Nincsenek megjegyzések:
Megjegyzés küldése