You are on page 1of 40

MỤC LỤC

PHẦN 1. TỔNG QUAN VỀ HỌC MÁY .......................................................................3


1.1. Khái niệm ..............................................................................................................3
1.2. Một số ví dụ về học máy ......................................................................................3
1.3. Học có giám sát ( Supervised Learning ) .............................................................. 6
1.3.1. Khái niệm........................................................................................................6
1.3.2. Một số phương pháp trong học giám sát ........................................................6
1.4. Học không giám sát (Unsupervised Learning) .....................................................6
1.4.1. Khái niệm ........................................................................................................6
1.4.2. Một số phương pháp học không giám sát .......................................................7
1.5. Những vấn đề cơ bản trong học máy ....................................................................7
1.5.1. Độ đo kết quả (performance metric) ............................................................... 7
1.5.2. Lựa chọn mô hình (model selection) .............................................................. 8
1.5.3. Mô hình tham số và mô hình phi tham số (parametric and non-parametric
models)....................................................................................................................10
PHẦN 2. MỘT SỐ PHƯƠNG PHÁP TRONG HỌC MÁY- THỬ NGHIỆM - ĐÁNH
GIÁ ................................................................................................................................ 10
2.1. Hồi quy( Regression) ..........................................................................................10
2.1.1. Hồi quy tuyến tính ........................................................................................10
2.1.2. Hồi quy logistic ............................................................................................. 14
2.2. Phân lớp...............................................................................................................15
2.2.1. Thuật toán Naive Bayer ................................................................................15
2.2.2. Support Vector Machine (SVM) ..................................................................18
2.3. Phân cụm .............................................................................................................22
2.3.1. K-means ........................................................................................................22
2.3.2. FarthesFirst ...................................................................................................26
PHẦN 3. HỆ THỐNG GỢI Ý (RECOMMENDER SYSTEMS) .................................29
3.1. Tổng quan về hệ thống gợi ý...............................................................................29
3.1.1. Khái niệm......................................................................................................29
3.1.2. Các phương pháp gợi ý .................................................................................29
3.2. Phương pháp láng giềng gần nhất ( Nearest neighbors) .....................................32
3.2.1 Bộ dữ liệu MovieLens ...................................................................................33
3.2.2. Giải thuật User K-Nearest-neighbors (user k-NN) ......................................33
3.3. Phương pháp Ma trận hệ số (Matrix factorization)[4] ........................................36
3.3.1. Mô hình Matrix factorization cơ bản ............................................................ 37
3.3.2. Các thuật toán dùng khi học .........................................................................38
PHẦN 1. TỔNG QUAN VỀ HỌC MÁY

1.1. Khái niệm


Học máy (machine learning, ML) là tập con của trí tuệ nhân tạo. Học máy là một
lích vực nhỏ trong khoa học máy tính, có khả năng tự học hỏi dựa trên dữ liệu được
đưa vào mà không cần được lập trình cụ thể [1].

1.2. Một số ví dụ về học máy


Năm 2006, hãng cho thuê đĩa DVD và dịch vụ xem phim trực tuyến Netflix đã tổ
chức một cuộc thi nhằm dự đoán đánh giá của người xem đối với một bộ phim cụ thể.
Netflix cung cấp cho những người tham gia một tập dữ liệu gồm 100.480.507 đánh giá
của 480.189 người xem đối với 17.770 bộ phim. Mỗi đánh giá là một bộ 4 giá trị ,
trong đó user là mã số của khách hàng (người xem), movie là mã số của bộ phim, date
of grade là ngày đánh giá, grade là có giá trị từ 1 sao đến 5 (sao) tương ứng với mức
độ hài lòng của người xem đối với bộ phim đó. Mục tiêu của cuộc thi là khuyến khích
những nhà nghiên cứu trong lĩnh vực học máy và cộng đồng phát triển các mô hình
dựa trên số liệu đã biết để dự đoán chính xác nhất mức độ hài lòng của một khách
hàng đối với một bộ phim nào đó. Nếu làm được như vậy thì Netflix có thể giới thiệu
với bất kỳ khách hàng nào của mình một trong 17.770 bộ phim của mình và gần như
đảm bảo rằng khách hàng sẽ hài lòng khi xem bộ phim đó. Kết quả là sức cạnh tranh,
doanh thu và lợi nhuận của hãng sẽ ngày càng được nâng cao. USPS, từ viết tắt của
dịch vụ bưu chính Mỹ (United States Postal Servive), là một tập dữ liệu khá phổ biến
trong lĩnh vực học máy và nhận dạng ký tự USPS bao gồm 9.298 ảnh của các chữ số
viết tay từ ’0’ đến ’9’. Mỗi ảnh ký tự (đã được xử lý) có 16 dòng và 16 cột và mỗi
điểm ảnh có các giá trị mức xám từ 0 đến 255 (Hình 1.1). Nhiệm vụ của học máy là
xây dựng nên những chương trình máy tính để có thể tự động phân loại được các hình
ảnh này là ảnh của chữ số nào nào. Nếu có thể làm được điều này một cách chính xác
thì chúng ta có thể xây dựng nên các hệ thống phân loại và chuyển phát thư tay một
cách tự động dựa vào mã bưu điện. Các hệ thống như vậy sẽ giúp tiết kiệm hàng ngàn
giờ công lao động cũng như giúp cho quá trình chuyển phát thư được nhanh chóng và
hiệu quả hơn.
Hình 1.1. 100 ảnh chữ số viết tay đầu tiên trong tập dữ liệu USPS
Hình 1.2 biểu diễn một cách nhìn 391.832 báo cáo (SIGACT reports) về các tai
nạn trong cuộc chiến tranh I-rắc năm 2006 của hãng tin AP 1 , trong đó mỗi báo cáo là
một điểm và các cạnh nối chúng là mức độ giống nhau về nội dung giữa các báo cáo.
Các điểm được nối với nhau sẽ được kéo xích lại gần nhau hơn và chúng sẽ hình thành
nên các cụm báo cáo và các cụm này được gán nhãn bởi các từ đặc trưng nhất của cụm
đó. Các điểm được tô màu dựa trên loại tai nạn mà báo cáo đề cập tới. Với cách làm
trên 391.832 báo cáo sẽ tự hình thành nên các cụm văn bản và mang lại một bức tranh
toàn cảnh khá ấn tượng về các tai nạn của cuộc chiến. Chẳng hạn như cụm màu xanh
có rất nhiều báo cáo liên quan đến từ “xác chết” và “trói tay”, “bịt mắt”. Cụm màu đỏ
liên quan đến các vụ nổ và có các từ khóa “xe tăng” và “xe tải”. Các ví dụ trên là một
vài trong rất nhiều các ứng dụng của học máy trong các lĩnh vực kinh doanh, sản xuất
và dịch vụ khác nhau đang ngày một trở nên phổ biến.
Hình 1.2. Một cách hiển thị 391.832 báo cáo về các tai nạn trong cuộc chiến tranh I-
rắc của hãng AP.
Chúng ta có thể kể ra các chương trình máy tính được nhiều người sử dụng hàng
ngày như chương trình lọc thư rác, tìm kiếm thông tin trên internet (bao gồm cả văn
bản, hình ảnh, video), các chương trình tự động phát hiện và nhận dạng mặt người của
máy ảnh, trên các mạng xã hội như Facebook,... Để có thể thực hiện các nhiệm vụ đó
một cách tự động thì các phương pháp học máy luôn đóng có một vai trò quan trọng
nhất để mang lại hiệu quả, sự tiện dụng đối với mọi người.

Hình 1.3 Chức năng phát hiện và phân loại khuôn mặt trong máy ảnh của hãng Sony.
1.3. Học có giám sát ( Supervised Learning )

1.3.1. Khái niệm


Học có giám sát là thuật toán dự đoán đầu ra (output) của một dữ liệu mới (new
input) dựa trên các cặp (input, outcome) đã biết từ trước. Cặp dữu liệu này được gọi là
(data, label), tức (dữ liệu, nhãn). Supervised learning là nhóm phổ biến nhất trong các
thuật toán Machine Learning.
Mô tả dưới dạng toán học: cho tập hợp biến đầu vào ={x1,x2, …,xN} và một tập
nhãn tương ứng Y={y1,y2,…,yN} trong đó xi,yi là các vector. Các cặp dữ liệu biết
trước (xi,yi)XxY được gọi là tập training data (dữ liệu huấn luyện). Từ tập training
này, chúng ta cần tạo ra một hàm số ánh xạ mỗi phần tử từ tập X sang một phần tử
(xấp xỉ) tương ứng của tập Y.
yi≈f(xi), ∀i=1,2,…,N
Mục tiêu là xấp xỉ hàm số f thật tốt để khi có một dữ liệu x mới, chúng ta có thể
tính được nhãn tương ứng của nó y=f(x).

1.3.2. Một số phương pháp trong học giám sát


