Data Science and Machine Learning

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 44

DATA SCIENCE AND MACHINE LEARNING

Mathematical and Statistical Methods


PREFACE
Trong thế giới tự động hóa, điện toán đám mây, thuật toán, trí tuệ nhân tạo và dữ
liệu lớn hiện nay, rất ít chủ đề có liên quan như khoa học dữ liệu và học máy. Sự phổ biến
gần đây của chúng không chỉ nằm ở khả năng ứng dụng vào các câu hỏi thực tế mà còn ở
sự kết hợp tự nhiên của nhiều ngành khác nhau, bao gồm toán học, thống kê, khoa học
máy tính, kỹ thuật, khoa học và tài chính.
Đối với những người bắt đầu tìm hiểu những chủ đề này, vô số kỹ thuật tính toán
và ý tưởng toán học có thể khiến họ choáng ngợp. Một số có thể hài lòng với việc chỉ học
cách sử dụng các công thức có sẵn để áp dụng vào các tình huống thực tế. Nhưng điều gì
sẽ xảy ra nếu các giả định của công thức hộp đen bị vi phạm? Chúng ta vẫn có thể tin
tưởng vào kết quả chứ? Thuật toán nên được điều chỉnh như thế nào? Để có thể thực sự
hiểu về khoa học dữ liệu và học máy, điều quan trọng là phải đánh giá cao toán học và
thống kê cơ bản cũng như các thuật toán thu được.
Mục đích của cuốn sách này là cung cấp một tài liệu dễ tiếp cận nhưng toàn diện
về khoa học dữ liệu và học máy. Nó dành cho bất kỳ ai quan tâm đến việc hiểu rõ hơn về
toán học và thống kê làm nền tảng cho sự đa dạng phong phú của các ý tưởng và thuật
toán học máy trong khoa học dữ liệu. Quan điểm của chúng tôi là ngôn ngữ máy tính đến
rồi đi, nhưng những ý tưởng và thuật toán cơ bản sẽ tồn tại mãi mãi và sẽ tạo cơ sở cho
sự phát triển trong tương lai.
Trước khi chuyển sang mô tả các chủ đề trong cuốn sách này, chúng tôi muốn nói
đôi lời về triết lý của nó. Cuốn sách này là kết quả của nhiều khóa học khác nhau về khoa
học dữ liệu và học máy tại Đại học Queensland và New South Wales, Úc. Khi dạy những
khóa học này, chúng tôi nhận thấy rằng sinh viên không chỉ háo hức học cách áp dụng
thuật toán mà còn muốn hiểu cách thức hoạt động thực sự của những thuật toán này. Tuy
nhiên, nhiều sách giáo khoa hiện tại giả định quá nhiều kiến thức nền tảng (ví dụ: lý
thuyết đo lường và phân tích hàm) hoặc quá ít (mọi thứ đều là hộp đen), và tình trạng quá
tải thông tin từ các nguồn internet thường rời rạc và mâu thuẫn khiến học sinh gặp khó
khăn hơn trong việc tiếp thu dần dần nâng cao kiến thức và hiểu biết của mình. Do đó,
chúng tôi muốn viết một cuốn sách về khoa học dữ liệu và học máy có thể được đọc như
một câu chuyện tuyến tính, với “cốt truyện” đáng kể trong phần phụ lục. Câu chuyện

1
chính bắt đầu rất đơn giản và xây dựng dần dần đến trình độ khá cao cấp. Cốt truyện chứa
tất cả thông tin cơ bản cần thiết cũng như thông tin bổ sung từ đại số tuyến tính và phân
tích hàm (Phụ lục A), vi phân và tối ưu hóa đa biến (Phụ lục B), xác suất và thống kê
(Phụ lục C). Hơn nữa, để làm cho những ý tưởng trừu tượng trở nên sống động, chúng tôi
tin rằng điều quan trọng là người đọc phải nhìn thấy cách triển khai thực tế của các thuật
toán, được chuyển đổi trực tiếp từ lý thuyết. Sau một hồi cân nhắc, chúng tôi đã chọn
Python làm ngôn ngữ lập trình của mình. Nó có sẵn miễn phí và đã được sử dụng làm
ngôn ngữ lập trình được nhiều người thực hành về khoa học dữ liệu và học máy lựa chọn.
Nó có nhiều gói hữu ích để thao tác dữ liệu (thường được chuyển từ R) và được thiết kế
để dễ lập trình. Phần giới thiệu nhẹ nhàng về Python được đưa ra trong Phụ lục D.
Keywords
Để giữ cho kích thước của cuốn sách có thể quản lý được, chúng tôi phải chọn lọc
các chủ đề. Các ý tưởng quan trọng và mối liên hệ giữa các khái niệm khác nhau được
đánh dấu thông qua các từ khóa và tham chiếu trang (được biểu thị bằng dấu ☞) ở lề. Các
định nghĩa và định lý chính được đánh dấu trong các hộp. Bất cứ khi nào khả thi, chúng
tôi cung cấp bằng chứng về các định lý. Cuối cùng, chúng tôi rất coi trọng ký hiệu. Thông
thường, khi đã có một hệ thống ký hiệu ngắn gọn và nhất quán, những ý tưởng tưởng
chừng khó khăn lại đột nhiên trở nên rõ ràng. Chúng tôi sử dụng các phông chữ khác
nhau để phân biệt giữa các loại đối tượng khác nhau. Các vectơ được biểu thị bằng các
chữ in nghiêng in đậm, x, X và ma trận bằng các chữ in hoa trong phông chữ La Mã in
đậm, A, K. Chúng tôi cũng phân biệt giữa vectơ ngẫu nhiên và giá trị của chúng bằng
cách sử dụng chữ cái viết hoa và viết thường, ví dụ: X (vectơ ngẫu nhiên) và x (giá trị
hoặc kết quả của nó). Sets thường được ký hiệu bằng chữ thư pháp G, ℌ. Ký hiệu cho xác
suất và kỳ vọng lần lượt là P và E. Các phân phối được biểu thị bằng phông chữ sans
serif, như trong Bin và Gamma; ngoại lệ là các ký hiệu phổ biến N và U cho phân phối
chuẩn và thống nhất. Bản tóm tắt ☞ xvii những ký hiệu và chữ viết tắt quan trọng nhất
được đưa ra ở Trang xvii–xxi.
Khoa học dữ liệu cung cấp ngôn ngữ và kỹ thuật cần thiết để hiểu và xử lý dữ liệu.
Nó liên quan đến việc thiết kế, thu thập, phân tích và giải thích dữ liệu số, với mục đích
trích xuất các mẫu và thông tin hữu ích khác. Học máy, có liên quan chặt chẽ đến khoa
học dữ liệu, liên quan đến việc thiết kế các thuật toán và tài nguyên máy tính để học từ dữ
liệu. Việc tổ chức cuốn sách gần như tuân theo các bước điển hình trong một dự án khoa
học dữ liệu: Thu thập dữ liệu để lấy thông tin về một câu hỏi nghiên cứu; làm sạch, tóm

