Okullar için Robotik ve Mühendislik · anaokulundan liseye

6. ünite / 8

Eğit ve değerlendir: ridge, karar kütüğü ve dürüst doğrulama

Bir saat sonraki sıcaklığı ridge regresyonla tahmin et, "26 °C'yi aşacak mı?" sorusunu karar kütüğüyle sınıflandır; zaman serisini zamana göre böl ve "değişmez" tabanını geç.

Bu ünitenin sonunda

  • Standartlaştırılmış özelliklerle ridge regresyonu normal denklemlerle eğitmek
  • MAE, RMSE ve R² değerlerini yorumlamak ve persistence tabanıyla karşılaştırmak
  • Rastgele bölme, boşluklu zaman bölmesi ve kayan pencereli doğrulama arasındaki farkı açıklamak
  • Bir eşik sorusunu karar kütüğüyle sınıflandırıp doğruluğunu ölçmek

Ders notları

Tablo hazır; şimdi bir model seçip eğitiyoruz. Başlangıç için en dürüst seçim doğrusal modeldir: hızlıdır, ağırlıkları okunur ve mikrodenetleyiciye birkaç çarpmayla sığar (7. ünite). ML dersindeki doğrusal regresyon ve karar ağacı derslerinin aynısını burada gerçek sensör verisine uyguluyoruz.

Ridge regresyon

Özellikler önce standartlaştırılır (ortalama 0, σ 1), sonra (XᵀX + λI) w = Xᵀy denklemi çözülür. λ küçük bir cezadır: lag1, lag2 ve lag3 neredeyse aynı bilgiyi taşıdığı için ağırlıklar birbirini dengeleyen büyük sayılara kaçabilir; ceza onları makul tutar. Sabit terim cezalanmaz. Eğitimden sonra ağırlıklar ham ölçeğe geri çevrilir ki cihaz ölçekleme yapmadan y = w₀ + Σ wᵢxᵢ hesaplasın.

Ölçütler ve taban

  • MAE: ortalama mutlak hata, °C. "Ortalama kaç derece yanılıyorum?"
  • RMSE: büyük hataları daha çok cezalandırır; birimi yine °C.
  • R²: varyansın ne kadarını açıkladım? Günlük döngü yüzünden kolayca 0,95 çıkar, tek başına yanıltıcıdır.
  • Persistence tabanı: "bir saat sonra da şimdiki kadar olacak". Hiç eğitim gerektirmez. Modelin anlamı, bu tabanı ne kadar geçtiğidir.
beceri = 1 − RMSEmodel / RMSEtaban

Sera verisinde, son %25'i test olarak ayırınca h = 6 için model RMSE yaklaşık 0,68 °C, persistence 1,24 °C çıkar: yaklaşık %45 beceri. h = 1 için fark küçüktür (0,34 ve 0,42): on dakika sonrası zaten şimdiye çok benzer.

Zaman serisini nasıl bölmeli?

Rastgele bölmede test satırının komşuları eğitimdedir; model "dün ile yarını" görmüş gibi olur. Zamana göre bölmede geçmişle eğitilir, gelecekle test edilir; ikisinin arasına ufuk kadar boşluk konur, çünkü eğitimin son satırının hedefi testin ilk satırlarına uzanır. Kayan pencereli doğrulama (walk-forward) bunu birkaç kez tekrarlar: her katta geçmişin tamamıyla eğit, hemen sonraki bloğu test et. Böylece tek bir şanslı günün sonucu yanıltmaz.

Sınıflandırma: karar kütüğü

Bazen soru sayı değil evet/hayırdır: "bir saat sonra 26 °C'yi aşacak mı?" Tek bölmeli karar ağacı (kütük) en iyi eşiği arar; sera verisinde seçtiği özellik şimdiki sıcaklıktır, eşik yaklaşık 24,8 °C ve test doğruluğu 0,94 civarıdır. Python kodundaki sade sürüm Gini yerine hata oranını küçülttüğü için biraz farklı bir eşik bulabilir. Sınıflar dengesizdir (sıcak saatler azdır): doğruluğun yanında kesinlik ve duyarlılığa da bak.

Simülasyon

Eğit ve değerlendir: regresyon ve sınıflandırma

Sıcaklığı h adım sonrası için doğrusal (ridge) modelle tahmin et ya da "1 saat sonra 26 °C'yi aşacak mı?" sorusunu karar kütüğüyle sınıflandır. Rastgele bölme, zamana göre bölme ve kayan pencereli doğrulamayı karşılaştır; "değişmez" tabanını geçebiliyor musun?