Phân lớp (Classification)
Một bài toán được gọi là classification nếu các nhãn của input data được chia
thành một số hữu hạn nhóm. Ví dụ: Gmail được xem nhu một email có phải là spam
hay không; các hãng tín dụng xác định xem một khác hàng có khả năng thanh toán nợ
hay không.
Hồi quy (Regression)
Nếu label không được chi thành các nhóm mà là một giá trị cụ thể. Ví dụ: một
căn nhà rộng x m2 có y phòng ngủ và cách trung tâm thành phố z km sẽ có giá là bao
nhiêu?

1.4. Học không giám sát (Unsupervised Learning)

1.4.1. Khái niệm


Trong thuật toán này, chúng ta không biết được outcome hay nhãn mà chỉ có dữ
liệu đầu vào. Thuật toán unsupervised learning sẽ dựa vào cấu trúc của dữ liệu để thực
hiện một công việc nào đó, ví dụ như phân nhóm (clustering) hoặc giảm số chiều của
dữ liệu (dimension reduction) để thuận tiện trong việc lưu trữ và tính toán.
Một cách toán học, Unsupervised learning là khi chúng ta chỉ có dữ liệu
vào XX mà không biết nhãn YY tương ứng.
Những thuật toán loại này được gọi là Unsupervised learning vì không giống như
Supervised learning, chúng ta không biết câu trả lời chính xác cho mỗi dữ liệu đầu
vào. Giống như khi ta học, không có thầy cô giáo nào chỉ cho ta biết đó là chữ A hay
chữ B. Cụm không giám sát được đặt tên theo nghĩa này.

1.4.2. Một số phương pháp học không giám sát


Phân cụm (Clustering)
Một bài toán phân nhóm toàn bộ dữ liệu XX thành các nhóm nhỏ dựa trên sự
liên quan giữa các dữ liệu trong mỗi nhóm. Ví dụ: phân nhóm khách hàng dựa trên
hành vi mua hàng. Điều này cũng giống như việc ta đưa cho một đứa trẻ rất nhiều
mảnh ghép với các hình thù và màu sắc khác nhau, ví dụ tam giác, vuông, tròn với
màu xanh và đỏ, sau đó yêu cầu trẻ phân chúng thành từng nhóm. Mặc dù không cho
trẻ biết mảnh nào tương ứng với hình nào hoặc màu nào, nhiều khả năng chúng vẫn có
thể phân loại các mảnh ghép theo màu hoặc hình dạng.
Association
Là bài toán khi chúng ta muốn khám phá ra một quy luật dựa trên nhiều dữ liệu
cho trước. Ví dụ: những khách hàng nam mua quần áo thường có xu hướng mua thêm
đồng hồ hoặc thắt lưng; những khán giả xem phim Spider Man thường có xu hướng
xem thêm phim Bat Man, dựa vào đó tạo ra một hệ thống gợi ý khách hàng
(Recommendation System), thúc đẩy nhu cầu mua sắm.

1.5. Những vấn đề cơ bản trong học máy

1.5.1. Độ đo kết quả (performance metric)


Vấn đề cơ bản đầu tiên của học máy là xác định hàm thiệt hại phù hợp cho mỗi
bài toán cụ thể, hay ngược lại là mức độ tốt- xấu, đúng- sai cho kết quả dự đoán mô
hình. Trong bài toán nhận dạng chữ số, sai số của mô hình có thể tính được là số lỗi
f(x, α) ≠y chia cho tổng số dữ liệu được nhận dạng. Nói một cách khác là độ chính xác
(accuracy) của mô hình f(x, α) có thể được tính bởi
𝑆ố 𝑚ẫ𝑢 𝑛ℎậ𝑛 𝑑ạ𝑛𝑔 đú𝑛𝑔
𝐴𝑐𝑐𝑓 =
𝑇ổ𝑛𝑔 𝑠ố 𝑚ẫ𝑢 𝑛ℎậ𝑛 𝑑ạ𝑛𝑔
Ngoài độ đo chính xác trên thì còn có một vài độ đo khác giúp cho lựa chọn mô
hình như Recall, Precision
Recall và Precision thường được sử dụng chobai toàn phân lớp có hai lớp dữ liệu,
trong hai lớp dữ liệu có một lớp nghiêm trọng hơn lớp kia và cần được dự đoán chính
xác.
𝐷ự đ𝑜á𝑛 đú𝑛𝑔 𝑙ớ𝑝 1
𝑃𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 =
𝐷ự đ𝑜á𝑛 đú𝑛𝑔 𝑙ớ𝑝 1 + 𝑑ự đ𝑜á𝑛 𝑠𝑎𝑖 𝑙ớ𝑝 1
𝐷ự đ𝑜á𝑛 đú𝑛𝑔 𝑙ớ𝑝 1
𝑅𝑒𝑐𝑎𝑙𝑙 =
𝐷ự đ𝑜á𝑛 đú𝑛𝑔 𝑙ớ𝑝 1 + 𝑑ự đ𝑜á𝑛 𝑠𝑎𝑖 𝑙ớ𝑝 2
Ví dụ lọc mail rác:
Actual
Spam Not Spam
Predict Spam 8 32
Not Spam 2 8

Như vậy:
8 8
𝑅𝑒𝑐𝑎𝑙𝑙 = = 80% 𝑃𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 = = 20%
8+2 8+32

Kết luận: tỉ lệ chính xác khi xác định một mail là rác là 20%; tỷ lệ chính xác khi
xác định một thư rác là 80%

1.5.2. Lựa chọn mô hình (model selection)

a. Khái niệm

Vấn đề là xác định được một mô hình tốt, xác định mô hình nào tốt hơn mô hình
nào khi không có điều kiện để kiểm chứng. Ví như không thể có được và thử trên tất
cả ác mẫu chữ số viets tay hay tất cả các thư điện tử có nội dung khác nhau. Trong học
máy, lựa chọn mô hình (model selection) là quá trình đi tìm kiếm câu trả lời cho: cho
trước một lượng hữu hạn dữ liệu quan sát được (observed data), mô hình hoặc thuật
toán nào cùng với các giá trị tham số là bao nhiêu sẽ có hiệu năng (peformance) tốt
nhất trên phần dữ liệu còn lại (unseen data).

Có hai cách tiếp cận chính trong việc đánh giá độ tốt, hay ước lượng lỗi của một
mô hình. Cách thứ nhất là dựa trên lỗi thực nghiệm và độ phức tạp của mô hình. Các
nguyên lý như độ dài mô tả tối thieur hay cực tiểu lỗi cấu trúc…đều đánh giá ao các
mô hình không quá phức tạp và mức độ lỗi thực nghiệm có hể chấp nhận được ở mức
vừa phải. Cách tiếp cận thứ hai trong lựa chọn mô hình là các phương pháp kiểm tra
chéo (cross-validation). Dữ liệu được chia thành hai phần tách biệt, một phần dùng để
xây dựng mô hình (dữ liệu huấn luyện - training data) và phần còn lại được dùng để
đánh giá mô hình (dữ liệu kiểm thử - testing data). Với cách tiếp cận này, các mô hình
được đánh giá một cách độc lập dựa trên phần dữ liệu được coi như là dữ liệu của
tương lai. Cách phổ biến nhất trong hướng tiếp cận này là kiểm tra chéo k lần (f-fold):
toàn bộ dữ liệu được chia thành k phần tương đối cân bằng, lần lượt lấy k − 1 phần để
xây dựng mô hình và phần còn lại để kiểm thử. Kết quả trung bình của k lần kiểm thử
được sử dụng như là một ước lượng cho độ tốt của mô hình đó. Giá trị phổ biến nhất
của k là 10. Khi k = l, nghĩa là đúng bằng số dữ liệu có được thì phép kiểm tra chéo
này được gọi là kiểm tra leave-one-out.

Các kỹ thuật kiểm tra chéo tuy đơn giản nhưng lại là cách thực tế nhất để sử
dụng. Điểm yếu chính của phương pháp này là thời gian để huấn luyện và kiểm thử
nhiều lần cho mỗi mô hình. Đặc biệt khi các mô hình có nhiều tham số khác nhau và
độ phức tạp tính toán lớn thì kiểm tra chéo là phương pháp cần rất nhiều thời gian tính
toán, Tùy theo từng bài toán cụ thể mà số lần kiểm thử k cần được xác định một cách
phù hợp. Ví dụ như nếu k nhỏ thì số lần kiểm thử cũng ít hơn và dữ liệu huấn luyện
cũng ít hơn, do vậy thời gian thực hiện kiểm tra chéo cũng ít hơn.

b. Validation and Cross-validation

Validation

Để kiểm thử và lựa chọn mô hình ta thường chia tập dữ liệu thành training data
và test data. Tuy nhiên khi xây dựng mô hình ta không nên sử dụng test data. Vậy làm
cách nào đẻ biết được chất lượng của mô hình với các dữ liệu chưa thấy. Phương pháp
đơn giản nhất là trích từ tập training data ra một tập con nhỏ và thực hiện đánh giá mo
hình trên tập con nhỏ này. Tập con nhỏ được trích từ tập training gọi là tập validation
và tập training chỉ còn lại là phần còn lại trừ đi phần validation. Train error được tính
trên phần training set mới này và một khái niệm nữa là validation error được tính trên
phần validation sẽ giúp đánh giá mô hình. Phương pháp thường được sử dụng cho mô
hình khác nhau. Mô hình nào có validation error nhỏ nhất sẽ là mô hình tốt nhất.