2
tắt và trực quan hóa dữ liệu; mô hình hóa và phân tích dữ liệu; chuyển các quyết định về
mô hình thành các quyết định và dự đoán về câu hỏi nghiên cứu. Vì đây là cuốn sách
thiên về toán học và thống kê nên phần lớn sẽ tập trung vào mô hình hóa và phân tích.
Chúng ta bắt đầu trong Chương 1 với việc đọc, cấu trúc, tóm tắt và trực quan hóa
dữ liệu bằng cách sử dụng gói thao tác dữ liệu pandas trong Python. Mặc dù tài liệu được
đề cập trong chương này không yêu cầu kiến thức toán học nhưng nó tạo thành điểm khởi
đầu rõ ràng cho khoa học dữ liệu: hiểu rõ hơn về bản chất của dữ liệu có sẵn. Trong
Chương 2, chúng tôi giới thiệu các thành phần chính của việc học thống kê. Chúng tôi
phân biệt giữa các kỹ thuật học có giám sát và không giám sát, đồng thời thảo luận cách
chúng tôi có thể đánh giá hiệu suất dự đoán của các phương pháp học có giám sát
(không). Một phần quan trọng của việc học thống kê là mô hình hóa dữ liệu. Chúng tôi
giới thiệu nhiều mô hình hữu ích khác nhau trong khoa học dữ liệu bao gồm các mô hình
Gaussian tuyến tính, đa biến và Bayesian. Nhiều thuật toán trong học máy và khoa học
dữ liệu sử dụng kỹ thuật Monte Carlo, đây là chủ đề của Chương 3. Monte Carlo có thể
được sử dụng để mô phỏng, ước tính và tối ưu hóa. Chương 4 liên quan đến học không
giám sát, trong đó chúng ta thảo luận về các kỹ thuật như ước tính mật độ, phân cụm và
phân tích thành phần chính. Sau đó, chúng tôi chuyển sự chú ý sang học tập có giám sát
trong Chương 5 và giải thích các ý tưởng đằng sau một lớp mô hình hồi quy rộng rãi.
Trong đó, chúng tôi cũng mô tả cách sử dụng gói statsmodels của Python để xác định và
phân tích các mô hình tuyến tính. Chương 6 xây dựng dựa trên chương hồi quy trước
bằng cách phát triển các khái niệm mạnh mẽ về phương pháp hạt nhân và chính quy hóa,
cho phép các ý tưởng cơ bản của Chương 5 được mở rộng một cách tinh tế, sử dụng lý
thuyết tái tạo không gian Hilbert hạt nhân. Trong Chương 7, chúng ta tiến hành nhiệm vụ
phân loại, cũng thuộc về khung học có giám sát và xem xét các phương pháp phân loại
khác nhau, bao gồm phân loại Bayes, phân tích phân biệt tuyến tính và bậc hai, K-láng
giềng gần nhất và máy vectơ hỗ trợ. Trong Chương 8, chúng ta xem xét các phương
pháp hồi quy và phân loại linh hoạt sử dụng cấu trúc cây. Cuối cùng, trong Chương 9,
chúng tôi xem xét hoạt động của mạng lưới thần kinh và học sâu, đồng thời chỉ ra rằng
các thuật toán học tập này có cách diễn giải toán học đơn giản. Cuối mỗi chương đều có
một loạt bài tập phong phú.

3
NOTATION
Tất nhiên, chúng ta có thể sử dụng bất kỳ ký hiệu nào chúng ta muốn; đừng cười nhạo
các ký hiệu; phát minh ra chúng, chúng rất mạnh mẽ. Trên thực tế, ở một mức độ lớn
hơn, toán học là phát minh ra những ký hiệu tốt hơn.
Chúng tôi đã cố gắng sử dụng một hệ thống ký hiệu, theo thứ tự quan trọng, đơn
giản, mang tính mô tả, nhất quán và tương thích với các lựa chọn lịch sử. Việc đạt được
tất cả các mục tiêu này mọi lúc là điều không thể, nhưng chúng tôi hy vọng rằng ký hiệu
của chúng tôi sẽ giúp nhanh chóng nhận ra loại hoặc “hương vị” của một số đối tượng
toán học nhất định (vectơ, ma trận, vectơ ngẫu nhiên, thước đo xác suất, v.v.) và làm rõ
các vấn đề phức tạp ý tưởng.
Chúng tôi sử dụng nhiều công cụ hỗ trợ đánh máy khác nhau và sẽ có ích cho
người đọc nếu biết được một số công cụ hỗ trợ này.
 Phông chữ in đậm được sử dụng để biểu thị các đối tượng tổng hợp, chẳng hạn
như vectơ cột x = [ x1 , … , xn ]T và ma trận X = [ x ij]. Cũng lưu ý sự khác biệt giữa
phông chữ đậm thẳng đứng cho ma trận và phông chữ đậm nghiêng cho vectơ.
 Các biến ngẫu nhiên thường được xác định bằng các chữ cái La Mã viết hoa X, Y,
Z và kết quả của chúng bằng các chữ cái viết thường x, y, z. Do đó, các vectơ ngẫu
nhiên được biểu thị bằng chữ in hoa nghiêng đậm: X = [ X 1 , … , X n ]T .
 Các tập hợp vectơ thường được viết bằng phông chữ thư pháp, chẳng hạn như ꭓ,
nhưng tập số thực sử dụng kiểu chữ in đậm bảng đen thông dụng ℝ. Kỳ vọng và
xác suất cũng sử dụng phông chữ sau.
 Phân phối xác suất sử dụng phông chữ sans serif, chẳng hạn như Bin và Gamma.
Ngoại lệ đối với quy tắc này là các ký hiệu “chuẩn” N và U cho phân bố chuẩn và
phân bố đều.
 Chúng ta thường bỏ qua dấu ngoặc khi biết rõ đối số của hàm hoặc toán tử là gì.

 Chúng tôi sử dụng màu sắc để nhấn mạnh rằng một số từ nhất định đề cập đến tập
