Hướng dẫn batch gradient descent python from scratch - hàng loạt gradient descent python từ đầu

[Batch] Thuật toán giảm độ dốc





Tìm kiếm trang web Bogotobogo.com:

[Batch] Thuật toán giảm độ dốc

GROGHIENT DECTENT là một thuật toán tối ưu hóa hoạt động bằng cách tìm kiếm hiệu quả không gian tham số, chặn [$ \ theta_0 $] và độ dốc [$ \ theta_1 $] cho hồi quy tuyến tính, theo quy tắc sau:

\] \ end {căn chỉnh} \]

Lưu ý rằng chúng tôi đã sử dụng '$: = $' để biểu thị một gán hoặc cập nhật.

\ [J [\ theta] \] được gọi là hàm chi phí và \ [\ alpha \] là tỷ lệ học tập, một tham số miễn phí. Trong hướng dẫn này, chúng tôi sẽ sử dụng hàm chi phí bình phương tối thiểu được xác định như sau:

\] }]^2, \ end {căn chỉnh} \]

Trong đó \ [m \] là tổng số ví dụ đào tạo và $ h_ \ theta [x^{[i]}] $ là hàm giả thuyết được xác định như thế này:

\]

trong đó Super Script $ [i] $ được sử dụng để biểu thị mẫu $ i^{th} $ [chúng tôi sẽ lưu các chỉ số cho chỉ mục vào một tính năng khi chúng tôi xử lý nhiều tính năng].

Chúng tôi cần các dẫn xuất cho cả $ \ theta_0 $ và $ \ theta_1 $:

\ [\ started {Aligned} \ frac {\ partial} {\ partial \ theta_0} j [\ theta_0, \ theta_1] x^{[i]}]-y^{[i]}] \ end {căn chỉnh} \] \ [\ start \ theta_0 + \ theta_1 x^{[i]}-y^{[i]}] \ end {Aligned} \] \ [\ start theta_0, \ theta_1] = \ frac {1} {m} \ sum_ {i = 1}^m [h_ \ theta [x^{[i]}]-y^{[i]}] ]} \ end {Align} \] \ [\ start {[i]}] x^{[i]} \ end {căn chỉnh} \]



Mã a

Mã sau chạy cho đến khi nó hội tụ hoặc đạt được tối đa. Chúng tôi nhận được $ \ theta_0 $ và $ \ theta_1 $ làm đầu ra của nó:

import numpy as np
import random
import sklearn
from sklearn.datasets.samples_generator import make_regression 
import pylab
from scipy import stats

def gradient_descent[alpha, x, y, ep=0.0001, max_iter=10000]:
    converged = False
    iter = 0
    m = x.shape[0] # number of samples

    # initial theta
    t0 = np.random.random[x.shape[1]]
    t1 = np.random.random[x.shape[1]]

    # total error, J[theta]
    J = sum[[[t0 + t1*x[i] - y[i]]**2 for i in range[m]]]

    # Iterate Loop
    while not converged:
        # for each training sample, compute the gradient [d/d_theta j[theta]]
        grad0 = 1.0/m * sum[[[t0 + t1*x[i] - y[i]] for i in range[m]]] 
        grad1 = 1.0/m * sum[[[t0 + t1*x[i] - y[i]]*x[i] for i in range[m]]]

        # update the theta_temp
        temp0 = t0 - alpha * grad0
        temp1 = t1 - alpha * grad1
    
        # update theta
        t0 = temp0
        t1 = temp1

        # mean squared error
        e = sum[ [ [t0 + t1*x[i] - y[i]]**2 for i in range[m]] ] 

        if abs[J-e] 

Bài Viết Liên Quan

Chủ Đề