Thông thường ta bắt đầu từ mô hình đơn giản, sau đó tăng dần độ phức tạp của
mô hình. Tới khi nào validation có chiều hướng tăng lên thì chọn mô hình trước đó.
Chú ý rằng mô hình càng phức tạp, train error có xu hướng nhỏ đi.

Cross-validation

Trong nhiều trường hợp, chúng ta có rất hạn chế về số lượng dữ liệu để xây dựng
mô hình. Nếu lấy quá nhiều dữ liệu trong tập training làm dữ liệu validation, phần dữ
liệu còn lại của tập training là không đủ để xây dựng mô hình. Lúc này, tập validation
phải thật nhỏ để giữ được lượng dữ liệu cho training đủ lớn. Tuy nhiên, một vấn đề
khác nảy sinh. Khi validation quá nhỏ, hiện tượng overfitting lại có thể xảy ra với tập
training còn lại. Giải pháp cho vấn đề này là sử dụng cross-validation, đây là sự cải
tiến của validation với lượng dữ liệu trong tập validation là nhỏ nhưng chất lượng mô
hình được đánh giá trên nhiều tập validation khác nhau. Một cách thường đường sử
dụng là chia tập training ra kk tập con không có phần tử chung, có kích thước gần
bằng nhau. Tại mỗi lần kiểm thử , được gọi là run, một trong số kk tập con được lấy ra
làm validata set. Mô hình sẽ được xây dựng dựa vào hợp của k−1k−1 tập con còn lại.
Mô hình cuối được xác định dựa trên trung bình của các train error và validation
error. Cách làm này còn có tên gọi là k-fold cross validation.
Khi k bằng với số lượng phần tử trong tập training ban đầu, tức mỗi tập con có
đúng 1 phần tử, ta gọi kỹ thuật này là leave-one-out.

1.5.3. Mô hình tham số và mô hình phi tham số (parametric and non-parametric


models)
Mỗi mô hình f(x, α) thường có các giá trị tham số α nằm trong một miền giá trị
nào đó. Chẳng hạn mô hình tuyến tính y=ax+b trong đó x là số thực, có một bộ hai
tham số (a, b)  R2. Tuy nhiên, không phải mô hình nào cũng có những tham số như
trên, chẳng hản mô hình láng giềng gần nhất (nearest neighbor-NN).

PHẦN 2. MỘT SỐ PHƯƠNG PHÁP TRONG HỌC MÁY- THỬ NGHIỆM


- ĐÁNH GIÁ

2.1. Hồi quy( Regression)

2.1.1. Hồi quy tuyến tính


Một cách biểu diễn đơn giản nhất của hàm hồi quy tuyến tính là y ≈ x̅w = ŷ
trong đó w=[0,1,…n]T – là vector (cột) hệ số cần phải tuối ưu và x̅ =[1, x1, x2,
…xn] là véc tơ hàng dữ liệu dầu vào mở rộng.

Sai số dự đoán

Chúng ta mong muốn rằng sự sai kháce giữa giá trị thực y và giá trị dự đoán 𝑦̂
(đọc là y hat trong tiếng Anh) là nhỏ nhất. Nói cách khác, chúng ta muốn giá trị sau
đây càng nhỏ càng tốt:

1 2 1 1
𝑒 = (𝑦 − 𝑦̂)2 = (𝑦 − 𝑥̅ 𝑤)2
2 2 2
1
trong đó hệ số (lại) là để thuận tiện cho việc tính toán (khi tính đạo hàm thì
2
1
số sẽ bị triệt tiêu). Chúng ta cần e2 vì e=𝑦 − 𝑦̂ có thể là một số âm, việc nói e nhỏ
2
nhất sẽ không đúng vì khi e=−∞ là rất nhỏ nhưng sự sai lệch là rất lớn.

Nghiệm cho bài toán Linear Regression

Cách phổ biến nhất để tìm nghiệm cho một bài toán tối ưu (chúng ta đã biết từ
khi học cấp 3) là giải phương trình đạo hàm (gradient) bằng 0! Tất nhiên đó là khi việc
tính đạo hàm và việc giải phương trình đạo hàm bằng 0 không quá phức tạp. Thật may
mắn, với các mô hình tuyến tính, hai việc này là khả thi.

Đạo hàm theo w của hàm mất mát là:


Sai số dự đoán phía trên về việc tại sao không dùng trị tuyệt đối mà lại dùng bình
phương. Câu trả lời là hàm bình phương có đạo hàm tại mọi nơi, trong khi hàm trị
tuyệt đối thì không (đạo hàm không xác định tại 0).

Phương trình đạo hàm bằng 0 tương đương với:

Nếu ma trận vuông khả nghịch (non-singular hay invertible) thì


phương trình trên có nghiệm duy nhất: w=A-1b

Vậy nếu ma trận A không khả nghịch (có định thức bằng 0) thi phương trình
trên vô nghiệm, hoặc là nó có vô số nghiệm. Khi đó, chúng ta sử dụng khái niệm giả
nghịch đảo At (đọc là A dagger ). (Giả nghịch đảo (pseudo inverse) là trường hợp
tổng quát của nghịch đảo khi ma trận không khả nghịch hoặc thậm chí không vuông.
Trong khuôn khổ bài viết này, tôi xin phép được lược bỏ phần này, nếu các bạn thực
sự quan tâm, tôi sẽ viết một bài khác chỉ nói về giả nghịch đảo.)

Với khái niệm giả nghịch đảo, điểm tối ưu của bài toán Linear Regression có
dạng:

Thử nghiệm trên weka

Đầu vào (INPUT)

Tập dữ liệu Salary_Data với 2 thuộc tính: YearsExperience và Salary

Dữ liệu huấn luyện và dữ liệu test là trên cùng 1 bộ, trong đó:

- Dữ liệu huấn luyện : 30 bộ-100%


- Dữ liệu kiểm thử: Cross-validation

Đầu ra (OUPUT)

Mô hình hồi quy tuyến tính: 9449.9623 * YearsExperience + 25792.2002

=== Run information ===

Scheme: weka.classifiers.functions.LinearRegression -S 0 -R 1.0E-8 -num-


decimal-places 4
Relation: Salary_Data
Instances: 30
Attributes: 2
YearsExperience
Salary
Test mode: 10-fold cross-validation

=== Classifier model (full training set) ===

Linear Regression Model

Salary =
9449.9623 * YearsExperience +
25792.2002

Time taken to build model: 0.13 seconds

=== Cross-validation ===


=== Summary ===

Correlation coefficient 0.9755


Mean absolute error 4902.2453
Root mean squared error 5933.4329
Relative absolute error 19.5114 %
Root relative squared error 21.36 %
Total Number of Instances 30

Hệ số tương quan là 0.9755- đo lường sự tương quan giữa YearsExperience và


Salary

MAE: độ đo sự khác nhau giữa hai biến, là trung bình khoảng cách dọc dữa mỗi
điểm và khoảng cách ngang giữa mooid diểm với đường định dạng.

RMSE: căn bậc hai của trung bình bình phương sai số, mức độ phân tán của các
giá trị dự đoán từ các giá trị thực tế

Đầu vào (INPUT)

Tập dữ liệu winequality-red với 12 thuộc tính

Dữ liệu huấn luyện 1599 bộ

Sử dụng test: Crosss-validation

Đầu ra (OUPUT)

Mô hình hồi quy tuyến tính: quality =

-1.0128 * volatile acidity +


-2.0178 * chlorides +

0.0051 * free sulfur dioxide +

-0.0035 * total sulfur dioxide +

-0.4827 * pH +

0.8827 * sulphates +

0.2893 * alcohol +

4.4301

Hệ số tương quan là 0.5872- đo lường sự tương quan giữa quality và các thuộc
tính khác

MAE: độ đo sự khác nhau giữa hai biến, là trung bình khoảng cách dọc dữa mỗi
điểm và khoảng cách ngang giữa mooid diểm với đường định dạng.

RMSE: căn bậc hai của trung bình bình phương sai số, mức độ phân tán của các
giá trị dự đoán từ các giá trị thực tế
2.1.2. Hồi quy logistic
phương pháp hồi quy logistic là một mô hình hồi quy nhằm dự đoán giá trị đầu
ra rời rạc (discrete target variable) y ứng với một véc-tơ đầu vào x. Việc này tương
đương với chuyện phân loại các đầu x vào các nhóm y tương ứng.

Ví dụ, xem một bức ảnh có chứa một con mèo hay không. Thì ở đây ta coi đầu
ra y=1 nếu bước ảnh có một con mèo và y=0 nếu bức ảnh không có con mèo nào. Đầu
vào x ở đây sẽ là các pixel một bức ảnh đầu vào