dữ liệu, hàm hoặc gói trong Python. Tất cả mã được viết bằng phông chữ máy
đánh chữ. Để tương thích với các lựa chọn ký hiệu trước đây, chúng tôi đã giới
thiệu ký hiệu X màu xanh lam đặc biệt cho ma trận mô hình (thiết kế) của mô hình
tuyến tính.

4
 Đôi khi chúng ta sẽ sử dụng quy ước ký hiệu Bayes trong đó cùng một ký hiệu
được sử dụng để biểu thị các mật độ xác suất (có điều kiện) khác nhau. Đặc biệt,
thay vì viết f X (x ) và f X∨Y (x∨ y ) đối với hàm mật độ xác suất (pdf) của X và pdf có
điều kiện của X cho trước Y, chúng ta chỉ cần viết f (x) và f (x∨ y ). Phong cách ký
hiệu đặc biệt này có thể có giá trị mô tả lớn, mặc dù rõ ràng là mơ hồ.
 Quy tắc chung về phông chữ/ký hiệu:

 Ký hiệu toán học thông dụng:

5
 Matrix/vector notation

 Các chữ cái và từ dành riêng

6
 Probability distributions

 Chữ viết tắt và từ viết tắt

7
8
CHAPTER 1. IMPORTING, SUMMARIZING, AND
VISUALIZING DATA
Chương này mô tả nơi tìm các tập dữ liệu hữu ích, cách tải chúng vào Python và cách
(tái) cấu trúc dữ liệu. Chúng tôi cũng thảo luận về nhiều cách khác nhau để có thể tóm tắt
dữ liệu thông qua bảng và hình. Loại biểu đồ và tóm tắt bằng số nào phù hợp tùy thuộc
vào loại biến đang được sử dụng. Những độc giả chưa quen với Python nên đọc Phụ lục
D trước.
1.1. Introduction
Dữ liệu có nhiều dạng và dạng khác nhau, nhưng nhìn chung có thể được coi là kết
quả của một thử nghiệm ngẫu nhiên nào đó - một thử nghiệm không thể xác định trước
kết quả nhưng hoạt động của nó vẫn cần được phân tích. Dữ liệu từ một thử nghiệm ngẫu
nhiên thường được lưu trữ dưới dạng table or spreadsheet. Một quy ước thống kê là biểu
thị các biến - thường được gọi là các features- dưới dạng columns và các mục (hoặc đơn
vị) riêng lẻ dưới dạng rows. Sẽ rất hữu ích khi nghĩ đến ba loại cột trong bảng tính như
vậy:
1. Cột đầu tiên thường là cột định danh hoặc cột chỉ mục, trong đó mỗi đơn vị/hàng
được cấp một tên hoặc ID duy nhất.
2. Một số cột (thuộc tính) nhất định có thể tương ứng với thiết kế của thử nghiệm,
chẳng hạn như chỉ định đơn vị thuộc nhóm thử nghiệm nào. Thông thường các
mục trong các cột này mang tính xác định; nghĩa là chúng vẫn giữ nguyên nếu thử
nghiệm được lặp lại.
3. Các cột khác biểu thị các phép đo quan sát được của thử nghiệm. Thông thường,
các phép đo này thể hiện sự biến thiên; nghĩa là chúng sẽ thay đổi nếu thử nghiệm
được lặp lại.
Có rất nhiều bộ dữ liệu có sẵn từ Internet và trong các gói phần mềm. Kho lưu trữ tập
dữ liệu nổi tiếng là Kho lưu trữ máy học được duy trì bởi Đại học California tại Irvine
(UCI), được tìm thấy tại https://archive.ics.uci.edu/.
Các tập dữ liệu này thường được lưu trữ ở định dạng CSV (giá trị được phân tách
bằng dấu phẩy), có thể dễ dàng đọc bằng Python. Ví dụ: để truy cập bộ dữ liệu abalone
từ trang web này bằng Python, hãy tải tệp xuống thư mục làm việc của bạn, nhập gói
pandas qua:

9
Điều quan trọng là thêm header = None, vì điều này cho Python biết rằng dòng
đầu tiên của CSV không chứa tên của các tính năng, vì nó giả định như vậy theo mặc
định. Bộ dữ liệu ban đầu được sử dụng để dự đoán tuổi bào ngư từ các phép đo vật lý,
chẳng hạn như trọng lượng và đường kính vỏ.
Bạn có thể tìm thấy một kho lưu trữ hữu ích khác gồm hơn 1000 bộ dữ liệu từ các
gói khác nhau trong ngôn ngữ lập trình R do Vincent Arel-Bundock thu thập tại:
https://vincentarelbundock.github.io/Rdatasets/datasets.html.
Ví dụ: để đọc bộ dữ liệu iris nổi tiếng của Fisher từ gói bộ dữ liệu của R sang Python,
hãy nhập:

Bộ dữ liệu iris chứa bốn phép đo vật lý (chiều dài/chiều rộng đài hoa/cánh hoa)
trên 50 mẫu (mỗi mẫu) của 3 loài iris: setosa, versicolor và virginica. Lưu ý rằng trong
trường hợp này các tiêu đề được bao gồm. Đầu ra của read_csv là một đối tượng
DataFrame, là cách triển khai bảng tính của pandas; xem Mục D.12.1. Phương thức
head DataFrame cung cấp một số hàng đầu tiên của DataFrame, bao gồm cả tên thuộc
tính. Số lượng hàng có thể được truyền dưới dạng đối số và theo mặc định là 5. Đối với
Iris DataFrame, chúng ta có:

Tên của các thuộc tính có thể được lấy thông qua thuộc tính columns của đối tượng
DataFrame, như trong iris.columns. Lưu ý rằng cột đầu tiên là cột chỉ mục trùng lặp, có
tên (được gán bởi pandas) là 'Unnamed: 0'. Chúng ta có thể bỏ cột này và gán lại đối
tượng iris như sau:
10
Dữ liệu cho từng thuộc tính (tương ứng với tên cụ thể của nó) có thể được truy cập
bằng cách sử dụng ký hiệu cắt lát [] của Python. Ví dụ: đối tượng iris['Sepal.Length']
chứa 150 độ dài lá đài.
Ba hàng đầu tiên của bộ dữ liệu abalone từ kho lưu trữ UCI có thể được tìm thấy
như sau:

