Hồi quy logistic giảm dần độ dốc python

Độ dốc gốc 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ố, phần chặn[$\theta_0$] và độ dốc[$\theta_1$] cho hồi quy tuyến tính, theo quy tắc sau

\[\begin{aligned} \theta. = \theta -\alpha \frac{\delta}{\delta \theta}J[\theta]. \end{căn} \]

Lưu ý rằng chúng tôi đã sử dụng '$. =$' để chỉ định hoặc cập nhật

\[J[\theta]\] được gọi là hàm chi phí và \[\alpha\] là tốc độ học tập, một tham số miễn phí. Trong hướng dẫn này, chúng ta sẽ sử dụng hàm chi phí bình phương nhỏ nhất được định nghĩa như sau

\[\begin{aligned} J[\theta] = \frac{1}{2m}\sum_{i=1}^m [h_\theta[x^{[i]}]-y^{[i]

trong đó \[m\] là tổng số ví dụ huấn luyện và $h_\theta[x^{[i]}]$ là hàm giả thiết được định nghĩa như sau

\[\begin{aligned} h_\theta[x^{[i]}] = \theta_0 + \theta_1 x^{[i]} \end{aligned} \]

trong đó siêu tập lệnh $[i]$ được sử dụng để biểu thị mẫu $i^{th}$ [chúng tôi sẽ lưu các chỉ số con 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 ta cần đạo hàm cho cả $\theta_0$ và $\theta_1$

\[\begin{aligned} \frac{\partial}{\partial \theta_0}J[\theta_0, \theta_1] = \frac{1}{m} \sum_{i=1}^m [h_\theta[

Đoạn mã sau chạy cho đến khi nó hội tụ hoặc đạt đến số lần lặp tối đa. Chúng tôi nhận được $\theta_0$ và $\theta_1$ là đầ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] 

Chủ Đề