Đầu vào (INPUT)

Tập dữ liệu vote với 17 thuộc tính

Dữ liệu huấn luyện 435 bộ

Sử dụng test: Crosss-validation

Đầu ra (OUPUT)

Đầu vào (INPUT)

Tập dữ liệu glass với 10 thuộc tính


Dữ liệu huấn luyện 214 bộ

Sử dụng test: Crosss-validation

Đầu ra (OUPUT)

- Độ tin cậy của mô hình là 0.634

2.2. Phân lớp

2.2.1. Thuật toán Naive Bayer


Phương pháp phân loại Naïve-Bayesian

Phân loại Bayesian là phương pháp phân loại sử dụng tri thức các xác suất đã qua
huấn luyện. Phương pháp này thích hợp với những lớp bài toán đòi hỏi phải dự đoán
chính xác lớp của mẫu cần kiểm tra dựa trên những thông tin từ tập huấn luyện ban
đầu.

Ví dụ đối với bài toán phân loại email gửi đến là spam hay non-spam. Giả thiết
mỗi một email được đại diện bởi một vector thuộc tính đặc trưng là x = (x1, x2, …,xn)
với x1, x2, …, xn là giá trị của các thuộc tính X1, X2,…,Xn tương ứng trong không gian
vector đặc trưng X.
Dựa vào công thức xác suất Bayes và công thức xác suất đầy đủ ta có được xác
suất 1 email với vector đặc trưng x thuộc về loại c là : P(C=c | X=x) = (P(C=c) .P(X=x
| C=c) )/(∑P(C=k) .P(X=x | C=k)) với C là email được xét , c € {spam, non-spam}

Xác suất P(C=c) được tính dễ dàng từ tập huấn luyện. Thực tế rất khó để tính
được xác suất P(X=x | C=c) . Giả thiết rằng tất cả các biến cố X1, X2…Xn là độc lập
với nhau do đó chúng ta có thể tính được xác suất P(X=x | C=c) dựa theo công thức:
P(X=x | C=c) = ∏ P(Xi=xi | C=c)

Như vậy công thức tính xác suất 1 email là spam sẽ được viết thành : P(C=c |
X=x) = (P(C=c) . ∏ P(Xi=xi | C=c) )/(∑ P(C=k) .∏ P(Xi=xi | C=k))

Từ xác suất này ta so sánh với một giá trị ngưỡng t là ngưỡng để phân loại email
là spam hay không, nếu xác suất này lớn hơn t, ta cho email đó là spam, ngược lại
email đó là non-spam .

Trong phân loại email có 2 loại sai lầm, một là sai lầm nhận 1 email spam thành
nonspam và sai lầm thứ 2 là nhận 1 email non-spam thành spam. Rõ ràng sai lầm thứ 2
là nghiêm trọng hơn vì người dùng có thể chấp nhận một email spam vượt qua bộ lọc
nhưng không thể chấp nhận một email hợp lệ quan trọng lại bị bộ lọc chặn lại.

Giả sử ta gọi S->N và N->S tương ứng với 2 loại lỗi ở trên. Để hạn chế loại lỗi
thứ 2 ta giả sử rằng lỗi N->S có chi phí gấp λ lỗi S->N nghĩa là ta phân loại 1 email là
spam dựa theo :

(P(C=spam | X=x) )/(P(C=non-spam | X=x)) > λ

Mặt khác P(C=spam | X=x) = 1 - P(C=non-spam | X=x) và P(C=spam | X=x) > t


Như vậy ta giá trị ngưỡng t phụ thuộc vào λ, cụ thể : t = λ / (λ + 1)

Thử nghiệm trên weka

Đầu vào (INPUT)

- Tập dữ liệu Weather với 5 thuộc tính


- Tập dữ liệu Spambase với 59 thuộc tính.

Các thiết lập

+ Test mode: 10-fold cross-validation


Đầu ra (OUPUT)

weather

Nhận xét

- Phân lớp chính xác : 64.2875%


- Phân lớp không chính xác: 35.7143%
- Độ tin cậy của mô hình là 0.762

spambase

Nhận xét

- Phân lớp chính xác : 79.5109 %


- Phân lớp không chính xác: 20.4891%
- Độ tin cậy của mô hình là: 0.806

2.2.2. Support Vector Machine (SVM)


Support Vector Machine - SVM là một phương pháp học có giám sát trong các
mô hình nhận dạng mẫu. Nó không chỉ hoạt động tốt với các dữ liệu được phân tách
tuyến tính mà còn tốt với cả dữ liệu phân tách phi tuyến. Với nhiều bài toán, SVM
mang lại kết quả tốt như mạng nơ-ron với hiệu quả sử dụng tài nguyên tốt hơn hẳn.

Bài toán tối ưu trong Support Vector Machine (SVM) chính là bài toán đi tìm
đường phân chia sao cho margin là lớn nhất.

Như đã biết, với bài toán phân loại nhị phân tuyến tính ta cần vẽ được mặt phân tách
(với không gian 2 chiều thì mặt phẳng này là đường phân tách): wTx +b=0 để phân biệt
được dữ liệu. Khi đó dấu của hàm ước lượng H={xsgn(wTx+b) ; wR} sẽ thể hiện được
điểm dữ liệu x nằm ở cụm dữ liệu nào.
Ta có thể có nhiều mặt phân tách thoả mãn được việc này và đương nhiên là nếu
chọn được mặt mà phân tách tốt thì kết quả phân loại của ta sẽ tốt hơn. Một lẽ rất tự nhiên
là dường như mặt nằm vừa khít giữa 2 cụm dữ liệu sao cho nằm xa các tập dữ liệu nhất là
mặt tốt nhất

SVM chính là một biện pháp để thực hiện được phép lấy mặt phẳng như vậy.

Thử nghiệm trên Weka

Đầu vào (INPUT)

- Tập dữ liệu Weather với 5 thuộc tính


- Tập dữ liệu Spambase với 59 thuộc tính.
Các thiết lập

+ Test mode: 10-fold cross-validation

Đầu ra (OUPUT)

Weather
Nhận xét

- Phân lớp chính xác : 54.1429%


- Phân lớp không chính xác: 42. 8571%
- Độ tin cậy của mô hình là 0.7

SpamBase

Nhận xét

- Phân lớp chính xác : 89.3207%


- Phân lớp không chính xác: 10.6739%
- Độ tin cậy của mô hình là: 0.916

Nhận xét tổng hợp

Phương pháp Tập dữ liệu Phân lớp chính Phân lớp không Độ tin cậy của
xác chính xác mô hình
NaiveBayes Weather (5) 64.2875 35.7143 0.762
SpamBase(59) 79.5109 20.4891 0.806
SMO Weather (5) 54.1429 42.8571 0.7
SpamBase(59) 89.3207 10.6739 0.916
Như vậy SMO chạy tốt khi dữ liệu huấn luyện lớn khi thực hiện với tập dữ liệu
Weather 5 thuộc tính và 14 bộ dữ liệu thì NaiveBayes tốt hơn còn SMO kém hơn
nhưng với SpamBase 59 thuộc tính và 3689 bộ dữ liệu thì SMO tốt hơn.
2.3. Phân cụm

2.3.1. K-means
Trong thuật toán K-means clustering, chúng ta không biết nhãn (label) của từng
điểm dữ liệu. Mục đích là làm thể nào để phân dữ liệu thành các cụm (cluster) khác
nhau sao cho dữ liệu trong cùng một cụm có tính chất giống nhau.

Ví dụ: Một công ty muốn tạo ra những chính sách ưu đãi cho những nhóm khách
hàng khác nhau dựa trên sự tương tác giữa mỗi khách hàng với công ty đó (số năm là
khách hàng; số tiền khách hàng đã chi trả cho công ty; độ tuổi; giới tính; thành phố;
nghề nghiệp; …). Giả sử công ty đó có rất nhiều dữ liệu của rất nhiều khách hàng
nhưng chưa có cách nào chia toàn bộ khách hàng đó thành một số nhóm/cụm khác
nhau. Nếu một người biết Machine Learning được đặt câu hỏi này, phương pháp đầu
tiên anh (chị) ta nghĩ đến sẽ là K-means Clustering. Vì nó là một trong những thuật
toán đầu tiên mà anh ấy tìm được trong các cuốn sách, khóa học về Machine Learning.
Và tôi cũng chắc rằng anh ấy đã đọc blog Machine Learning cơ bản. Sau khi đã phân
ra được từng nhóm, nhân viên công ty đó có thể lựa chọn ra một vài khách hàng trong
mỗi nhóm để quyết định xem mỗi nhóm tương ứng với nhóm khách hàng nào. Phần
việc cuối cùng này cần sự can thiệp của con người, nhưng lượng công việc đã được rút
gọn đi rất nhiều.