Ở đây, các tiêu đề còn thiếu đã được gán theo thứ tự các số tự nhiên. Các tên phải
tương ứng với Sex, Length, Diameter, Height, Whole weight, Shucked weight, Viscera
weight, Shell weight, and Rings, như được mô tả trong tệp có tên abalone.names trên
trang web UCI. Chúng ta có thể thêm tên của các tính năng vào DataFrame theo cách thủ
công bằng cách gán lại thuộc tính cột, như trong:

1.2. Structuring Features According to Type


 Quantitative (Định lượng)
Nhìn chung, chúng ta có thể phân loại các thuộc tính theo số lượng hoặc chất lượng.
Thuộc tính định lượng có “đại lượng số” như chiều cao, tuổi, số lần sinh, v.v. và có thể
liên tục hoặc rời rạc. Các thuộc tính định lượng liên tục nhận các giá trị trong một phạm
vi liên tục các giá trị có thể có, chẳng hạn như độ cao, điện áp hoặc năng suất cây trồng;
những đặc điểm như vậy thể hiện ý tưởng rằng các phép đo luôn có thể được thực hiện
chính xác hơn. Các thuộc tính định lượng rời rạc có một số khả năng có thể đếm được,
chẳng hạn như số lượng.
 Qualitative (Định tính)
Ngược lại, các đặc điểm định tính không có ý nghĩa bằng số, nhưng các giá trị có thể
có của chúng có thể được chia thành một số loại cố định, chẳng hạn như {M,F} cho giới
tính hoặc {blue, black, brown, green} cho màu mắt. Vì lý do này các tính năng như vậy
còn được gọi là phân loại. Một nguyên tắc đơn giản là: nếu việc tính trung bình dữ liệu

11
không có ý nghĩa thì đó là dữ liệu categorical. Ví dụ, việc chọn màu mắt trung bình là
vô nghĩa. Tất nhiên vẫn có thể biểu diễn dữ liệu phân loại bằng các con số, chẳng hạn
như 1 = xanh lam, 2 = đen, 3 = nâu, nhưng những con số như vậy không mang ý nghĩa
định lượng. Các tính năng phân loại thường được gọi là factors.
Khi thao tác, tóm tắt và hiển thị dữ liệu, điều quan trọng là phải xác định chính xác
loại biến (thuộc tính). Chúng tôi minh họa điều này bằng cách sử dụng bộ dữ liệu
nutrition_elderly từ [73], trong đó có kết quả của một nghiên cứu liên quan đến việc đo
lường dinh dưỡng của 13 thuộc tính (cột) cho 226 người cao tuổi (hàng). Bộ dữ liệu có
thể được lấy từ:
http://www.biostatisticien.eu/springeR/nutrition_elderly.xls.
Các tệp Excel có thể được đọc trực tiếp vào pandas thông qua phương thức read_excel:

12
Tất cả 13 thuộc tính trong nutri (hiện tại) được Python hiểu là các biến định
lượng, thực tế là số nguyên, đơn giản vì chúng đã được nhập dưới dạng số nguyên. Ý
nghĩa của những con số này trở nên rõ ràng hơn khi chúng ta xem xét mô tả các đặc điểm
được đưa ra trong Bảng 1.2. Bảng 1.1 cho thấy cách phân loại các loại biến.

13
Lưu ý rằng các loại thuộc tính định tính ở hàng thứ hai của Bảng 1.1, thịt,. . . , sô
cô la có một trật tự tự nhiên. Những thuộc tính định tính như vậy đôi khi được gọi là thứ
tự (ordinal), trái ngược với những đặc điểm định tính không có thứ tự, được gọi là danh
nghĩa (nominal). Chúng tôi sẽ không phân biệt như vậy trong cuốn sách này.
Chúng ta có thể sửa đổi value and type Python cho từng thuộc tính phân loại bằng
cách sử dụng các phương thức replace and astype. Đối với các đặc điểm thuộc tính,
chẳng hạn như giới tính, chúng ta có thể thay thế giá trị 1 with 'Male' and 2 with 'Female',
and change the type to 'category' as follows.

Cấu trúc của các thuộc tính loại phân loại khác có thể được thay đổi theo cách
tương tự. Các thuộc tính liên tục như chiều cao nên có kiểu float:

14
Chúng ta có thể lặp lại điều này cho các biến khác (xem Bài tập 2) và lưu khung
dữ liệu đã sửa đổi này dưới dạng tệp CSV, bằng cách sử dụng phương thức pandas
to_csv.

1.3. Summary Tables


Việc tóm tắt một bảng tính dữ liệu lớn ở dạng cô đọng hơn thường rất hữu ích.
Bảng số lượng hoặc bảng tần số giúp bạn dễ dàng hiểu rõ hơn về phân bố cơ bản của một
biến, đặc biệt nếu dữ liệu là định tính. Các bảng như vậy có thể thu được bằng các
phương thức describe và value_counts.
Trong ví dụ đầu tiên, chúng tôi tải nutri Dataframe mà chúng tôi đã cơ cấu lại và
lưu (xem phần trước) dưới dạng 'nutri.csv', sau đó tạo bản tóm tắt cho thuộc tính (cột)
'fat'.

Chúng tôi thấy rằng có 8 loại chất béo khác nhau được sử dụng và sunflower có số
lượng cao nhất, với 68 trên 226 người sử dụng loại chất béo nấu ăn này. Phương thức
value_counts đưa ra số lượng cho các loại chất béo khác nhau.

Cũng có thể sử dụng crosstab để lập bảng chéo giữa hai hoặc nhiều biến, lập bảng
chéo đưa ra bảng dự phòng:

15
Ví dụ, chúng tôi thấy rằng tỷ lệ nam giới độc thân nhỏ hơn đáng kể so với tỷ lệ
phụ nữ độc thân trong tập dữ liệu về người cao tuổi. Để thêm tổng số hàng và cột vào
bảng, hãy sử dụng margins=True.

1.4. Summary Statistics (Thống kê tóm tắt)


Trong những điều sau đây, x=[x 1 , … , x n ]T là một vectơ cột gồm n số. Đối với dữ
liệu nutri của chúng tôi, ví dụ, vectơ x có thể tương ứng với chiều cao của n = 226 cá
thể.
Giá trị trung bình mẫu của x, ký hiệu là x , chỉ đơn giản là giá trị trung bình của các
giá trị dữ liệu:

Ví dụ, sử dụng phương thức mean trong Python cho dữ liệu nutri, chúng ta có:

