Bắt đầu ngayBắt đầu miễn phí

Thuật toán logistic regression

Hãy đi sâu vào bên trong và tự triển khai một thuật toán logistic regression. Vì hàm logit() của statsmodels khá phức tạp, bạn sẽ chỉ triển khai logistic regression đơn giản cho một bộ dữ liệu đơn.

Thay vì dùng tổng bình phương làm chỉ số đánh giá, chúng ta sẽ dùng likelihood. Tuy nhiên, log-likelihood ổn định hơn về mặt tính toán, nên ta sẽ dùng log-likelihood. Thực ra, còn một thay đổi nữa: vì ta muốn tối đa hóa log-likelihood, nhưng minimize() mặc định tìm giá trị nhỏ nhất, nên sẽ dễ hơn nếu ta tính log-likelihood âm (negative log-likelihood).

Giá trị log-likelihood cho mỗi quan sát là $$ log(y_{pred}) * y_{actual} + log(1 - y_{pred}) * (1 - y_{actual}) $$

Chỉ số cần tính là tổng âm của các phần đóng góp log-likelihood này.

Các giá trị biến giải thích (cột time_since_last_purchase của churn) có sẵn dưới tên x_actual. Các giá trị phản hồi (cột has_churned của churn) có sẵn dưới tên y_actual. logistic được nhập từ scipy.stats, và logit() cùng minimize() cũng đã được nạp.

Bài tập này là một phần của khóa học

Hồi quy trung cấp với statsmodels trong Python

Xem khóa học

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

# Complete the function
def calc_neg_log_likelihood(coeffs):
    # Unpack coeffs
    ____, ____ = ____
    # Calculate predicted y-values
    y_pred = ____
    # Calculate log-likelihood
    log_likelihood = ____
    # Calculate negative sum of log_likelihood
    neg_sum_ll = ____
    # Return negative sum of log_likelihood
    return ____

# Test the function with intercept 10 and slope 1
print(calc_neg_log_likelihood([10, 1]))
Chỉnh sửa và Chạy Mã