Ý tưởng đơn giản nhất về cluster (cụm) là tập hợp các điểm ở gần nhau trong
một không gian nào đó(không gian này có thể có rất nhiều chiều trong trường hợp
thông tin về một điểm dữ liệu là rất lớn). Hình bên dưới là một ví dụ về 3 cụm dữ liệu
(từ giờ tôi sẽ viết gọn là cluster).
Giả sử mỗi cluster có một điểm đại diện (center) màu vàng. Và những điểm xung
quanh mỗi center thuộc vào cùng nhóm với center đó. Một cách đơn giản nhất, xét một
điểm bất kỳ, ta xét xem điểm đó gần với center nào nhất thì nó thuộc về cùng nhóm
với center đó. Tới đây, chúng ta có một bài toán thú vị: Trên một vùng biển hình
vuông lớn có ba đảo hình vuông, tam giác, và tròn màu vàng như hình trên. Một điểm
trên biển được gọi là thuộc lãnh hải của một đảo nếu nó nằm gần đảo này hơn so với
hai đảo kia . Hãy xác định ranh giới lãnh hải của các đảo.

Hình dưới đây là một hình minh họa cho việc phân chia lãnh hải nếu có 5 đảo khác
nhau được biểu diễn bằng các hình tròn màu đen:

Mục đích cuối cùng của thuật toán phân nhóm này là: từ dữ liệu đầu vào và số
lượng nhóm chúng ta muốn tìm, hãy chỉ ra center của mỗi nhóm và phân các điểm dữ
liệu vào các nhóm tương ứng. Giả sử thêm rằng mỗi điểm dữ liệu chỉ thuộc vào đúng
một nhóm.

Giả sử có N điểm dữ liệu là X= [x1,x2,…,xN] Rd×N và K<N là số cluster chúng


ta muốn phân chia. Chúng ta cần tìm các center m1,m2,…,mKRd×1và label của mỗi
điểm dữ liệu.

Với mỗi điểm dữ liệu xi đặt yi=[yi1,yi2,…,yiK] là label vector của nó, trong đó
nếu xi được phân vào cluster k thì yik=1 và yij=0,∀ j≠k. Điều này có nghĩa là có đúng
một phần tử của vector yi là bằng 1 (tương ứng với cluster của xi), các phần tử còn lại
bằng 0. Ví dụ: nếu một điểm dữ liệu có label vector là [1,0,0,…,0] thì nó thuộc vào
cluster 1, là [0,1,0,…,0] thì nó thuộc vào cluster 2, ……. Cách mã hóa label của dữ
liệu như thế này được goi là biểu diễn one-hot. Chúng ta sẽ thấy cách biểu diễn one-
hot này rất phổ biến trong Machine Learning ở các bài tiếp theo.

Ràng buộc của yi có thể viết dưới dạng toán học như sau:

yik{0,1}, ∑𝐾
𝑘=1 𝑦𝑖𝑘 = 1 (1)

Hàm mất mát và bài toán tối ưu

Nếu ta coi center mk là center (hoặc representative) của mỗi cluster và ước lượng tất cả
các điểm được phân vào cluster này bởi mk, thì một điểm dữ liệu xi được phân vào
cluster k sẽ bị sai số là (xi−mk). Chúng ta mong muốn sai số này có trị tuyệt đối nhỏ
nhất nên ta sẽ tìm cách để đại lượng sau đây đạt giá trị nhỏ nhất:

Hơn nữa, vì xi được phân vào cluster k nên yik=1,yij=0, ∀ j≠k. Khi đó, biểu thức bên
trên sẽ được viết lại là:

Bài toán tối ưu:

Thử nghiệm trên weka

Thử nghiệm trên Weka

Đầu vào (INPUT)

- Tập dữ liệu Shopping_CustomerData với 8 thuộc tính và 200 bộ


- Tập dữ liệu winequality-red với 12 thuộc tính. Và 1599 bộ

Các thiết lập

+ Test mode: Percentage split: 66%

+ NumClusters:3
+ DistanceFunction: EuclideanDistance

+ Điểm khởi tạo: random

Đầu ra (OUPUT)

Shopping_CustomerData

Nhận xét

- Kết quả phân thành 3 cụm


Winequality-red
Nhận xét

- Kết quả phân thành 3 cụm

2.3.2. FarthesFirst
Shopping-CustomerData
Nhận xét

- Kết quả phân thành 3 cụm


Winequality-red
Nhận xét tổng hợp

Phương pháp Tập dữ liệu Phân lớp chính Phân lớp không Độ tin cậy của
xác chính xác mô hình
NaiveBayes Weather (5) 64.2875 35.7143 0.762
SpamBase(59) 79.5109 20.4891 0.806
SMO Weather (5) 54.1429 42.8571 0.7
SpamBase(59) 89.3207 10.6739 0.916
PHẦN 3. HỆ THỐNG GỢI Ý (RECOMMENDER SYSTEMS)

3.1. Tổng quan về hệ thống gợi ý

3.1.1. Khái niệm


Hệ thống gợi ý (Recommender systems hoặc Recommendation systems) là một
dạng của hệ hỗ trợ ra quyết định, cung cấp giải pháp mang tính cá nhân hóa mà không
phải trải qua quá trình tìm kiếm phức tạp. Hệ gợi ý học từ người dùng và gợi ý các sản
phẩm tốt nhất trong số các sản phẩm phù hợp.

Hệ thống gợi ý sử dụng các tri thức về sản phẩm, các tri thức của chuyên gia hay
tri thức khai phá học được từ hành vi con người dùng để đưa ra các gợi ý về sản phẩm
mà họ thích trong hàng ngàn hàng vạn sản phẩm có trong hệ thống. Các website
thương mại điện tử, ví dụ như sách, phim, nhạc, báo...sử dụng hệ thống gợi ý để cung
cấp các thông tin giúp cho người sử dụng quyết định sẽ lựa chọn sản phẩm nào. Các
sản phẩm được gợi ý dựa trên số lượng sản phẩm đó đã được bán, dựa trên các thông
tin cá nhân của người sử dụng, dựa trên sự phân tích hành vi mua hàng trước đó của
người sử dụng để đưa ra các dự đoán về hành vi mua hàng trong tương lai của chính
khách hàng đó. Các dạng gợi ý bao gồm: gợi ý các sản phẩm tới người tiêu dùng, các
thông tin sản phẩm mang tính cá nhân hóa, tổng kết các ý kiến cộng đồng, và cung cấp
các chia sẻ, các phê bình, đánh giá mang tính cộng đồng liên quan tới yêu cầu, mục
đích của người sử dụng đó.

3.1.2. Các phương pháp gợi ý


Có nhiều phương pháp và giải thuật khác nhau có thể trợ giúp xây dựng các hệ
thống gợi ý. Các cách tiếp cận có thể được phân loại cơ bản thành những hệ thống gợi
ý dựa nội dung (content-based recommendations), gợi ý cộng tác (collaborative
recommendations), và các cách tiếp cận lai (hybrid) kết hợp phương pháp cộng tác và
dựa trên nội dung

Giả sử rằng I là tập các đối tượng (Item) có thể được gợi ý, U là tập người dùng,
u là một người dùng cụ thể trong tập U và i là một đối tượng cụ thể trong I mà chúng
ta muốn dự đoán cho u (dựa vào sở thích của u).

Phương Dữ liệu cơ sở Dữ liệu đầu ra Tiến trình xử lý


pháp gợi ý

Dựa theo Các điểm số đánh giá của Các điểm số Nhận ra người sử dụng
lọc cộng những người sử dụng trong đánh giá của u trong U tượng tự với u
tác U đối với các đối tượng cho các đối ( về sở thích) và sau
trong I. tượng trong I. đó ngoại suy điểm số
đánh giá vủa u cho i.

Dựa theo Các đặc điểm của các đối Các điểm số Tạo ra một mô hình
Phương Dữ liệu cơ sở Dữ liệu đầu ra Tiến trình xử lý
pháp gợi ý

nội dung tượng trong I. đánh giá của u mô tả sở thích của


cho các đối người sử dụng u, sau
tượng trong I. đó sử dụng để đánh
giá mức độ ưa thích
của u với i.

Dựa trên Các đặc điểm của các đối Một sự mô tả Suy luận sự phù hợp
cơ sở tri tượng trong I. Các tri thức nhu cầu và sở giữa I và nhu cầu của
thức (hiểu biết) về sự phù hợp thích của người u.
giữa các đối tượng với nhu sử dụng u.
cầu của người sử dụng.

a. Hệ thống gợi ý dựa theo lọc cộng tác

Hệ thống gợi ý dựa theo lọc cộng tác (Collaborative recommendation systems):
là phương pháp gợi ý được triển khai rộng rãi nhất và thành công nhất trong thực tế.

Hệ thống theo lọc công tác phân tích và tổng hợp các điểm số đánh giá của các
đối tượng, nhận ra sự tương đồng giữa những người sử dụng trên cơ sở các điểm số
đánh giá của họ và tạo ra các gợi ý dựa trên sự so sánh này. Hồ sơ (profile) của người
sử dụng điển hình trong hệ thống lọc cộng tác bao gồm một vector các đối tượng
(item) và các điểm số đánh giá của chúng, với số chiều tăng lên liên tục khi người sử
dụng tương tác với hệ thống theo thời gian.