The p-sample quantile (0 < p < 1) of x is a value x such that at least a fraction p of the
sample quantile data is less than or equal to x and at least a fraction 1− p of the data is
greater than or equal to x . The sample median is the sample 0.5-quantile. The p-sample
quantile is also called sample median the 100 × p percentile. The 25, 50, and 75 sample
percentiles are called the first, second, and third quartiles of the data.
Note 1:
P-sample quantiles là các giá trị mà chia một tập dữ liệu được sắp xếp thành P phần bằng
nhau (hoặc cách chia P đều nhau). Trong ngữ cảnh thống kê, P-sample quantiles thường

16
được sử dụng để đo lường phân phối của một tập dữ liệu và giúp chúng ta hiểu rõ hơn về
cách dữ liệu phân phối trong các khoảng phần trăm khác nhau.
Cụ thể, P-sample quantiles bao gồm:
- Quantile thứ p: Đây là giá trị chia dữ liệu thành p% bên dưới nó. Ví dụ, quantile
thứ 25 (hoặc quartile thứ nhất) là giá trị chia dữ liệu thành 25% bên dưới nó.
- Median (Quantile thứ 50): Giá trị chia dữ liệu thành 50% bên dưới nó. Nó là một
trung vị quan trọng trong thống kê và đại diện cho giá trị trung bình của tập dữ
liệu.
- Interquartile Range (IQR): IQR là khoảng giữa quantile thứ 25 (Q1) và quantile
thứ 75 (Q3). Nó đo lường phạm vi giữa 25% đầu và 25% cuối của dữ liệu và
thường được sử dụng để xác định sự biến động giữa các khoảng trung vị.
Công thức tính quantiles có thể khá phức tạp và phụ thuộc vào cách mà bạn muốn tính
toán chúng. Cách thông thường để tính quantiles là sử dụng phân phối dựa trên vị trí của
quantiles trong tập dữ liệu đã sắp xếp. Trong thống kê, quantiles thường được sử dụng để
trực quan hóa và hiểu phân phối dữ liệu, xác định giá trị biên cho phân tích thống kê và
kiểm tra sự biến động trong dữ liệu.
Note 2:
Quartiles là các giá trị mà chia một tập dữ liệu đã được sắp xếp thành bốn phần bằng
nhau (hoặc cách chia thành bốn phần bằng nhau). Chúng giúp chúng ta hiểu rõ hơn về
phân phối của dữ liệu và cách nó phân bố trong bốn khoảng phần trăm khác nhau.
Cụ thể, quartiles bao gồm ba giá trị chính:
- Quartile thứ nhất (Q1): Quartile thứ nhất là giá trị chia tập dữ liệu thành 25%
bên dưới nó. Nó cũng được gọi là "Lower Quartile" và thường đại diện cho giá trị
trung bình của 25% đầu tiên của tập dữ liệu.
- Quartile thứ hai (Q2): Quartile thứ hai là giá trị chia tập dữ liệu thành 50% bên
dưới nó. Đây chính là giá trị trung vị (median) của tập dữ liệu, và nó chia dữ liệu
thành hai phần bằng nhau.
- Quartile thứ ba (Q3): Quartile thứ ba là giá trị chia tập dữ liệu thành 75% bên
dưới nó. Nó cũng được gọi là "Upper Quartile" và thường đại diện cho giá trị
trung bình của 25% cuối cùng của tập dữ liệu.
Quartiles thường được sử dụng trong thống kê để đánh giá biến động và phân phối của dữ
liệu. Chúng cung cấp thông tin về sự phân bố của dữ liệu trong các khoảng phần trăm

17
quan trọng và giúp xác định các giá trị biên cho phân tích thống kê và trực quan hóa dữ
liệu.
Đối với dữ liệu nutri, chúng thu được như sau.

Giá trị trung bình và trung vị của mẫu cung cấp thông tin về vị trí của dữ liệu,
trong khi khoảng cách giữa các lượng tử mẫu (giả sử là các lượng tử 0,1 và 0,9) cho thấy
một số dấu hiệu về sự phân tán (lan truyền) của dữ liệu. Các biện pháp khác để phân tán
là phạm vi mẫu (sample range), maxixi − minixi, phương sai mẫu (sample variance):

Chúng ta đã gặp phương pháp describe trong phần trước để tóm tắt các đặc điểm
định tính, thông qua số lượng phần tử duy nhất và số lượng thường xuyên nhất. Khi áp
dụng cho một đặc điểm định lượng, nó sẽ trả về minimum, maximum, mean, and the
three quartiles. Ví dụ: tính năng 'height' trong dữ liệu nutri có số liệu thống kê tóm tắt
sau.

18
1.5. Visualizing Data
Trong phần này chúng tôi mô tả các phương pháp khác nhau để trực quan hóa dữ
liệu. Điểm chính mà chúng tôi muốn đưa ra là cách hiển thị các biến phải luôn được điều
chỉnh phù hợp với các loại biến; ví dụ, dữ liệu định tính phải được biểu thị khác với dữ
liệu định lượng.
1.5.1. Plotting Qualitative Variables
Giả sử chúng ta muốn hiển thị bằng đồ thị có bao nhiêu người cao tuổi đang sống
một mình, như một cặp vợ chồng, với gia đình hoặc với người khác. Hãy nhớ lại rằng dữ
liệu được đưa ra trong cột tình huống của dữ liệu nutri của chúng tôi. Giả sử rằng chúng
ta đã cơ cấu lại dữ liệu, như trong Phần 1.2, bạn có thể tạo một barplot về số lượng người
trong mỗi danh mục thông qua hàm plt.bar của barplot trong thư viện đồ thị matplotlib
tiêu chuẩn. Đầu vào lần lượt là vị trí trục x, chiều cao và chiều rộng của từng thanh.

