



















Preview text:
lOMoAR cPSD| 58737056
H Ọ C VI Ệ N CÔNG NGH Ệ BƯU CHÍNH VI Ễ N THÔNG
KHOA AN TOÀN THÔNG TIN BÁO CÁO BÀI T Ậ
P L Ớ N H Ọ
C PH Ầ N: NH Ậ P MÔN TRÍ TU Ệ NHÂN T Ạ O Đ
Ề TÀI: D Ự ĐOÁN UNG THƯ VÚ Gi ả
ng viên hư ớ ng d ẫ n: Đào Th ị Thúy Qu ỳ nh
Nhóm môn h ọ c: 2
Nhóm BTL: 14
Sinh viên th ự
c hi ệ n: Lương Hà Anh Quân – B21DCAT 15 3 Trương H ả i Quân – B21DCAT1 58
Lê Quý Toàn – B21DC CN 117 Lê Anh Tu ấ n – B21DCAT2 05
~ Hà N ộ i, tháng 5 /202 4 ~ lOMoAR cPSD| 58737056 Mục lục I.
TỔNG QUAN GIẢI PHÁP ......................................................................... 2 1.
Giới thiệu ................................................................................................. 2 2.
Mục tiêu ................................................................................................... 2
II. CƠ SỞ LÝ THUYẾT ................................................................................ 2 1.
Maximum Likelihood Estimation .......................................................... 2 2.
Naive Bayes Classifier ............................................................................. 4 3.
Gaussian Naive Bayes ............................................................................. 5
III. DỮ LIỆU ................................................................................................... 6 1.
Giới thiệu về bộ dữ liệu ........................................................................... 6 2.
Giải thích các thông số ............................................................................ 7 3.
Biểu đồ trực quan hóa dữ liệu ................................................................ 8
3.1 Biểu đồ histogram ............................................................................... 8
3.2 Biểu đồ Heatmap ................................................................................10
IV. CÁC THƯ VIỆN SỬ DỤNG ...................................................................11 1.
Thư viện numpy .................................................................................... 12 2.
Thư viện Pandas .................................................................................... 12 3.
Thư viện Matplotlib .............................................................................. 12 4.
Thư viện Seaborn .................................................................................. 13 V. GIẢI THÍCH CODE
...................................................................................13 lOMoAR cPSD| 58737056 1
I. TỔNG QUAN GIẢI PHÁP 1. Giới thiệu
Trên toàn thế giới, ung thư vú là loại ung thư phổ biến nhất ở phụ nữ và có tỷ lệ tử
vong cao thứ hai. Chẩn đoán ung thư vú được thực hiện khi tìm thấy một khối u bất
thường (tự kiểm tra hoặc chụp X-quang) hoặc một đốm nhỏ của khối u. canxi được
nhìn thấy (trên X-quang). Sau khi tìm thấy một khối u đáng ngờ, bác sĩ sẽ tiến hành
chẩn đoán để xác định xem nó có phải là ung thư hay không và nếu có thì liệu nó
có lan sang các bộ phận khác của cơ thể hay không.
Bài toán trên liên quan đến việc dự đoán ung thư vú dựa trên các đặc trưng của khối
u, được biểu diễn qua bộ dữ liệu bao gồm các thông số khác nhau. Bộ dữ liệu này
chứa các thông tin đo lường về các khối u và cho biết việc bị ung thư vú hay không. 2. Mục tiêu
Mục tiêu của bài toán là xây dựng một mô hình phân loại để dự đoán mắc bệnh ung
thư vú dựa trên các đặc trưng đã cho. Cụ thể, bài toán sử dụng phương pháp Naive
Bayes với giả định các đặc trưng tuân theo phân phối Gaussian (Normal Distribution).
II.CƠ SỞ LÝ THUYẾT
1. Maximum Likelihood Estimation
Giả sử có các điểm dữ liệu x1, x2, …, xN. Giả sử thêm rằng ta đã biết các điểm dữ
liệu này tuân theo một phân phối nào đó được mô tả bởi bộ tham số 𝜃.
Maximum Likelihood Estimation là việc đi tìm bộ tham số 𝜃 sao cho xác suất sau
đây đạt giá trị lớn nhất:
Biểu thức (1) có ý nghĩa như thế nào và vì sao việc này có lý?
Giả sử rằng ta đã biết mô hình rồi, và mô hình này được mô tả bởi bộ tham số 𝜃.
Thế thì, 𝑝(𝑥1|𝜃) chính là xác suất xảy ra sự kiện 𝑥1 biết rằng mô hình là (được mô
tả bởi) 𝜃 (đây là một conditional probability). Và 𝑝(𝑥1,…,𝑥𝑁|𝜃) chính là xác suất
để toàn bộ các sự kiện 𝑥1,𝑥2,…,𝑥𝑁 xảy ra đồng thời (nó là một joint probability), 2
xác suất đồng thời này còn được gọi là likelihood. Ở đây, likelihood chính là hàm mục tiêu. lOMoAR cPSD| 58737056
Xác suất đồng thời này cần phải càng cao càng tốt. Việc này cũng giống như việc
đã biết kết quả, và ta cần đi tìm nguyên nhân sao cho xác suất xảy ra kết quả này
càng cao càng tốt. Maximum Likelihood chính là việc đi tìm bộ tham số 𝜃 sao cho Likelihood là lớn nhất.
Việc giải trực tiếp bài toán (1) thường là phức tạp vì việc đi tìm mô hình xác suất
đồng thời cho toàn bộ dữ liệu là ít khi khả thi. Một cách tiếp cận phổ biến là giả sử
đơn giản rằng các điểm dữ liệu 𝑥𝑛 là độc lập với nhau, nếu biết tham số mô hình 𝜃
(độc lập có điều kiện). Nói cách khác, ta xấp xỉ likelihood trong (1) bởi:
Hai sự kiện 𝑥,𝑦 là độc lập nếu xác suất đồng thời của chúng bằng tích xác suất của
từng sự kiện: 𝑝(𝑥,𝑦)=𝑝(𝑥)𝑝(𝑦). Và khi là xác suất có điều kiện:
𝑝(𝑥,𝑦|𝑧)=𝑝(𝑥|𝑧)𝑝(𝑦|𝑧)). Lúc đó, bài toán (1) có thể được giải quyết bằng cách giải bài toán tối ưu sau:
Việc tối ưu hoá một tích thường phức tạp hơn việc tối ưu một tổng, vì vậy việc tối
đa hàm mục tiêu thường được chuyển về việc tối đa log của hàm mục tiêu. Bài
toán Maximum Likelihood được đưa về bài toán Maximum Log-likelihood: 3
2. Naive Bayes Classifier
Xét bài toán classification với 𝐶 classes 1,2,…,𝐶. Giả sử có một điểm dữ liệu 𝑥∈𝑅𝑑.
Hãy tính xác suất để điểm dữ liệu này rơi vào class 𝑐. Nói cách khác, hãy tính: p(y=c|x) (1)
hoặc viết gọn thành 𝑝(𝑐|𝑥).
Tức tính xác suất để đầu ra là class c𝑐 biết rằng đầu vào là vector 𝑥. lOMoAR cPSD| 58737056
Biểu thức này, nếu tính được, sẽ giúp chúng ta xác định được xác suất để điểm dữ
liệu rơi vào mỗi class. Từ đó có thể giúp xác định class của điểm dữ liệu đó bằng
cách chọn ra class có xác suất cao nhất:
Biểu thức (2) thường khó được tính trực tiếp. Thay vào đó, quy tắc Bayes thường được sử dụng:
Từ (3) sang (4) là vì quy tắc Bayes. Từ (4) sang (5) là vì mẫu số 𝑝(𝑥) không phụ thuộc vào 𝑐.
Tiếp tục xét biểu thức (5), 𝑝(𝑐) có thể được hiểu là xác suất để một điểm rơi vào
class 𝑐. Giá trị này có thể được tính bằng MLE, tức tỉ lệ số điểm dữ liệu trong tập
training rơi vào class này chia cho tổng số lượng dữ liệu trong tập training.
Thành phần còn lại 𝑝(𝑥|𝑐), tức phân phối của các điểm dữ liệu trong class 𝑐, thường
rất khó tính toán vì 𝑥 là một biến ngẫu nhiên nhiều chiều, cần rất rất nhiều dữ liệu
training để có thể xây dựng được phân phối đó. Để giúp cho việc tính toán được 4
đơn giản, người ta thường giả sử một cách đơn giản nhất rằng các thành phần của
biến ngẫu nhiên 𝑥 là độc lập với nhau, nếu biết 𝑐. Tức là:
Naive Bayes Classifier nhờ vào tính đơn giản , có tốc độ training và test rất nhanh.
Việc này giúp nó mang lại hiệu quả cao trong các bài toán large-scale.
Ở bước training, các phân phối 𝑝(𝑐) và p(𝑥𝑖|c),i=1,…,d sẽ được xác định dựa vào
training data. Việc xác định các giá trị này có thể dựa vào Maximum Likelihood Estimation
Ở bước test, với một điểm dữ liệu mới x𝑥, class của nó sẽ được xác đinh bởi: lOMoAR cPSD| 58737056
Việc này không ảnh hưởng tới kết quả vì log là một hàm đồng biến trên tập các số dương.
Cả việc training và test của Naive Bayes Classifier là cực kỳ nhanh khi so với các
phương pháp classification phức tạp khác. Việc giả sử các thành phần trong dữ
liệu là độc lập với nhau, nếu biết class, khiến cho việc tính toán mỗi phân phối
𝑝(𝑥𝑖|𝑐) trở nên cực kỳ nhanh.
Mỗi giá trị p(𝑐), 𝑐 = 1,2,…,𝐶 có thể được xác định như là tần suất xuất hiện của
class 𝑐 trong training data.
Việc tính toán 𝑝(𝑥𝑖|𝑐) phụ thuộc vào loại dữ liệu. Trong bài toán này ta sẽ sử dụng Gaussian Naive Bayes
3. Gaussian Naive Bayes 5
Mô hình này được sử dụng chủ yếu trong loại dữ liệu mà các thành phần là các biến liên tục.
Với mỗi chiều dữ liệu 𝑖 và một class 𝑐, 𝑥𝑖 tuân theo một phân phối chuẩn có kỳ vọng μci và phương sai Trong đó, bộ tham số
được xác định bằng Maximum Likelihood:
Đây là cách tính của thư viện sklearn. III. DỮ LIỆU
1. Giới thiệu về bộ dữ liệu
Tập dữ liệu về ung thư vú này được lấy từ Bệnh viện Đại học Wisconsin, Madison
từ Tiến sĩ William H. Wolberg. lOMoAR cPSD| 58737056
Bộ dữ liệu ung thư vú có thể được sử dụng cho nhiều mục đích khác nhau, bao gồm:
Phát triển các mô hình học máy để dự đoán ung thư vú.
Đánh giá hiệu quả của các phương pháp chẩn đoán ung thư vú khác nhau.
Nghiên cứu các yếu tố nguy cơ ung thư vú.
Các thông số này được sử dụng để huấn luyện mô hình học máy, giúp dự đoán
khả năng sẽ mắc ung thư vú hay không. Bằng cách phân tích các đặc trưng hình
thái học như bán kính, kết cấu, chu vi, diện tích và độ mịn, mô hình có thể nhận
biết các mẫu liên quan đến ung thư vú. Việc hiểu rõ ý nghĩa của từng thông số
không chỉ giúp cải thiện mô hình mà còn hỗ trợ các nhà nghiên cứu và bác sĩ
trong việc đưa ra các quyết định chẩn đoán và điều trị chính xác hơn. 6
2. Giải thích các thông số
• mean_radius: Đường kính trung bình của khối u.
• mean_texture: Kết cấu trung bình của khối u.
• mean_perimeter: Chu vi trung bình của khối u.
• mean_area: Diện tích trung bình của khối u.
• mean_smoothness: Độ mịn trung bình của rìa khối u. lOMoAR cPSD| 58737056
• diagnosis: Chẩn đoán ung thư vú (0 = không mắc ung thư vú, 1 = mắc ung thư vú).
Ý nghĩa của các thuộc tính
• mean_radius: Đường kính trung bình của khối u là một chỉ báo về kích thước
của khối u. Khối u có đường kính trung bình lớn hơn có nhiều khả năng là ung thư hơn. 7
• mean_texture: Kết cấu trung bình thể hiện mức độ biến đổi của màu sắc trên
bề mặt khối u. Khối u có kết cấu mịn trung bình cao hơn có nhiều khả năng
là ít bị ung thư vú hơn.
• mean_perimeter: Chu vi trung bình của khối u là một chỉ báo về kích thước
của đường viền khối u. Khối u có chu vi trung bình lớn hơn có nhiều khả năng là ung thư hơn.
• mean_area: Diện tích trung bình của khối u là một chỉ báo về kích thước
tổng thể của khối u. Khối u có diện tích trung bình lớn hơn có nhiều khả năng là ung thư hơn.
• mean_smoothness: Độ mịn trung bình của rìa khối u là một chỉ báo về độ
đồng đều của rìa khối u. Khối u có độ mịn trung bình cao hơn có nhiều khả năng là lành tính hơn.
• diagnosis: Chẩn đoán ung thư vú là mục tiêu dự đoán của mô hình học máy.
Giá trị 0 cho biết không bị mắc ung thư vú, trong khi giá trị 1 cho biết kết quả bị ung thư vú. lOMoAR cPSD| 58737056
3. Biểu đồ trực quan hóa dữ liệu
3.1 Biểu đồ histogram 8
Biểu đồ này hiển thị phân bố của biến “diagnosis” trong tập dữ liệu ung thư vú.
Dưới đây là các chi tiết cụ thể: lOMoAR cPSD| 58737056 Mục Đích
- Phân loại khối u: Biến “diagnosis” phân loại khối u thành hai loại: không bị mắc
ung thư vú (“0”) và bị mắc ung thư vú (“1”).
- Phân bố mẫu: Biểu đồ cho thấy số lượng mẫu của mỗi loại khối u trong tập dữ liệu. Diễn Giải
- Trục x: Đại diện cho các giá trị của biến “diagnosis” (0 và 1).
- Trục y: Đại diện cho số lượng mẫu ứng với mỗi giá trị chẩn đoán. Ý Nghĩa 9
- Tỷ lệ mẫu: Biểu đồ này cho thấy sự cân bằng hoặc mất cân bằng giữa hai loại chẩn đoán.
- Quan trọng cho mô hình hóa: Hiểu rõ phân bố này giúp điều chỉnh phương pháp
xử lý dữ liệu, như sử dụng kỹ thuật cân bằng lại mẫu để cải thiện hiệu suất mô
hình học máy. Kết Luận
Biểu đồ histogram của biến “diagnosis” là công cụ hữu ích để đánh giá nhanh sự
phân bố của các loại chẩn đoán trong dữ liệu, giúp chuẩn bị tốt hơn cho các bước
phân tích và mô hình hóa tiếp theo. lOMoAR cPSD| 58737056
3.2 Biểu đồ Heatmap 10
Trong bài toán này, việc chọn các đặc trưng như mean_radius, mean_texture, và
mean_smoothness thay vì sử dụng tất cả các thông số có thể được giải thích chi tiết như sau:
• Khả năng phân biệt rõ ràng: Các đặc trưng này có khả năng phân biệt giữa
các lớp tốt. Điều này có thể được xác định thông qua phân tích thống kê và
trực quan hóa dữ liệu. Chẳng hạn, nếu một đặc trưng có sự khác biệt đáng kể
giữa các lớp, nó sẽ giúp mô hình Naive Bayes dễ dàng phân loại chính xác hơn.
• Tương quan thấp: Khi các đặc trưng ít tương quan với nhau, chúng cung cấp
thông tin độc lập và bổ sung cho mô hình. Tương quan thấp giữa các đặc
trưng giúp tránh tình trạng dư thừa thông tin, cải thiện hiệu suất của mô hình.
Đoạn mã sử dụng corr để tính toán ma trận tương quan, và dựa vào đó có thể
thấy rằng mean_radius, mean_texture, và mean_smoothness có tương quan
thấp, do đó chúng được chọn. lOMoAR cPSD| 58737056
• Đơn giản hóa mô hình: Sử dụng ít đặc trưng hơn giúp mô hình đơn giản hơn,
dễ hiểu hơn và giảm nguy cơ overfitting. Điều này đặc biệt quan trọng khi
làm việc với các thuật toán như Naive Bayes, vốn dựa trên giả định độc lập giữa các đặc trưng.
Trong bài toán lần này nhóm 7 không chọn mean_perimeter và mean_area thay
cho mean_radius do kết quả của việc thử nghiệm model ở cả 2 cách tiếp cận mang
lại kết quả thấp hơn.
IV.CÁC THƯ VIỆN SỬ DỤNG
Các thư viện được sử dụng:
• NumPy (np): Thư viện cung cấp các công cụ cho việc làm việc với mảng
và ma trận trong Python, làm cho việc tính toán số học trên dữ liệu nhanh chóng và dễ dàng hơn.
• Pandas (pd): Pandas là một thư viện mạnh mẽ cho phân tích dữ liệu trong
Python. Nó cung cấp các cấu trúc dữ liệu và công cụ xử lý dữ liệu để làm
cho việc làm việc với dữ liệu dạng bảng trở nên dễ dàng. 11
• Matplotlib (plt): Matplotlib là một thư viện trực quan hóa dữ liệu cơ bản
trong Python, cung cấp các công cụ để tạo ra các biểu đồ, đồ thị, hình ảnh,
và các loại hình vẽ khác để trình bày dữ liệu.
• Seaborn (sns): Seaborn là một thư viện trực quan hóa dữ liệu dựa trên
Matplotlib. Nó cung cấp giao diện cấp cao để tạo ra các biểu đồ thống kê
hấp dẫn và dễ đọc hơn so với Matplotlib. Đồng thời, Seaborn cũng cung
cấp một số chức năng hỗ trợ cho việc phân tích dữ liệu và trực quan hóa 1. Thư viện numpy
Trong đoạn mã được cung cấp, thư viện NumPy được sử dụng trong hàm tính toán
xác suất theo phân phối Gaussian (`calculate_likelihood_gaussian`), nơi nó được
sử dụng để tính toán các phép toán toán học như căn bậc hai và mũ. lOMoAR cPSD| 58737056 2. Thư viện Pandas
Trong đoạn mã được cung cấp, thư viện Pandas được sử dụng để đọc dữ liệu từ tệp
CSV và hiển thị một số hàng đầu tiên của DataFrame.
3. Thư viện Matplotlib 12
Đoạn mã này tạo ra một subplot với 1 hàng và 3 cột, chia sẻ trục y giữa các biểu
đồ. Sau đó, nó sử dụng thư viện Seaborn để vẽ histogram cho ba biến
`mean_radius`, `mean_smoothness`, và `mean_texture` từ dữ liệu `data` trên ba cột khác nhau của subplot. 4. Thư viện Seaborn
Đoạn mã này tính toán ma trận tương quan giữa các biến trong dữ liệu, sau đó sử
dụng Seaborn để vẽ heatmap của ma trận tương quan này. Heatmap được sử dụng
để trực quan hóa mối quan hệ tương quan giữa các biến, với các mức tương quan
được màu sắc hóa để dễ hiểu hóa. lOMoAR cPSD| 58737056 V.GIẢI THÍCH CODE
Calculate P(Y=y) for all possible y 13
Tìm xác suất p(yi) với mọi yi thuộc trong y. Các tham số truyền vào: •
df: DataFrame chứa dữ liệu •
Y: Tên cột chứa các lớp (cột target)
Hàm trả về một mảng gồm các xác suất của p(yi) với mọi yi thuộc trong y •
classes = sorted(list(df[Y].unique())) o Nhằm lấy ra các giá trị duy nhất
trong cột Y (hiểu là cột target - cột chứa các lớp để mô hình dự đoán phân lớp)
o Kết quả trả về của dòng này là một mảng gồm các giá trị duy nhất của
cột Y đã được sắp xếp •
prior = [] for i in classess: prior.append(len(df[df[Y]==i])/len(df))
o Tính xác suất cho từng lớp trong tập dữ liệu dựa trên tần suất xuất hiện của lớp đó
Ví dụ: Cho data như sau, ta sẽ nhận được kết quả (xác suất của lớp A và B tương ứng) lOMoAR cPSD| 58737056 14
Calculate P(X=x|Y=y) using Gaussian dist.
Hàm này dùng để tính xác suất có điều kiện p(xi|yj) - xác suất có điều kiện của một
giá trị đặc trưng cho trước thuộc về một lớp cụ thể. Ở đây xác suất này được tính
dựa trên cách tiếp cận là Gaussian Naive Bayes, do dữ liệu là liên tục và tuân theo phân bố chuẩn. • Các tham số truyền vào: •
df: DataFrame chứa dữ liệu. •
feat_name: Tên cột đặc trưng cần tính xác suất. 15 •
feat_val: Giá trị của đặc trưng cần tính xác suất. •
Y: Tên cột chứa nhãn lớp. lOMoAR cPSD| 58737056 •
label: Nhãn lớp cụ thể cần tính xác suất có điều kiện.
Hàm trả về: xác suất có điều kiện p(xi | yj) được tính dựa trên công thức
Calculate P(X=x1|Y=y)P(X=x2|Y=y)...P(X=xn|Y=y) * P(Y=y) for all y and find the maximum
Hàm chính của phân loại bayes đơn giản, trong trường hợp này sử dụng cách tiếp
cận phân bố chuẩn gauss do đặc điểm của dữ liệu của bài toán.
• Các tham số truyền vào:
o df: DataFrame chứa dữ liệu huấn luyện. o X: Tập các mẫu
dữ liệu cần dự đoán.
o Y: Tên cột chứa nhãn lớp cần dự đoán trong DataFrame df
• Hàm trả về list gồm các nhãn (các lớp) dự đoán tương ứng với từng dòng trong tập dữ liệu X. 16 lOMoAR cPSD| 58737056
Chạy thử mô hình sử dụng hướng tiếp cận gauss 17 lOMoAR cPSD| 58737056
Nhóm thực hiện chạy mô hình trên bộ dữ liệu ở phần trên. Nhóm sẽ chia dữ liệu
thành 2 phần là train và test theo tỉ lệ 80:20.
Sau khi chạy mô hình và nhận được kết quả dự đoán là Y_pred, nhóm tiến hành đánh giá mô hình
• confusion_matrix (Ma trận nhầm lẫn): Cho biết số lượng dự đoán đúng và sai cho từng lớp Predicted Positive Predicted Negative Actual Positive True Positive False Positive 18 Actual Negative False Negative True Negative
• Kết quả ta nhận được là: o True Positives (TP) = 36: Số lượng mẫu thực tế
là dương tính (positive) và được dự đoán là dương tính. o False Negatives
(FN) = 4: Số lượng mẫu thực tế là dương tính nhưng được dự đoán là âm
tính (negative). o False Positives (FP) = 0: Số lượng mẫu thực tế là âm tính lOMoAR cPSD| 58737056
nhưng được dự đoán là dương tính. o True Negatives (TN) = 74: Số lượng
mẫu thực tế là âm tính và được dự đoán là âm tính. o
o accuracy_score (Độ chính xác của mô hình)
• Chỉ số Accuracy được tính dựa trên công thức
Kết quả của mô hình là 96,49% một kết quả có thể ứng dụng được trên thực tế.
• f1_score: Là điểm số đánh giá độ hiệu quả của mô hình. F1 score thường
được sử dụng trong các bài toán phân loại với dữ liệu không cân bằng. Trong
dữ liệu bài toán nhóm sử dụng: Có 357 mẫu dữ liệu cho ra kết quả là 1 (Có
mắc bệnh) và 212 mẫu dữ liệu cho kết quả là 0 (Không mắc bệnh). Có thể
thấy dữ liệu của bài toán này không thực sự cân bằng nên nhóm sử dụng
thêm thông số f1_score để đánh giá.
• Chỉ số f1_score được tính dựa trên công thức 19
• Precision (Độ chính xác):Tỷ lệ giữa số lượng dự đoán đúng trên tổng số dự đoán là đúng.
• Recall (Độ phủ): Tỷ lệ giữa số lượng dự đoán đúng trên tổng số lượng mẫu thuộc về lớp đó. lOMoAR cPSD| 58737056
• F1 score được tính dựa trên 2 chỉ số trên, nhằm nếu như mô hình có chỉ số
False Positive và False Negative cao thì F1 score sẽ phản ánh điều này rõ
ràng hơn so với Accuracy_Score. Điều này càng cần được chú ý trong những
bài toán nghiêm trọng như dự đoán về y tế.
• Mô hình cho ra chỉ số f1_score là 0,9737 là một chỉ số rất tốt.
Chuyển từ dữ liệu liên tục sang dữ liệu rời rạc
Sử dụng hàm cut của thư viện pandas để rời rạc hóa dữ liệu. Dựa vào miền giá trị
của các features, nhóm chia dữ liệu thành các đoạn như trong code. 20
• Tính xác suất phụ thuộc p(xi | yj) o
Mục đích, các tham số đầu vào và giá trị trả về của hàm này vẫn giống với hàm calculate_likehood_gaussian.
o Tại đây chỉ khác ở cách tính xác suất p(xi | yi) do dữ liệu đã được rời
rạc hóa. Ta có thể tính xác suất dựa trên tần suất xuất hiện của xi với nhãn yj.