Một số hệ thống sử dụng phương pháp chiết khấu dựa trên thời gian (time-based
discounting) để tính toán cho yếu tố “trượt” đối với sự quan tâm của người sử dụng.
Trong một số trường hợp điểm số đánh giá (rating) có thể là nhị phân (thích/không
thích) hoặc các giá trị số thực cho thấy mức độ ưu tiên.

Thế mạnh lớn nhất của kỹ thuật gợi ý theo lọc cộng tác là chúng hoàn toàn độc
lập với sự biểu diễn của các đối tượng đang được gợi ý, và do đó có thể làm việc tốt
với các đối tượng phức tạp như âm thanh và phim. Schafer, Konstan & Riedl (1999)
gọi lọc cộng tác là “tương quan giữa người – với – người” (people-to-people
correlation).
b. Hệ thống gợi ý dựa theo nội dung

Hệ thống gợi ý dựa theo nội dung (Content-based recommendation systems): là


sự kế thừa và mở rộng của lĩnh vực nghiên cứu lọc thông tin.

Trong hệ thống thì các đối tượng được biểu diễn bởi các đặc điểm liên quan tới
chúng. Ví dụ, hệ thống gợi ý văn bản như hệ thống lọc tin NewsWeeder sử dụng
những từ của các văn bản như các đặc điểm.

Một số hệ thống gợi ý dựa trên nội dung học một hồ sơ cá nhân về sở thích của
người sử dụng dựa trên các đặc điểm xuất hiện trong chính các đối tượng người sử
dụng đã đánh giá (rated). Schafer, Konstan & Riedl gọi gợi ý theo nội dung là “tương
quan đối tượng với đối tượng” (item-to-item correlation). Hồ sơ người sử dụng của
một hệ thống gợi ý theo nội dung phụ thuộc vào phương pháp học máy được dùng.

Cây quyết định (Decision trees), mạng noron (neural nets) và biểu diễn dựa theo
vector (vector-based representations) đều có thể được sử dụng để học hồ sơ người
dùng. Cũng giống như trong lọc cộng tác, hồ sơ người dùng trong gợi ý dựa theo nội
dung là những dữ liệu lâu dài và được cập nhật theo thời gian.

c. Hệ thống gợi ý dựa trên cơ sở tri thức

Hệ thống gợi ý dựa trên cơ sở tri thức (Knowledge-based recommenders


systems): gợi ý các đối tượng dựa trên các suy luận về nhu cầu và sở thích của người
dùng. Theo một nghĩa nào đó, tất cả các kỹ thuật gợi ý có thể mô tả như là làm một số
suy luận. Phương pháp tiếp cận dựa trên cơ sở tri thức được phân biệt ở chỗ: chúng có
kiến thức làm thế nào một đối tượng cụ thể đáp ứng nhu cầu một người dùng cụ thể, và
do đó có thể lập luận về mối quan hệ giữa nhu cầu và các gợi ý cụ thể.

Sử dụng miền tri thức rõ ràng, có liên quan tới mối quan hệ giữa yêu cầu của
người dùng và sản phẩm cụ thể. Ban đầu người ta đưa ra 3 dạng tri thức: tri thức về
danh mục (tri thức về sản phẩm được gợi ý), tri thức người sử dụng (tri thức về các
yêu cầu của người sử dụng), tri thức về các chức năng (tri thức để ánh xạ các yêu cầu
của người sử dụng tới các sản phẩm thoả mãn các yêu cầu đó).

Phương pháp này không dựa trên tiểu sử người sử dụng nên không gặp phải khó
khăn về sản phẩm mới và người dùng mới. Gợi ý trên cơ sở tri thức có khả năng suy
diễn, khả năng suy diễn phụ thuộc vào độ phù hợp của yêu cầu người sử dụng với các
thuộc tính của sản phẩm.

Mọi hệ thống dựa trên cơ sở tri thức đều là mối quan hệ thu nhận tri thức. Thực
tế, chất lượng của các phương án gợi ý tùy thuộc vào độ chính xác của cơ sở tri thức.
Đây cũng là hạn chế lớn nhất của phương pháp này.

3.2. Phương pháp láng giềng gần nhất ( Nearest neighbors)


Kỹ thuật dựa bộ nhớ (Memorybased) (còn gọi là Phương pháp láng giềng -
Neighborhood-based): có thể đạt được theo hai cách gồm các kỹ thuật dựa người dùng
(user-based) và dựa mục tin (item-based), trong đó hoặc là dựa trên dữ liệu quá khứ
của người dùng “tương tự - similarity” (user-based approach), hoặc là dựa trên dữ liệu
quá khứ của những mục tin “tương tự” (itembased approach).

Các hệ thống gợi ý cộng tác (hay các hệ thống lọc cộng tác) cố gắng dự đoán
hiệu dụng (utility) của các mục tin cho một người dùng cụ thể dựa vào những mục tin
được đánh giá trước đó bởi những người dùng khác. Ý tưởng chính của các cách tiếp
cận gợi ý cộng tác là sử dụng thông tin về hành vi trước đó của những người dùng
đang có trong hệ thống để dự đoán mục tin nào người dùng hiện tại sẽ có thể thích
nhất và vì vậy sẽ dùng đến. Các cách tiếp cận cộng tác lấy ra ma trận những đánh giá
hoặc xem xét của người dùng-mục tin được đưa ra như một đầu vào và tạo ra một dự
đoán là con số chỉ mức độ thích hoặc không thích một mục tin nào đó của người dùng
hiện tại, hoặc một danh sách n mục tin gợi ý. Danh sách được tạo không chứa các mục
tin người dùng hiện tại đã dùng. Các hệ thống gợi cộng tác dựa trên vùng lân cận (láng
giềng) hoạt động bằng cách đếm những mục tin chung hai người dùng đã xem đối với
mỗi cặp người dùng trong hệ thống, hoặc số lượng những người dùng chung đã xem
những cặp mục tin giống nhau. Độ tương tự giữa hai người hoặc các mục tin được tính
toán. Hai người đã xem một lượng lớn các mục tin chung có những sở thích giống
nhau. Cần tìm ra những cặp người dùng có sở thích giống nhau nhất hoặc những cặp
mục tin có nhiều người dùng nhất đã xem cả hai mục tin. Những cặp người dùng/mục
tin đó được gọi là “những láng giềng gần nhất”. Hai cách tiếp cận chính của các hệ
thống gợi ý dựa trên vùng lân cận là các gợi ý láng giềng gần theo người dùng và theo
mục tin.

3.2.1 Bộ dữ liệu MovieLens


Bộ cơ sở dữ liệu MovieLens 100k bao gồm 100,000 (100k) ratings từ 943 users
cho 1682 bộ phim. Trong bộ cơ sở dữ liệu này gồm nhiều tập tin nhỏ, một trong số các
tập tin này gồm [9]:

• u.data: Chứa toàn bộ các đánh giá (ratings) của 943 users cho 1682 movies.
Mỗi user đánh giá ít nhất 20 movies.

• u.user: Chứa thông tin về users

• u.item: thông tin về mỗi bộ phim

• ua.base, ua.test, ub.base, ub.test: là hai cách chia toàn bộ dữ liệu ra thành hai
tập con, một cho training, một cho test.

• u.genre: Chứa tên của 19 thể loại phim. Các thể loại bao gồm: unknown,
Action, Adventure, Animation, Children's, Comedy, Crime, Documentary,
Drama, Fantasy, Film-Noir, Horror, Musical, Mystery, Romance, SciFi, Thriller,
War, Western

3.2.2. Giải thuật User K-Nearest-neighbors (user k-NN)

Trong hệ thống gợi ý lớn có thể có hàng triệu người sử dụng và các mặt hàng , nó
thường là không thể để lưu trữ các ( khác không ) giống nhau giữa mỗi cặp của người
sử dụng hoặc các mục ,do hạn chế về bộ nhớ. Hơn nữa , làm như vậy sẽ rất lãng phí
bởi chúng ta sẽ chỉ cần một số lượng chấp nhận được những mối tương quan để gợi ý.
Quá trình lọc của 130 Christian Desrosiers và George Karypis là một bước cần thiết
mà làm cho cách tiếp cận các người hàng xóm dựa trên thực tế bằng cách giảm số
lượng trọng lượng tương tự để lưu trữ, và hạn chế số lượng hàng xóm(ứng cử viên)để
xem xét trong dự đoán. Có một số cách thức có thể được thực hiện để giải quyết:

 Lọc Top- N(Top – hàng xóm) : Đối với mỗi người dùng hoặc item , chỉ có một