19
1.5.2. Plotting Quantitative Variables
Bây giờ chúng tôi trình bày một số phương pháp hữu ích để trực quan hóa dữ liệu
định lượng, một lần nữa sử dụng bộ dữ liệu nutri. Trước tiên, chúng tôi sẽ tập trung vào
các thuộc tính liên tục (ví dụ: 'tuổi') và sau đó thêm một số biểu đồ cụ thể liên quan đến
các thuộc tính rời rạc (ví dụ: 'trà'). Mục đích là để mô tả sự biến đổi hiện diện trong một
thuộc tính duy nhất. Điều này thường liên quan đến xu hướng trung tâm, trong đó các
quan sát có xu hướng tập trung xung quanh, với ít quan sát hơn ở xa hơn. Các khía cạnh
chính của phân bố là vị trí (hoặc trung tâm) của độ biến thiên, mức độ phân tán của độ
biến thiên (các giá trị kéo dài bao xa tính từ tâm) và hình dạng của độ biến thiên; ví dụ:
liệu các giá trị có được trải đều đối xứng ở hai bên của tâm hay không.
1.5.2.1. Boxplot
Biểu đồ hộp có thể được xem dưới dạng biểu diễn đồ họa của bản tóm tắt năm số
của dữ liệu bao gồm các phần tư tối thiểu, tối đa và tứ phân vị thứ nhất, thứ hai và thứ ba.
Hình 1.2 đưa ra sơ đồ hộp về đặc điểm 'tuổi' của dữ liệu nutri.
Tham số widths xác định chiều rộng của boxplot, theo mặc định được vẽ theo
chiều dọc. Đặt vert=False sẽ vẽ sơ đồ hộp theo chiều ngang, như trong Hình 1.2.

Hộp được vẽ từ tứ phân vị thứ nhất (Q1) đến tứ phân vị thứ ba (Q3). Đường thẳng đứng
bên trong hộp biểu thị vị trí của dải phân cách (vị trí trung vị). Cái gọi là "râu" (whiskers)
kéo dài sang hai bên của hộp. Râu bên trái mở rộng đến mức lớn nhất trong số (a) mức tối
thiểu của dữ liệu và (b) Q1 − 1,5 IQR. Tương tự, râu bên phải mở rộng đến mức nhỏ nhất

20
trong (a) mức tối đa của dữ liệu và (b) Q3 + 1,5 IQR. Bất kỳ điểm dữ liệu nào bên ngoài
râu đều được biểu thị bằng một dấu chấm rỗng nhỏ, biểu thị điểm đáng ngờ hoặc sai lệch
(ngoại lệ). Lưu ý rằng boxplot cũng có thể được sử dụng cho các thuộc tính định lượng
rời rạc.
1.5.2.2. Histogram
Histogram là một biểu diễn đồ họa phổ biến về sự phân bố của một đặc điểm định
lượng. Chúng tôi bắt đầu bằng cách chia phạm vi giá trị thành một số thùng hoặc lớp.
Chúng tôi đếm số lượng các giá trị rơi vào mỗi thùng và sau đó lập biểu đồ bằng cách vẽ
các hình chữ nhật có đáy là các khoảng trống và chiều cao là số đếm. Trong Python
chúng ta có thể sử dụng hàm plt.hist. Ví dụ: Hình 1.3 hiển thị biểu đồ của 226 độ tuổi
trong nutri, được xây dựng thông qua mã Python sau.

Ở đây 9 thùng đã được sử dụng. Thay vì sử dụng số lượng thô (mặc định), trục
tung ở đây đưa ra tỷ lệ phần trăm trong mỗi lớp, được xác định bằng số count/total. Điều
này đạt được bằng cách chọn tham số “weights” bằng với vectơ có các mục 1/266, có độ
dài 226. Các tham số đồ thị khác nhau cũng đã được thay đổi.

Histogram cũng có thể được sử dụng cho các thuộc tính rời rạc, mặc dù có thể cần phải
xác định rõ ràng các thùng và vị trí của các dấu tích trên các trục.

21
1.5.2.3. Empirical Cumulative Distribution Function (Hàm phân phối tích lũy
thực nghiệm)
The empirical cumulative distribution function, denoted by Fn, là một hàm bậc
thang trong đó hàm phân bố tích lũy theo kinh nghiệm nhảy một lượng k/n tại các giá trị
quan sát, trong đó k là số lượng quan sát liên kết ở giá trị đó. Đối với các quan sát x1,…,
xn, Fn(x) là tỷ lệ các quan sát nhỏ hơn hoặc bằng x, tức là:

22
1.5.3. Data Visualization in a Bivariate Setting (Trực quan hóa dữ liệu trong
cài đặt hai biến)
Trong phần này, chúng tôi trình bày một số công cụ hỗ trợ trực quan hữu ích để
khám phá mối quan hệ giữa hai thuộc tính. Việc biểu diễn đồ họa sẽ phụ thuộc vào loại
của hai thuộc tính.
1.5.3.1. Two-way Plots for Two Categorical Variables (Đồ thị hai chiều cho hai
biến phân loại)
So sánh các barplots cho hai biến phân loại liên quan đến việc giới thiệu các
subplots cho hình. Hình 1.5 minh họa bảng dự phòng ở Mục 1.3, bảng chéo tình trạng
(situation) gia đình với giới tính của người cao tuổi. Nó chỉ đơn giản hiển thị hai barplots
cạnh nhau trong cùng một hình.

Hình này được tạo bằng gói seaborn, được thiết kế đặc biệt để đơn giản hóa các tác vụ
trực quan hóa thống kê.

1.5.3.2. Plots for Two Quantitative Variables (Đồ thị cho hai biến định lượng)

23
Chúng ta có thể hình dung các mô hình giữa hai đặc điểm định lượng bằng cách sử
dụng biểu đồ phân tán. Điều này có thể được thực hiện với plt.scatter. Đoạn mã sau tạo
ra một biểu đồ phân tán giữa 'weight' và 'height' cho dữ liệu nutri.

Mã Python tiếp theo minh họa rằng có thể tạo ra các biểu đồ phân tán rất phức tạp,
chẳng hạn như trong Hình 1.7. Hình vẽ thể hiện cân nặng (khối lượng) khi sinh của trẻ có
mẹ hút thuốc (hình tam giác màu xanh) hoặc không (vòng tròn màu đỏ). Ngoài ra, các
đường thẳng được điều chỉnh cho phù hợp với hai nhóm, cho thấy cân nặng khi sinh giảm
theo tuổi khi người mẹ hút thuốc nhưng lại tăng khi người mẹ không hút thuốc! Câu hỏi
đặt ra là liệu những xu hướng này có ý nghĩa thống kê hay là do tình cờ. Chúng ta sẽ xem
lại tập dữ liệu này sau trong cuốn sách.

24
1.5.3.3. Plots for One Qualitative and One Quantitative Variable (Đồ thị cho một
biến định tính và một biến định lượng)
Trong cài đặt này, thật thú vị khi vẽ các biểu đồ hình hộp của thuộc tính định
lượng cho từng cấp độ của thuộc tính phân loại. Giả sử các biến được cấu trúc chính xác,
hàm plt.boxplot có thể được sử dụng để tạo ra Hình 1.8, sử dụng đoạn mã sau:

