Số cuộc gọi đến tổng đài trong 1 phút tuân theo phân phối Poisson với
trung bình 3 cuộc gọi/phút.
• Xác suất có đúng 5 cuộc gọi trong một phút là bao nhiêu?
• Kiểm tra kết quả trên bằng hàm dpois trong R.
• Trung bình (kỳ vọng): \(\lambda =
3\) cuộc gọi/phút
• Số cuộc gọi cần tính xác suất: \(k =
5\)
• Công thức phân phối Poisson: \(P(X = k) =
\frac{e^{-\lambda} \cdot \lambda^k}{k!}\)
\[P(X = 5) = \frac{e^{-3} \cdot 3^5}{5!}\]
• \(e^{-3} \approx 0.049787\)
• \(3^5 = 243\)
• \(5! = 120\)
\[P(X = 5) = \frac{0.049787 \cdot 243}{120} \approx 0.1008188\]
Tính xác suất có đúng 5 cuộc gọi với lambda = 3. Hàm
dpois(x, lambda) được dùng để tính xác suất tại một điểm
\(x\) của phân phối
ket_qua <- dpois(5, lambda = 3)
print(ket_qua)
## [1] 0.1008188
Sử dụng tập dữ liệu iris trong R để:
• Xây dựng mô hình hồi quy logistic để phân loại hoa
Setosa và Versicolor dựa vào
Petal.Length, Petal.Width, và
Sepal.Length.
• Tính ma trận nhầm lẫn và độ chính xác của mô hình.
Hồi quy Logistic là một thuật toán thống kê được sử dụng để dự đoán xác suất của một biến mục tiêu rời rạc (thường là nhị phân 0 hoặc 1, Đúng hoặc Sai).
Trong hồi quy tuyến tính, kết quả đầu ra có thể là bất kỳ giá trị nào
từ \(-\infty\) đến \(+\infty\). Tuy nhiên, trong phân loại,
chúng ta cần một giá trị xác suất nằm trong khoảng \([0, 1]\). Để làm được điều này, hồi quy
Logistic sử dụng hàm Sigmoid:
\[f(z) = \frac{1}{1 + e^{-z}}\] Trong
đó, \(z\) là phương trình đường thẳng
(tương tự hồi quy tuyến tính):
\[z = \beta_0 + \beta_1x_1 + \beta_2x_2 + ...
+ \beta_nx_n\]
• Mô hình tính toán giá trị \(z\)
dựa trên các biến đầu vào (\(x_1, x_2,
x_3\) tương ứng với Petal.Length, Petal.Width,
Sepal.Length).
• Giá trị \(z\) được đưa qua hàm
Sigmoid để chuyển thành xác suất \(P\).
• Ngưỡng quyết định (Decision Boundary): Thông thường, nếu \(P \geq 0.5\), mô hình sẽ phân loại vào nhóm
1 (ví dụ: Versicolor), và nếu \(P <
0.5\) sẽ thuộc nhóm 0 (ví dụ: Setosa).
Để biết mô hình hoạt động tốt đến đâu, chúng ta sử dụng hai công cụ chính
| Dự đoán: Lớp 0 | Dự đoán: Lớp 1
------------------------------------------------
Thực tế: Lớp 0 | Đúng (TN) | Sai (FP)
------------------------------------------------
Thực tế: Lớp 1 | Sai (FN) | Đúng (TP)
• TP (True Positive): Thực tế là lớp 1, dự đoán đúng là lớp 1.
• TN (True Negative): Thực tế là lớp 0, dự đoán đúng là lớp 0.
• FP (False Positive): Thực tế là lớp 0, nhưng dự đoán sai là lớp
1.
• FN (False Negative): Thực tế là lớp 1, nhưng dự đoán sai là lớp 0.
Là tỉ lệ giữa số lượng điểm dữ liệu được dự đoán đúng trên tổng số
điểm dữ liệu:
\[\text{Accuracy} = \frac{TP + TN}{TP + TN +
FP + FN}\]
Hồi quy Logistic nhị phân chỉ dùng cho 2 lớp. Ta lọc lấy loài Setosa và Versicolor
data_iris <- subset(iris, Species %in% c("setosa", "versicolor"))
data_iris$Species <- factor(data_iris$Species) # Cập nhật lại các level của factor
• Sử dụng hàm glm (Generalized Linear Models).
• formula: Species phụ thuộc vào 3 biến Petal.Length,
Petal.Width, Sepal.Length.
model <- glm(Species ~ Petal.Length + Petal.Width + Sepal.Length,
data = data_iris,
family = binomial)
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
# type = "response" để lấy giá trị xác suất từ 0 đến 1
prob <- predict(model, type = "response")
# Chuyển xác suất sang nhãn lớp: nếu > 0.5 là versicolor, ngược lại là setosa
predict_labels <- ifelse(prob > 0.5, "versicolor", "setosa")
conf_matrix <- table(Actual = data_iris$Species, Predicted = predict_labels)
print("Ma trận nhầm lẫn:")
## [1] "Ma trận nhầm lẫn:"
print(conf_matrix)
## Predicted
## Actual setosa versicolor
## setosa 50 0
## versicolor 0 50
accuracy <- sum(diag(conf_matrix)) / sum(conf_matrix)
cat("Độ chính xác của mô hình:", accuracy * 100, "%\n")
## Độ chính xác của mô hình: 100 %
# 1. Gọi thư viện
library(ResourceSelection)
## Warning: package 'ResourceSelection' was built under R version 4.5.3
## ResourceSelection 0.3-6 2023-06-27
# Chuyển Species thực tế sang dạng số 0 và 1 để làm kiểm định
# setosa thành 0, versicolor thành 1
actual_values <- as.numeric(data_iris$Species) - 1
# 2. Chạy kiểm định
# y: Giá trị thực tế (0, 1)
# fitted: Xác suất dự đoán
# g = 10 là số nhóm mặc định thường dùng
homeless_lemmesegs <- hoslem.test(actual_values, fitted(model), g = 10)
## Warning in hoslem.test(actual_values, fitted(model), g = 10): The data did not
## allow for the requested number of bins.
print(homeless_lemmesegs)
##
## Hosmer and Lemeshow goodness of fit (GOF) test
##
## data: actual_values, fitted(model)
## X-squared = 7.4857e-10, df = 1, p-value = 1