danh sách giới hạn nhất định các hàng xóm gần nhất N và trọng lượng tương tự
của mình được lưu giữ . Để tránh những vấn đề về hiệu quả và độ chính xác, N
nên được lựa chọn cẩn thận.Bởi vì nếu N là quá lớn,việc lưu trữ sẽ trở nên cồng
kềnh và tốc độ đưa ra dự đoán sẽ bị làm chậm.Mặt khác , việc lựa chọn một giá
trị quá nhỏ để có thể tồn tại giảm phạm vi của phương pháp đề nghị , gây ra một
số mặt hàng được đề nghị không bao giờ khuyến khích.
 Ngưỡng lọc : Thay vì giữ một số cố định các người hàng xóm gần nhất ,cách
tiếp cận này sẽ giúp tất cả những người hàng xóm có trọng lượng tương tự có
độ lớn lớn hơn một ngưỡng nhất định wmin sẽ được sử dụng. Trong khi điều
này là linh hoạt hơn so với trước mặc dù giá trị wmin có thể khó khăn để xác
định.
 Lọc phủ định: Nói chung, mối tương quan đánh giá tiêu cực là ít đáng tin cậy
hơn những người tích cực .Người ta có thể loại bỏ tất cả các điểm tương đồng
tiêu cực cũng như những người có cường độ thấp hơn so với một định ngưỡng .

User K-Nearest-neighbors (user kNN): một ma trận xếp hạng xem xét người
dùng-mục tin và ID của người dùng hiện tại như đầu vào, xác định những người dùng
khác có sở thích quá khứ giống với những sở thích của người dùng hiện tại. để trả về
danh sách đã xếp hạng các mục tin dựa trên những dự đoán đánh giá. Để tính toán độ
tương tự giữa những người dùng, có hai phương pháp tính độ tương tự được dùng phổ
biến là độ tương quan Pearsn và Cosine. Các giá trị độ tương tự nằm trong khoảng -1
và 1. Thông thường không xem xét tất cả người dùng trong dữ liệu khi tính toán độ
tương tự người dùng mà chỉ xem xét k người dùng giống nhất. Công thức tính toán độ
tương tự theo hệ số tương quan Pearson [1]:

Trong đó

a,u: những người dùng,

ra,i , ru,i:là đánh giá của người dùng a cho item i và đánh giá của người dùng u
cho item i;

i: tập các mục tin, được cả a và u đánh giá;

𝑟̅𝑎 , 𝑟̅𝑢 : những đánh giá trung bình của người dùng a, u;

Phương pháp User_kNN để dự đoán đánh giá của người dùng u trên sản phẩm i được
biểu diễn bằng ngôn ngữ giả như sau [5]:

1:procedure USERKNN-CF( , r, Dtrain)

2: for u=1 to N do

3: Tính Sim_uu'
4: end for

5: Sort Sim_uu' // sắp xếp giảm dần độ tương tự

6: for k=1 to K do

7: Ku ← k // Các người dùng k gần nhất của u

8: end for

9: for i = 1 to M do

10: Tính ui

11: end for

12: end procedure

Đưa ra kết quả dự đoán

Hàm dự đoán đánh giá của sản phẩm i của người dùng a được tính toán như sau[1]:

Trong đó

𝑟̅𝑎 , 𝑟̅𝑢 : những đánh giá trung bình của người dùng a, u;

s(a,u) độ tương tự giữa người dùng a và u đánh giá sản phẩm i của người dùng u

ru,i : đánh giá sản phẩm i của người dùng u

Đánh giá hệ thống

Việc đánh giá độ chính xác của hệ thống có thể sử dụng căn của sai số bình phương
trung bình (RMSE- Root Mean Square Error)

Trong đó

pu,i là giá trị dự đoán đánh giá của người dùng u với mục tin i;

ru,i là giá trị đánh giá thực tế của người dùng u đối với mục tin i.
3.3. Phương pháp Ma trận hệ số (Matrix factorization)[4]
Một trong những ứng dụng thành công nhất của mô hình yếu tố tiềm ẩn là dựa
trên Phân tích ma trận thành nhân tử (Matrix Factorization, Matrix Decomposition).
Kết quả cuộc thi Netflix Prize đã chứng minh, các mô hình phân tích ma trận thành
nhân tử vượt trội so với các kỹ thuật hàng xóm gần nhất cổ điển để đưa ra các khuyến
nghị sản phẩm, cho phép kết hợp các thông tin bổ sung như phản hồi ngầm, hiệu ứng
thời gian và mức độ tin cậy.

Trong dạng cơ bản của nó, phương pháp phân tích ma trận thành nhân tử kí tự
hóa các mặt hàng và người dùng thành các vector yếu tố được suy ra từ các mẫu xếp
hạng mặt hàng. Nếu các yếu tố của người dùng và mặt hàng có độ tương tự cao, hệ
thống sẽ tạo nên một gợi ý. Ví dụ : Mỗi item có thể mang tính chất ẩn nào đó tương
ứng với các hệ số của nó trong vector x, tương ứng user cũng sẽ có tính chất ẩn tương
ứng với vector w. Chúng ta không nhất thiết phải đặt tên cho các tính chất ẩn này. Hệ
số càng cao tương ứng với việc item hoặc user càng thể hiện rõ tính chất ẩn đó và
ngược lại. Tính tương tự giữa item và user sẽ được thể hiện qua giá trị biểu thức xw.
Giá trị này càng cao thì độ tương tự giữa item và user càng cao, nghĩa là item này càng
có khả năng mang thuộc tính mà người dùng thích, vì vậy nên gợi ý item này cho user.

Phương pháp này trở nên phổ biến trong những năm gần đây vì nó có sự kết hợp
tốt giữa gợi ý chính xác và ước lượng tỉ lệ. Thêm vào đó, phương pháp này cũng có
thể ứng dụng linh hoạt để mô hình hóa các tình huống trong thực tế.

Các hệ thống gợi ý thường phải dựa vào nhiều kiểu dữ liệu đầu vào khác nhau.
Những dữ liệu này thường được đặt trong một ma trận 2 chiều, một chiều tái hiện
người dùng và một chiều tái hiện những mặt hàng mà người dùng đó quan tâm. Những
dữ liệu thuận tiện nhất là những phản hồi rõ ràng có chất lượng cao, thường là đánh
giá của người dùng về sản phẩm. Netflix có hệ thống đánh giá sao (rating-star) dành
cho phim, các mạng xã hội như Facebook, Twitter hay thậm chí Youtube thường có
nút like (hoặc cả dislike) để thể hiện sự đánh giá của người dùng về từng bài post,
video. Chúng ta gọi chung những phản hồi rõ ràng từ người dùng là sự đánh giá của
người dùng.

Thông thường, ma trận tạo nên từ các phản hồi rõ ràng khá thưa thớt (không kín),
bởi người dùng thường chỉ đánh giá một bộ phận nhỏ các mặt hàng mà họ sử dụng,
xem qua. Người dùng thường chỉ đánh giá hay để lại phản hồi khi mặt hàng đó tạo nên
ấn tượng rất tốt hoặc rất xấu đối với họ, mà thường là khi họ gặp vấn đề. Theo thống
kê, tỉ lệ phản hồi từ khách hàng trên Amazon vào khoảng 10-20%, và khoảng 10% đối
với các hệ thống thông thường.

Một thế mạnh của phương pháp phân tích ma trận thành nhân tử là nó cho phép
chúng ta kết hợp những thông tin bổ sung. Khi những phản hồi rõ ràng không có sẵn
hoặc không đầy đủ, hệ thống gợi ý cho phép ta suy đoán sở thích người dùng dựa trên
những phản hồi ẩn bằng cách theo dõi lịch sử mua hàng, lịch sử duyệt web, những thứ
họ thường tìm kiếm hoặc thậm chí cả di chuyển của con trỏ chuột. Những phản hồi
ngầm này thường gián tiếp thể hiện ý kiến, quan điểm của người dùng về các loại mặt
hàng. Do các phản hồi ngầm biểu thị cả sự hiện diện lẫn không hiện diện của một sự
kiện nào đó, nên ma trận tạo nên từ phản hồi ngầm thường khá kín.

3.3.1. Mô hình Matrix factorization cơ bản


Mô hình phân tích ma trận thành nhân tử (Matrix factorization) ánh xạ cả người
dùng lẫn sản phẩm đến không gian yếu tố tiềm ẩn chung của không gian f, nhờ vậy
mối quan hệ giữa người dùng - sản phẩm được mô hình hóa thành một phần tử thuộc
không gian đấy. Thông qua đó, mỗi item i được liên kết với 1 vector qiRf . Và mỗi
user được liên kết với 1 vector puRf. Với mỗi item i xác định, phần tử qi đánh giá
những yếu tố mà item đó sở hữu, dương hay âm. Đối với mỗi user u, phần tử pu đánh
giá những mối quan tâm của người dùng, dương hay âm. Tích giữa qi và pu thể hiện
mối quan hệ giữa người dùng u và sản phẩm i, qipu thể hiện đánh giá tổng thể của
người dùng về item cụ thể. Điều này sẽ xấp xỉ rating của người dùng dành cho sản
phẩm, rui, dẫn đến công thức:

Thách thức của thuật toán này chính là việc learning, tức là tính toán ánh xạ giữa item
và người dùng để tạo thành vector qi,pu. Sau khi hệ gợi ý hoàn thành tính toán xong
việc ánh xạ, chúng ta có thể dễ dàng ước lượng được đánh giá của người dùng bằng
công thức trên.

Mô hình này gần giống với mô hình SVD (Singular Value Decomposition). Việc áp
dụng SVD trong các chiến thuật lọc cộng tác đòi hỏi phân tích ma trận rating của user-
item. Điều này thường làm tăng độ khó khăn bởi lượng lớn các giá trị bỏ trống do các
ma trận rating của user-item thường khá thưa thớt. Các mô hình SVD thông thường
thường không xác định khi tri thức về ma trận không đầy đủ. Hơn nữa, việc chỉ ghi lại
những các mục đã biết, trong khi số lượng các mục này tương đối ít, sẽ chỉ càng gây
thêm vấn đề overfitting.

Hệ thống nêu trên đòi hỏi vào việc gán giá trị để lấp đầy những giá trị còn thiếu và làm
cho ma trận trở nên kín hơn. Tuy nhiên, việc gán giá trị có thể trở nên khá tốn kém khi
số lượng dữ liệu gia tăng. Thêm vào đó, việc gán giá trị sai có thể khiến việc xem xét
dữ liệu trở nên không đúng. Vì thế, những hệ thống gợi ý gần đây mô hình hóa trực
tiếp từ quan sát rating, bỏ qua sự overfitting trong mô hình chuẩn hóa. Để học các
vector yếu tố (qi và pu), hệ thống giảm thiểu tối đa sự sai sót do chuẩn hóa trên tập các
rating đã biết
Trong đó, K là tập hợp các cặp (u,i) mà rui của chúng đã được xác định.

Hệ thống sẽ học mô hình bằng cách cố gắng phù hợp chúng với những rating đã
quan sát được chúng trước đó. Tuy nhiên, mục tiêu ở đây là tổng quát hóa những
rating trước đây theo một cách nào đó để có thể dự đoán được các rating sau này, hay
các rating chưa biết.

3.3.2. Các thuật toán dùng khi học


Như mọi mô hình học khác việc tối thiểu hàm mất mát luôn là việc cần thiết để
tăng độ chính xác cho mô hình. Để tối ưu hàm mất mát bên trên có 2 phương pháp hay
dùng là Stochastic gradient descent và Alternating least squares.

Phương pháp Stochastic gradient descent (SGD):

Đầu tiên Gradient descent (GD) là gì? Khi muốn tìm điểm cực tiểu toàn cục của
1 hàm số ta sẽ tìm đạo hàm và giải phương trình bằng 0, sau đó thay các nghiệm tìm
được và so sánh các cực tiểu cục bộ. Nhưng đối với hàm mất mát với đạo hàm phức
tạp thì ngay cả việc tìm nghiệm bằng 0 cũng không hề dễ dàng. Và GD là phương
pháp giúp chúng ta tìm được điểm tiệm cận cực tiểu đó, bằng cách chọn 1 điểm bất kỳ,
sau đó lặp lại 1 công thức giúp tiến dần điểm đó đến khi đạo hàm gần bằng 0 tức điểm
cực tiểu. Chính vì vậy GD được gọi là giảm đạo hàm hay phương pháp xuống dốc.
Cho xt là điểm hiện tại, thì điểm tiếp theo xt+1 sẽ được tính bằng xt-n lần đạo hàm
tại xt với η (eta) là hệ số thể hiện tốc độ di chuyển của điểm

𝑥𝑡 + 1 = 𝑥𝑡 − 𝑛𝑓 ′ (𝑥𝑡 )

Để giải thích công thức này thì hơi dài dòng nên có thể hiểu đơn giản là: sau mỗi
lần lặp điểm hiện tại sẽ giảm (hoặc tăng nếu ở bên trái cực tiểu) 1 lượng tùy vào tốc độ
eta và đạo hàm đến khi giá trị của đạo hàm gần bằng 0. Công thức đối với hàm vecto
như hàm mất mát cũng sẽ tương tự:

𝜃𝑡 + 1=𝜃𝑡 − η∇𝜃 𝑓(𝜃𝑡 )


Với θ là vecto hay điểm dữ liệu ∇θ f(θt ) là đạo hàm tại vecto hiện tại

SGD - giảm đạo hàm ngẫu nhiên Là một phương pháp nhằm cải thiện tốc độ tìm
điểm cực tiểu so với khi dùng GD. Khi dùng GD trong mỗi vòng lặp ta chỉ tính đạo
hàm tại 1 điểm hiện tại rồi cập nhật điểm này dựa trên đạo hàm đó, còn SGD thì tính
đạo hàm tại toàn bộ các điểm dữ liệu sau đó giảm theo đạo hàm của 1 điểm ngẫu
nhiên. Và sự ngẫu nhiên này sẽ cho cơ hội nhảy 1 bước xa khi tính toán giúp tốc độ
tiến đến điểm cần tìm nhanh hơn (do tốn ít vòng lặp hơn GD). Vì vậy đối với bài toán
có lượng dữ liệu lớn như bài toán này thì SGD là phương pháp rất hiệu quả. Khi đó
công thức cập nhật sẽ là:

𝜃𝑡 + 1=𝜃𝑡 − η∇𝜃 𝑓(𝜃, 𝑥𝑖 , 𝑦𝑖 )


Đặt 𝑒𝑢 𝑖 ≝ 𝑟𝑢 𝑖 − 𝑞𝑖𝑟 𝑝𝑢 . Khi áp dụng vào hàm mất mát (2) bên trên ta sẽ có công thức
cập nhật từng biến:

Ta chọn 2 điểm bắt đầu cho 2 biến số cần tìm rồi giảm dần theo đạo hàm để có
được điểm cực tiểu (điểm khiến hàm mất mát đạt giá trị nhỏ nhất) chính là điểm cần
tìm.

Phương pháp Alternating least squares (ALS):

Tuy nhiên trong một vài trường hợp sự dụng phương pháp ALS lại có hiệu quả
hơn.

ALS hay còn gọi là phương pháp bình phương tối thiểu thay phiên nhau. Gọi là
thay phiên nhau bởi hàm mất mát trên có 2 biến khiến hàm không lồi (khó để tìm cực
tiểu) chính vì vậy ta thay phiên cố định 1 biến rồi tối ưu hàm theo biến còn lại. Khi cố
định 1 biến hàm trở thành hàm bậc 2 và có thể giải bằng phương pháp bình phương tối
thiểu. Việc cố định 1 biến rồi tính toán lại biến còn lại được thực hiện lần lượt cho đến
khi các điểm hội tụ lại tại điểm cực tiểu.

Tựu chung thì SGD dễ sử dụng và tốc độ nhanh hơn ALS tuy nhiên có 2 trường
hợp mà ALS lại được ưu tiên hơn.

Trường hợp 1 là hệ thống có khả năng chạy các tiến trình 1 cách song song.

Ta thấy khi cố định 1 trong 2 cột công thức hàm cần tối ưu sẽ trở thành

Từ đó bài toán có thể chuyển thành việc tối ưu từng cột 1 của q (hoặc p) cho nên
việc sử dụng trong hệ thống song song sẽ dễ dàng hơn. Trong khi nếu SGD sử dụng
trong hệ thống song song sẽ dễ gặp vấn đề bị ghi đè nếu kết quả cập nhật có liên quan
đến 2 phép toán diễn ra song song.

Trường hợp thứ 2 là khi sử dụng với hệ thống tập trung vào các dữ liêu ẩn. Bởi
không phải lúc nào tập huấn luyện cũng thưa thớt, nên việc lặp lại qua tất cả các điểm
dữ liệu theo cách của SGD lại trở lên không thực tiễn. Trong trường hợp này sử dụng
ALS cũng có hiệu quả cao hơn.
TÀI LIỆU THAM KHẢO

1. Recommendation systems: Principles, methods and evaluation, 2015, F.O. Isinkaye,


Y.O. Folajimi, B.A. Ojokoh; Egyptian Informatics Journal 261–273

2. The BellKor 2008 Solution to the Netflix Prize, 2008, Robert M. Bell, Yehuda
Koren, Chris Volinsky BellKor@research.att.com 2008

3. Scalable Collaborative Filtering with Jointly Derived Neighborhood Interpolation


Weights, 2007, Robert M. Bell and Yehuda Koren , Seventh IEEE International
Conference on Data Mining

4. Hệ thống gợi ý sản phẩm trong bán hàng trực tuyến sử dụng kỹ thuật lọc cộng tác
2014 Nguyễn Hùng Dũng, Nguyễn Thái Nghe Tạp chí Khoa học Trường Đại học Cần
Thơ trang 36-51

5. Introduction to Data Science - A Python Approach to Concepts 2017 Laura Igual,


Santi Seguí Techniques and Applications; Springer

6. Công nghệ Matrix Factorization cho Hệ thống gợi ý, https://viblo.asia/p/cong-nghe-


matrix-factorization-cho-he-thong-goi-y-naQZRJe0Zvx

You might also like