25
Further Reading
Trọng tâm của cuốn sách này là phân tích dữ liệu bằng toán học và thống kê, và
trong phần còn lại của cuốn sách, chúng tôi giả định rằng dữ liệu có sẵn ở dạng phù hợp
để phân tích. Tuy nhiên, phần lớn khoa học dữ liệu thực tế liên quan đến việc làm sạch dữ
liệu; nghĩa là đưa nó vào một dạng có thể phân tích được bằng các gói phần mềm tiêu
chuẩn. Các mô-đun Python tiêu chuẩn như numpy và pandas có thể được sử dụng để
định dạng lại các hàng, đổi tên các cột, loại bỏ các ngoại lệ bị lỗi, hợp nhất các hàng, v.v.
McKinney, người tạo ra pandas, đưa ra nhiều nghiên cứu điển hình thực tế trong [84].
Các kỹ thuật trực quan hóa dữ liệu hiệu quả được minh họa đẹp mắt trong [65].
Exercises
Before you attempt these exercises, make sure you have up-to-date versions of the
relevant Python packages, specifically matplotlib, pandas, and seaborn. An easy way to

26
ensure this is to update packages via the Anaconda Navigator, as explained in Appendix
D.
1. Visit the UCI Repository https://archive.ics.uci.edu/. Read the description of the data
and download the Mushroom data set agaricus-lepiota.data. Using pandas, read the
data into a DataFrame called mushroom, via read_csv.
a, How many features are in this data set?
 There are 23 features in this data set.
b, What are the initial names and types of the features?

c, Rename the first feature (index 0) to 'edibility' and the sixth feature (index 5) to 'odor'
[Hint: the column names in pandas are immutable; so individual columns cannot be
modified directly. However it is possible to assign the entire column names list via
mushroom.columns = newcols. ]

27
d, The 6th column lists the various odors of the mushrooms: encoded as 'a', 'c', . . . .
Replace these with the names 'almond', 'creosote', etc. (categories corresponding to
each letter can be found on the website). Also replace the 'edibility' categories 'e' and 'p'
with 'edible' and 'poisonous'.

e, Make a contingency table cross-tabulating 'edibility' and 'odor'.

f, Which mushroom odors should be avoided, when gathering mushrooms for


consumption? (Nên tránh mùi nấm nào khi thu hái nấm để tiêu thụ?)

28
g, What proportion of odorless mushroom samples were safe to eat? (Tỷ lệ mẫu nấm
không mùi nào an toàn để ăn?)

2. Change the type and value of variables in the nutri data set according to Table 1.2
and save the data as a CSV file. The modified data should have eight categorical
features, three floats, and two integer features.

3. It frequently happens that a table with data needs to be restructured before the data
can be analyzed using standard statistical software. As an example, consider the test
scores in Table 1.3 of 5 students before and after specialized tuition.

29
This is not in the standard format described in Section 1.1. In particular, the student
scores are divided over two columns, whereas the standard format requires that they
are collected in one column, e.g., labelled 'Score'. Reformat (by hand) the table in
standard format, using three features:
• 'Score', taking continuous values,
• 'Time', taking values 'Before' and 'After',
• 'Student', taking values from 1 to 5.
Useful methods for reshaping tables in pandas are melt, stack, and unstack.

4. Create a similar barplot as in Figure 1.5, but now plot the corresponding proportions
of males and females in each of the three situation categories. That is, the heights of
the bars should sum up to 1 for both barplots with the same ’gender’ value. [Hint:
seaborn does not have this functionality built in, instead you need to first create a
contingency table and use matplotlib.pyplot to produce the figure.]

30
31
5. The iris data set, mentioned in Section 1.1, contains various features, including
'Petal.Length' and 'Sepal.Length', of three species of iris: setosa, versicolor, and
virginica.
a, Load the data set into a pandas DataFrame object.

b, Using matplotlib.pyplot, produce boxplots of 'Petal.Length' for each the three


species, in one figure.

c, Make a histogram with 20 bins for 'Petal.Length'.

32
d, Produce a similar scatterplot for 'Sepal.Length' against 'Petal.Length' to that of
the left plot in Figure 1.9. Note that the points should be colored according to the
“Species” feature as per the legend in the right plot of the figure.

33
d, Using the kdeplot method of the seaborn package, reproduce the right plot of
Figure 1.9, where kernel density plots for 'Petal.Length' are given.

34
6. Import the data set EuStockMarkets from the same website as the iris data set
above. The data set contains the daily closing prices of four European stock indices
during the 1990s, for 260 working days per year.
a, Create a vector of times (working days) for the stock prices, between 1991.496 and
1998.646 with increments of 1/260.

35
b, Reproduce Figure 1.10. [Hint: Use a dictionary to map column names (stock
indices) to colors.]

36
7. Consider the KASANDR data set from the UCI Machine Learning Repository, which
can be downloaded from
https://archive.ics.uci.edu/ml/machine-learning-databases/00385/de .tar.bz2.
This archive file has a size of 900Mb, so it may take a while to download.
Uncompressing the file (e.g., via 7-Zip) yields a directory de containing two large
CSV files: test_de.csv and train_de.csv, with sizes 372Mb and 3Gb, respectively.
Such large data files can still be processed efficiently in pandas, provided there is
enough memory. The files contain records of user information from Kelkoo web logs
in Germany as well as meta-data on users, offers, and merchants. The data sets have 7
attributes and 1919561 and 15844717 rows, respectively. The data sets are
anonymized via hex strings.

37
8. Visualizing data involving more than two features requires careful design, which is
often more of an art than a science. (Trực quan hóa dữ liệu liên quan đến nhiều hơn
hai thuộc tính đòi hỏi phải thiết kế cẩn thận, thường mang tính nghệ thuật hơn là khoa
học.)
a, Go to Vincent Arel-Bundocks’s website (URL given in Section 1.1) and read the
Orange data set into a pandas DataFrame object called orange. Remove its first
(unnamed) column.

b, The data set contains the circumferences of 5 orange trees at various stages in their
development. Find the names of the features.
c, In Python, import seaborn and visualize the growth curves (circumference against
age) of the trees, using the regplot and FacetGrid methods.
Cách 1:

38
39
40
Cách 2:

Cách 3:

