Barcha kurslar Yo'nalishlar Reyting Kirish Ro'yxatdan o'tish

Bu modulda nazariya kodga aylandi: linear regression NumPy bilan noldan yozildi — tayyor kutubxona (scikit-learn) ishlatilmadi, chunki maqsad ichki mexanizmni ko’rish.

Ma’lumot va gipoteza

Boshlanish nuqtasi — (x, y) juftliklari va parametrlarning boshlang’ich qiymati:

import numpy as np

x = np.array([1.0, 2.0, 3.0, 4.0, 5.0])   # xususiyat
y = np.array([3.0, 5.2, 6.8, 9.1, 11.0])  # javob
w, b = 0.0, 0.0                            # boshlang'ich parametrlar

def h(x, w, b):
    return w * x + b

E’tibor bering: h bitta son emas, butun massiv uchun ishlaydi — NumPy vektorlashuvi tufayli sikl kerak emas. Bu ham qisqa, ham sezilarli tez.

Cost funksiyani kodlash

def cost(x, y, w, b):
    m = len(x)
    xato = h(x, w, b) - y
    return (xato ** 2).sum() / (2 * m)

print(cost(x, y, w, b))

Natija:

28.6858

w = b = 0 da model hamma narsaga 0 deb javob beradi — xato katta. O’qitishning butun maqsadi shu sonni kamaytirish.

Gradient descent sikli

alpha = 0.02
m = len(x)

for i in range(1000):
    xato = h(x, w, b) - y
    dw = (xato * x).sum() / m      # ∂J/∂w
    db = xato.sum() / m            # ∂J/∂b
    w = w - alpha * dw             # bir vaqtda yangilash:
    b = b - alpha * db             # dw, db avval hisoblab olindi
    if i % 200 == 0:
        print(f"{i}: J = {cost(x, y, w, b):.4f}")

Natija (taxminan):

0: J = 24.1341
200: J = 0.0684
400: J = 0.0464
600: J = 0.0330
800: J = 0.0249

J ning har chiqishda kamayib borishi — algoritm to’g’ri ishlayotganining asosiy belgisi. Agar J o’ssa yoki sakrasa — birinchi gumon α da: uni kamaytiring. Bu tekshiruv odatini tashlamang: cost egri chizig’i (learning curve) — o’qitishning "yurak kardiogrammasi".

Klassik xato — yangilashda ketma-ketlikni buzish: w ni yangilab, so’ng db ni yangi w bilan hisoblash. Yuqoridagi kodda dw va db ikkalasi eski parametrlarda hisoblanib, keyin o’zlashtirilgan — shuni saqlang.

Natijani ko’rish

import matplotlib.pyplot as plt

plt.scatter(x, y, label="ma'lumot")
plt.plot(x, h(x, w, b), color="red", label=f"h(x) = {w:.2f}x + {b:.2f}")
plt.legend()
plt.show()

Qizil chiziq — model o’rgangan bog’lanish. U nuqtalar orasidan "eng kam kvadrat xato" ma’nosida o’tadi. Yangi x uchun bashorat — shunchaki h(yangi_x, w, b).

Xulosa

Butun supervised learning shu uch qadamda mujassam: model tanla → xatoni o’lchaydigan cost yoz → costni optimallashtir. Keyinroq model murakkablashadi (neyron tarmoqlar), cost boshqa bo’ladi (cross-entropy), optimizator rivojlanadi (Adam) — lekin skelet o’sha-o’sha. Shu modulni qo’lda yozib chiqqan odam keyingi mavzularda "sehr" ko’rmaydi — faqat tanish qadamlarni ko’radi.

Amaliyot

  1. Yuqoridagi kodni to’liq terib ishga tushiring; oxirgi w va b ni yozib oling (w ≈ 2, b ≈ 1 atrofida chiqishi kerak).
  2. α = 0.5 qilib qayta ishga tushiring va J ga nima bo’lishini kuzating; keyin α = 0.001 bilan — nechta iteratsiya yetmayotganini baholang.
  3. Har 10-iteratsiyadagi J qiymatlarini listga yig’ib, iteratsiya bo’yicha grafigini chizing (learning curve).
  4. O’zingiz kichik dataset o’ylab toping (masalan, tajriba yili → maosh, 6–8 nuqta) va modelni shunga o’qiting; 10 yil tajriba uchun bashorat qiling.
  5. Kodni def fit(x, y, alpha, iters): funksiyaga o’rang — u (w, b) qaytarsin. Bu sizning birinchi mini-kutubxonangiz.

Modul testi keyingi darsda.

Amaliyot (Coding) — konspekt

Amaliyot (Coding) Maqola

Linear regression’ni Python’da noldan yozish konspekti: gipoteza, cost, gradient descent sikli va natijani vizualizatsiya qilish.

Eslatma yozish uchun saytga kiring.

Resurslar hozircha qo'shilmagan

O'qituvchi dars uchun qo'shimcha materiallarni qo'shganida shu yerda paydo bo'ladi.

Savol berish uchun saytga kiring.

Hozircha savollar yo'q

Bu dars yuzasidan birinchi savolni siz bering.