Test örnekleri (zaman sırasıyla son 2 gün): gerçek ve tahmin15.719.623.527.431.35.235.575.926.266.616.95gün°C
1 kat, 249 test örneği · model: MAE 0,546, RMSE 0,681 °C, R² 0,959 "Değişmez" tabanı: RMSE 1,239 °C

Kod

walk_forward.py: kayan pencereli doğrulama (Python)
import numpy as np

def walk_forward(n, folds, min_train, gap):
    block = (n - min_train) // folds
    for f in range(folds):
        start = min_train + f * block
        stop = n if f == folds - 1 else start + block
        train = np.arange(0, max(0, start - gap))   # geçmişin tamamı, boşluklu
        test = np.arange(start, stop)               # hemen sonraki blok
        yield train, test

def evaluate(X, y, now, fit, h):
    rows = []
    for train, test in walk_forward(len(y), 4, len(y) // 3, gap=h):
        model = fit(X[train], y[train])
        e = y[test] - model(X[test])
        base = y[test] - now[test]                  # persistence: "değişmez"
        rows.append((np.sqrt((e ** 2).mean()), np.sqrt((base ** 2).mean())))
    for k, (m, b) in enumerate(rows):
        print(f"fold {k}: model RMSE {m:.3f}  baseline {b:.3f}  skill {1 - m / b:+.0%}")
    return rows
stump.h: eğitilmiş karar kütüğü cihazda (C++)
// Python'da bulunan eşik buraya yapıştırılır
const float HOT_THRESHOLD = 24.81f;    // özellik: şimdiki sıcaklık

uint8_t willBeHot(float tempNow) {     // 1: bir saat içinde 26 °C üstü bekleniyor
  return tempNow > HOT_THRESHOLD ? 1 : 0;
}

void loop() {
  float t = readTemperature();
  if (willBeHot(t)) openWindowEarly();  // erken önlem: pencere şimdi aralanır
  delay(600000UL);                      // 10 dakika
}
Kodu tarayıcıda çalıştırPython · NumPy · matplotlib · Pyodide

Python ve NumPy bu sayfada, tarayıcında çalışır (Pyodide). Kodu değiştirip yeniden çalıştırabilirsin; dersin veri setleri çalışma klasöründe hazır. Kod matplotlib kullanırsa grafikler çıktının altında görünür, yazdığı dosyalar (ör. egitim_gecmisi.csv) indirilebilir.

egitim.pypython

Çıktı

Çıktı burada görünecek.

Kendin dene

Simülasyonda regresyon kipinde ufku 6 yap ve önce rastgele bölmeyi, sonra zamana göre bölmeyi seç: RMSE nasıl değişti ve hangisine güvenirsin? Kayan pencereli doğrulamayı aç ve katlar arasındaki farkı yorumla. Modelin "değişmez" tabanını kaç yüzde geçtiğini yaz. Sonra sınıflandırma kipine geç: kütük hangi özelliği ve eşiği seçti, kesinlik ve duyarlılık kaç? Python kodunu çalıştırıp aynı karşılaştırmayı CSV üzerinde yap.

Sık yapılan hatalar

  • Zaman serisini rastgele bölüp çıkan hatayı rapor etmek: komşu satırlar eğitimde olduğu için sonuç iyimserdir.
  • Zaman bölmesinde boşluk bırakmamak: eğitimin son hedefleri test dönemine taşar.
  • Persistence tabanını hiç hesaplamamak: R² = 0,96 etkileyici görünür ama taban zaten 0,9'u veriyor olabilir.
  • Standartlaştırmanın ortalama ve σ değerlerini tüm veriden hesaplamak: test döneminin bilgisi eğitime sızar.

Yazılım mühendisliği bağlantısı

Değerlendirme kodu da üretim kodudur: bir hata, yanlış bir modeli sahaya gönderir.

  • Bölme fonksiyonları için özellik testleri yaz: "testteki her indeks eğitimdeki her indeksten en az h büyük".
  • Her deneyde veri sürümü, özellik listesi, bölme ve ölçütleri bir deney kaydına yaz; tekrarlanamayan bir sonuç sonuç değildir.
  • Modelin tabanı geçemediği durumda CI'ın kırmızıya dönmesi bir kabul ölçütüdür.

Kendini sına

  1. Persistence tabanı neyi tahmin eder?

  2. Zaman serisinde rastgele bölme neden yanıltıcıdır?

  3. Model RMSE 0,68 °C, persistence 1,24 °C. Beceri yaklaşık kaçtır?

  4. Ridge regresyondaki λ cezası ne işe yarar?

Bu üniteden sonra bitirme projesinde

Parçalar ve ilgili sayfalar

Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç