Học máy - Hồi quy logistic
Trên trang này, W3schools.com hợp tác với Học viện Khoa học Dữ liệu NYC để cung cấp nội dung đào tạo kỹ thuật số cho sinh viên của chúng tôi.
Hồi quy logistic
Hồi quy logistic nhằm mục đích giải quyết các vấn đề phân loại. Nó thực hiện điều này bằng cách dự đoán các kết quả được phân loại, không giống như hồi quy tuyến tính dự đoán một kết quả liên tục.
Trong trường hợp đơn giản nhất, có hai kết quả, được gọi là nhị thức, một ví dụ trong đó là dự đoán khối u là ác tính hay lành tính. Các trường hợp khác có nhiều hơn hai kết quả cần phân loại, trường hợp này gọi là đa thức. Một ví dụ phổ biến cho hồi quy logistic đa thức là dự đoán loại hoa iris giữa 3 loài khác nhau.
Ở đây chúng ta sẽ sử dụng hồi quy logistic cơ bản để dự đoán một biến nhị thức. Điều này có nghĩa là nó chỉ có hai kết quả có thể xảy ra.
Làm thế nào nó hoạt động?
Trong Python, chúng tôi có các mô-đun sẽ thực hiện công việc cho chúng tôi. Bắt đầu bằng cách nhập mô-đun NumPy.
import numpy
Lưu trữ các biến độc lập trong X.
Lưu trữ biến phụ thuộc trong y.
Dưới đây là một tập dữ liệu mẫu:
#X represents the size of a tumor in centimeters.
X = numpy.array([3.78, 2.44, 2.09, 0.14, 1.72, 1.65, 4.92, 4.37, 4.96, 4.52, 3.69, 5.88]).reshape(-1,1)
#Note: X has to be reshaped into a column from a row for the LogisticRegression() function to work.
#y represents whether or not the tumor is cancerous (0 for "No", 1 for "Yes").
y = numpy.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1])
Chúng tôi sẽ sử dụng một phương thức từ mô-đun sklearn, vì vậy chúng tôi cũng sẽ phải nhập mô-đun đó:
from sklearn import linear_model
Từ mô-đun sklearn, chúng ta sẽ sử dụng phương thức LogisticRegression() để tạo đối tượng hồi quy logistic.
Đối tượng này có một phương thức gọi là fit()
lấy các giá trị độc lập và phụ thuộc làm tham số và điền vào đối tượng hồi quy dữ liệu mô tả mối quan hệ:
logr = linear_model.LogisticRegression()
logr.fit(X,y)
Bây giờ chúng ta có một đối tượng hồi quy logistic sẵn sàng cho việc liệu một khối u có phải là ung thư hay không dựa trên kích thước khối u:
#predict if tumor is cancerous where the size is 3.46mm:
predicted = logr.predict(numpy.array([3.46]).reshape(-1,1))
Ví dụ
Xem toàn bộ ví dụ thực tế:
import numpy
from sklearn import linear_model
#Reshaped for Logistic function.
X = numpy.array([3.78, 2.44, 2.09, 0.14, 1.72, 1.65, 4.92, 4.37, 4.96, 4.52, 3.69, 5.88]).reshape(-1,1)
y = numpy.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1])
logr = linear_model.LogisticRegression()
logr.fit(X,y)
#predict if tumor is cancerous where the size is 3.46mm:
predicted = logr.predict(numpy.array([3.46]).reshape(-1,1))
print(predicted)
Kết quả
[0]
Chúng tôi đã dự đoán rằng một khối u có kích thước 3,46mm sẽ không phải là ung thư.
QUẢNG CÁO
hệ số
Trong hồi quy logistic, hệ số là sự thay đổi dự kiến trong log-tỷ lệ có kết quả trên mỗi đơn vị thay đổi trong X.
Điều này không có sự hiểu biết trực quan nhất vì vậy hãy sử dụng nó để tạo ra thứ gì đó có ý nghĩa hơn, tỷ lệ cược.
Ví dụ
Xem toàn bộ ví dụ thực tế:
import numpy
from sklearn import linear_model
#Reshaped for Logistic function.
X = numpy.array([3.78, 2.44, 2.09, 0.14, 1.72, 1.65, 4.92, 4.37, 4.96, 4.52, 3.69, 5.88]).reshape(-1,1)
y = numpy.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1])
logr = linear_model.LogisticRegression()
logr.fit(X,y)
log_odds = logr.coef_
odds = numpy.exp(log_odds)
print(odds)
Kết quả
[4.03541657]
Điều này cho chúng ta biết rằng khi kích thước của khối u tăng thêm 1mm thì khả năng nó trở thành khối u ung thư tăng gấp 4 lần.
Xác suất
Hệ số và giá trị chặn có thể được sử dụng để tìm ra xác suất mỗi khối u là ung thư.
Tạo một hàm sử dụng hệ số của mô hình và các giá trị chặn để trả về một giá trị mới. Giá trị mới này thể hiện xác suất quan sát đã cho là một khối u:
def logit2prob(logr,x):
log_odds = logr.coef_ * x + logr.intercept_
odds = numpy.exp(log_odds)
probability = odds / (1 + odds)
return(probability)
Giải thích chức năng
Để tìm tỷ lệ logarit cho mỗi quan sát, trước tiên chúng ta phải tạo một công thức trông giống với công thức hồi quy tuyến tính, trích xuất hệ số và điểm chặn.
log_odds = logr.coef_ * x + logr.intercept_
Để chuyển đổi tỷ lệ log thành tỷ lệ cược, chúng ta phải lũy thừa tỷ lệ log.
odds = numpy.exp(log_odds)
Bây giờ chúng ta có tỷ lệ cược, chúng ta có thể chuyển nó thành xác suất bằng cách chia nó cho 1 cộng với tỷ lệ cược.
probability = odds / (1 + odds)
Bây giờ chúng ta hãy sử dụng hàm với những gì chúng ta đã học để tìm ra xác suất mỗi khối u là ung thư.
Ví dụ
Xem toàn bộ ví dụ thực tế:
import numpy
from sklearn import linear_model
X = numpy.array([3.78, 2.44, 2.09, 0.14, 1.72, 1.65, 4.92, 4.37, 4.96, 4.52, 3.69, 5.88]).reshape(-1,1)
y = numpy.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1])
logr = linear_model.LogisticRegression()
logr.fit(X,y)
def logit2prob(logr, X):
log_odds = logr.coef_ * X + logr.intercept_
odds = numpy.exp(log_odds)
probability = odds / (1 + odds)
return(probability)
print(logit2prob(logr, X))
Kết quả
[[0,60749955] [0.19268876] [0.12775886] [0,00955221] [0,08038616] [0,07345637] [0.88362743] [0.77901378] [0.88924409] [0.81293497] [0,57719129] [0.96664243]]
Kết quả được giải thích
3,78 0,61 Xác suất khối u có kích thước 3,78cm là ung thư là 61%.
2,44 0,19 Xác suất một khối u có kích thước 2,44cm là ung thư là 19%.
2,09 0,13 Xác suất một khối u có kích thước 2,09cm là ung thư là 13%.