41
CHAPTER 2. STATISTICAL LEARNING
Mục đích của chương này là giới thiệu cho người đọc một số khái niệm và chủ đề
phổ biến trong học tập thống kê. Chúng tôi thảo luận về sự khác biệt giữa học tập có
giám sát và không giám sát cũng như cách chúng tôi có thể đánh giá hiệu suất dự đoán
của học tập có giám sát. Chúng tôi cũng xem xét vai trò trung tâm của các thuộc tính
tuyến tính và Gaussian trong việc mô hình hóa dữ liệu. Chúng ta kết thúc bằng phần về
học tập Bayesian. Nền tảng xác suất và thống kê yêu cầu được đưa ra trong Phụ lục C.
2.1. Introduction
Mặc dù cấu trúc và trực quan hóa dữ liệu là những khía cạnh quan trọng của khoa
học dữ liệu, thách thức chính nằm ở việc phân tích toán học dữ liệu. Khi mục tiêu là
diễn giải mô hình và định lượng độ không đảm bảo trong dữ liệu, phân tích này
thường được gọi là statistical learning. Ngược lại, khi nhấn mạnh vào việc đưa ra dự
đoán bằng cách sử dụng dữ liệu thống kê quy mô lớn thì người ta thường nói về
machine learning or data mining.
Có hai mục tiêu chính của việc lập mô hình dữ liệu (modeling data): 1) dự đoán
chính xác một số lượng quan tâm trong tương lai, dựa trên một số dữ liệu được quan sát
và 2) để khám phá các mẫu bất thường hoặc thú vị trong dữ liệu. Để đạt được những mục
tiêu này, người ta phải dựa vào kiến thức từ ba trụ cột quan trọng của khoa học toán học.
Function approximation (Xấp xỉ hàm). Xây dựng mô hình toán học cho dữ liệu thường
có nghĩa là hiểu cách một biến dữ liệu phụ thuộc vào một biến dữ liệu khác. Cách tự
nhiên nhất để biểu diễn mối quan hệ giữa các biến là thông qua hàm toán học hoặc bản
đồ. Chúng ta thường giả định rằng hàm toán học này chưa được biết hoàn toàn nhưng có
thể được tính gần đúng nếu có đủ sức mạnh tính toán và dữ liệu. Do đó, các nhà khoa học
dữ liệu phải hiểu cách tốt nhất để ước chừng và biểu diễn các hàm bằng cách sử dụng ít
bộ nhớ và xử lý máy tính nhất.
Optimization. Cho một lớp mô hình toán học, chúng ta mong muốn tìm ra mô hình tốt
nhất có thể có trong lớp đó. Điều này đòi hỏi một số loại thủ tục tìm kiếm hoặc tối ưu hóa
hiệu quả. Bước tối ưu hóa có thể được xem như một quá trình điều chỉnh hoặc hiệu chỉnh
một hàm cho dữ liệu được quan sát. Bước này thường đòi hỏi kiến thức về các thuật toán
tối ưu hóa và lập trình hoặc mã hóa máy tính hiệu quả.
Probability and Statistics. Nói chung, dữ liệu được sử dụng để khớp với mô hình được
xem như sự hiện thực hóa của một quá trình ngẫu nhiên hoặc vectơ số, có luật xác suất
xác định độ chính xác mà chúng ta có thể dự đoán các quan sát trong tương lai. Do đó, để
42
định lượng sự không chắc chắn vốn có trong việc đưa ra dự đoán về tương lai và nguồn
gốc sai sót trong mô hình, các nhà khoa học dữ liệu cần nắm vững lý thuyết xác suất và
suy luận thống kê.
2.2. Supervised and Unsuprvised Learning
Với một vectơ đầu vào hoặc vector thuộc tính x, một trong những mục tiêu chính
của học máy là dự đoán phản hồi của biến đầu ra hoặc biến phản hồi y. Ví dụ: x có thể là
chữ ký điện tử và y là biến nhị phân cho biết chữ ký đó là thật hay sai. Một ví dụ khác là
trong đó x đại diện cho cân nặng và thói quen hút thuốc của người mẹ đang mang thai và
y đại diện cho cân nặng khi sinh của em bé. Nỗ lực của khoa học dữ liệu đối với dự đoán
này được mã hóa trong một hàm toán học g, được gọi là hàm dự đoán (prediction
function), lấy đầu vào x và đưa ra dự đoán g(x) cho y (ví dụ: ký hiệu là ^y ). Theo một
nghĩa nào đó, g bao gồm tất cả thông tin về mối quan hệ giữa các biến x và y, loại trừ các
tác động của cơ hội và tính ngẫu nhiên về bản chất.
Trong các bài toán hồi quy, biến phản hồi y có thể nhận bất kỳ giá trị thực nào.
Ngược lại, khi y chỉ có thể nằm trong một tập hữu hạn, giả sử y ∈ {0, . . . , c − 1}, thì việc
dự đoán y về mặt khái niệm giống như việc phân loại đầu vào x thành một trong các loại
c và do đó việc dự đoán trở thành một vấn đề phân loại (classification problem).
Chúng ta có thể đo lường độ chính xác của một dự đoán đối với một phản hồi y
nhất định bằng cách sử dụng một số hàm mất mát (loss function) Loss(y, ^y ). Trong cài
đặt hồi quy, lựa chọn thông thường là mất mát bình phương (y - ^y )2. In the case of
classification, the zero-one (also written 0 – 1) loss function Loss(y, ^y ) = 1{y≠ ^y } is often
used, phát sinh tổn thất 1 bất cứ khi nào lớp dự đoán ^y không bằng lớp y. Ở phần sau của
cuốn sách này, chúng ta sẽ gặp nhiều hàm mất mát hữu ích khác, chẳng hạn như cross-
entropy and hinge loss functions (xem ví dụ: Chương 7).

Không có khả năng là bất kỳ hàm toán học g nào cũng có thể đưa ra dự đoán chính
xác cho tất cả các cặp (x, y) có thể có mà người ta có thể gặp trong Tự nhiên. Một lý do
cho điều này là ngay cả với cùng một đầu vào x, đầu ra y có thể khác nhau, tùy thuộc vào
hoàn cảnh ngẫu nhiên. Vì lý do này, chúng tôi áp dụng cách tiếp cận xác suất và giả sử

43
rằng mỗi cặp (x, y) là kết quả của một cặp ngẫu nhiên (X, Y) có mật độ xác suất chung
f(x, y). Sau đó, chúng tôi đánh giá hiệu quả dự đoán thông qua tổn thất dự kiến, thường
được gọi là rủi ro (risk), đối với g:

44

You might also like