ĐẠI HỌC QUỐC GIA TP HCM TRƯỜNG ĐẠI HỌC BÁCH KHOA BÁO CÁO BÀI TẬP LỚN MÔN ĐẠI SỐ TUYẾN TÍNH ĐỀ TÀI 09 “ỨNG DỤNG PHÂN TÍCH SVD VÀO HỆ THỐNG GỢI Ý TRONG HỌC MÁY” GVHD Bùi Thị Khuyên Lớp L20 Nhóm 04 TP HỒ.
Trang 1ĐẠI HỌC QUỐC GIA TP.HCM TRƯỜNG ĐẠI HỌC BÁCH KHOA
-
BÁO CÁO BÀI TẬP LỚN MÔN ĐẠI SỐ TUYẾN TÍNH
ĐỀ TÀI 09
“ỨNG DỤNG PHÂN TÍCH SVD VÀO HỆ THỐNG GỢI Ý
TRONG HỌC MÁY”
GVHD: Bùi Thị Khuyên Lớp: L20
Nhóm: 04
TP HỒ CHÍ MINH, tháng 12 năm 2021
Trang 2ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA
BÁO CÁO BÀI TẬP LỚN MÔN ĐẠI SỐ TUYẾN TÍNH
ĐỀ TÀI 04 “ỨNG DỤNG PHÂN TÍCH SVD VÀO HỆ THỐNG GỢI Ý
TRONG HỌC MÁY”
GVHD: Bùi Thị Khuyên
Lớp: L20
Nhóm số: 04
Danh sách thành viên:
Họ và tên MSSV
1 Lê Đình Hiếu 2113347
2 Trịnh Dương Quốc Hiếu 2111196
3 Nguyễn Nhật Hoàng 2113408
4 Hồ Nguyễn Thanh Hùng 2111382
5 Trần Minh Hoà 2111264
TP HỒ CHÍ MINH, tháng 12 năm 2021
Trang 3MỤC LỤC
LỜINÓIĐẦU 2
CHƯƠNG1.CƠSỞLÝTHUYẾTCỦAPHÂNTÍCHSVD 3
1.1 Giới thiệu chung về SVD 3
1.2 Phân tích ma trận SVD 3
1.3 SVD rút gọn 4
CHƯƠNG 2 ỨNG DỤNG PHÂN TÍCH SVD TRONG HỆ THỐNG GỢI Ý 5
2.1 Giới thiệu về hệ thống gợi ý 5
2.2 Ứng dụng của phân tích SVD vào hệ thống gợi ý trong học máy 5
2.2.1 SVD trong hệ thống gợi ý 6
CHƯƠNG 3 CHƯƠNG TRÌNH PHÂN TÍCH SVD (MATLAB) 7
3.1 Sự thoả hiệp về tập dữ liệu 7
3.2 Viết chương trình Matlab ví dụ về SVD trong hệ thống gợi ý 8
CHƯƠNG 4 KẾT LUẬN 11
TÀILIỆUTHAMKHẢO 12
PHỤLỤC 13
Trang 4LỜI NÓI ĐẦU
Đại số tuyến tính nói chung có rất nhiều ứng dụng trong hầu hết các lĩnh vực trong khoa học: kinh tế, môi trường, công nghệ máy tính, xử lý tín hiệu, đồ họa,… Một phần nhỏ trong số đó phải nhắc đến là phương pháp phân tích SVD trong nhiều bài toán khác nhau Phương pháp phân tích suy biến (singular value decomposition) được viết tắt là SVD là một trong những phương pháp thuộc nhóm matrix factorization được phát triển lần đầu bởi những nhà hình học vi phân Phương pháp SVD đã được phát triển dựa trên những tính chất của ma trận trực giao và ma trận đường chéo để tìm ra một ma trận xấp
xỉ với ma trận gốc Phương pháp này sau đó đã được ứng dụng rộng rãi trong các lĩnh vực như hình học vi phân, hồi y tuyến tính, xử lý hình ảnh, clustering, các thuật toán nén và giảm chiều dữ liệu, khử nhiễu âm thanh…
Nhóm tác giả chân thành cảm ơn giảng viên phụ trách giảng dạy bộ môn Đại số tuyến tính là Bùi Thị Khuyên đã tạo điều kiện để nhóm thực hiện đề tài này Nhờ những kiến thức và kinh nghiệm bổ ích,quý báu được cô hướng dẫn và truyền đạt, nhóm có thể triển khai làm việc dễ dàng hơn, sâu rộng hơn Song do đây là lần đầu thực hiện một bài tập lớn và chưa có nhiều kinh nghiệm nên có thể nhóm tác giả khó tránh những thiếu sót, rất mong cô có thể xem xét và góp ý để ở những đề tài sau nhóm có thể hoàn thiện hơn
Trang 5CHƯƠNG 1 CƠ SỞ LÝ THUYẾT CỦA PHÂN TÍCH SVD 1.1 Giới thiệu chung về SVD
- Phương pháp phân tích suy biến (singular value decomposition) viết tắt là SVD
là một trong những phương pháp được phát triển lần đầu bởi những nhà hình học
vi phân Ban đầu mục đích của phương pháp này là tìm ra một phép xoay không gian sao cho tích vô hướng của các vector không thay đổi Từ mối liên hệ này khái niệm về ma trận trực giao đã hình thành để tạo ra các phép xoay đặc biệt
- Phương pháp SVD đã được phát triển dựa trên những tính chất của ma trận trực giao và ma trận đường chéo để tìm ra một ma trận xấp xỉ với ma trận gốc
- Phương pháp này sau đó đã được ứng dụng đặc biệt hiệu quả trong các bài toán recommendation
1.2 Phân tích ma trận SVD
Một ma trận Amxn bất kỳ đều có thể phân tích thành dạng
Amxn = UmxmΣmxn(Vnxn)T (1.2)
Trong đó U, V là các ma trận trực giao, Σ là một ma trận đường chéo cùng kích thước với A Ma trận U là ma trận gồm các vector riêng trái của A, ma trận V là ma trận gồm các vector riêng phải của A và ma trận Σ là ma trận đường chéo, mỗi phần tử đường chéo là một trị riêng của A Các trị riêng được sắp xếp trên đường chéo chính theo thứ
tự sau: σ1 ≥ σ2 ≥ … ≥ σr ≥ σr + 1 =… = σp = 0
Với r là rank (hạng) của ma trận A là p = min{m,n}
SVD của một ma trận bất kì luôn tồn tại và cách biểu diễn là không duy nhất
Để thấy được mối liên hệ mật thiết giữa phép phân tích suy biến và phân tích riêng sau khi khai triển tích
Để tìm các ma trận Σ, U, V ta thực hiện các bước như sau:
Bước 1: Tìm ma trận V Nhân AT vào hai vế của (1.2)
ATA = (UΣVT)TUΣVT
= V.ΣT.UT.U.Σ.VT
= VΣTΣVT =V.Σ2.VT
Dấu bằng gần cuối xảy ra vì UTU = I do U là một ma trận trực giao Như vậy, để tìm ma trận S và V, ta chỉ cần tìm các trị riêng và các vector riêng của AT .A vì ta thấy các trị riêng của AT .A chính là bình phương các phần tử của Σ còn các vector riêng của AT .A chính là các cột của V
Trang 6Bước 2: Tìm ma trận U Nhân hai vế của (2.1) với AT và sử dụng VTV = 1
AAT = U.Σ2.UT Vậy các cột của U chính là các vector riêng của ATA Cuối cùng, ta phân tích ma trận A dưới dạng như sau:
A và Σ là các ma trận kích thước mxn, U là ma trận mxm và V là ma trận nxn Các phần tử σi trên đường chéo chính của Σ được gọi là giá trị suy biến (singular values) của ma trận A Các cột của ma trận V là hệ vector riêng ứng với trị riêng của ΣTΣ và còn được gọi là hệ vector suy biến trái (left - singular vectors) Các cột của U được gọi là hệ vector suy biến phải (right - singular vectors)
=> Ma trận ATA luôn là ma trận nửa xác định dương nên các trị riêng của nó là không
âm Các σi là căn bậc hai của các trị riêng của ATA còn được gọi là singular values của
A Cái tên Singular Value Decomposition (SVD) xuất phát từ đây
1.3 SVD rút gọn
- Khi nói đến kỹ thuật phân tích nhân tử ma trận, SVD rút gọn là một phương pháp phổ biến để tạo ra các đặc trưng bao gồm ma trận M thành ba ma trận U, Σ và V Không giống như SVD thông thường, SVD rút gọn tạo ra một thừa số hóa trong
đó số lượng cột có thể được chỉ định bị cắt bớt
- Chú ý rằng trong ma trận Σ, các giá trị trên đường chéo là không âm và giảm dần σ1≥ σ2≥ …,≥ σr≥ 0 = 0 =…= 0 Thông thường, chỉ một lượng nhỏ các σi mang giá trị lớn, các giá trị còn lại thường nhỏ và gần 0 Khi đó ta có thể xấp xỉ ma trận A bằng tổng của k < r ma trận có hạng 1:
A ≈ Ak = UkΣk(Vk)T = σ1u1vT1 + σ2u2v2T+ ⋯+σkukvkT
Nếu ma trận 𝐴 có rank nhỏ hơn rất nhiều so với số hàng và số cột 𝑟 ≪ 𝑚, 𝑛 , ta sẽ được lợi nhiều về việc lưu trữ
Dưới đây là ví dụ minh hoạ với 𝑚 = 4, 𝑛 = 6, 𝑟 = 2
Trang 8CHƯƠNG 2 ỨNG DỤNG PHÂN TÍCH SVD TRONG HỆ GỢI Ý 2.1 Giới thiệu về hệ thống gợi ý (recommendation system)
Những hiện tượng dưới đây hiện nay đã trở nên phổ biến:
- Khi bạn mua một món hàng trên các trang thương mại điện tử như: tiki, shopee, lazada, Hệ thống sẽ gợi ý khi bạn truy cập vào nó lần tiếp theo hoặc nó sẽ biết bạn thích món hàng gì dựa vào lịch sử mua hàng
- Youtube tự động chuyển các clip liên quan đến clip bạn đang xem Youtube cũng
tự gợi ý những clip mà có thể bạn sẽ thích
- Facebook hiển thị quảng cáo những sản phẩm có liên quan đến từ khoá bạn tìm kiếm
- Facebook gợi ý kết bạn
- Netflix tự động gợi ý phim cho người dùng
• Hệ thống gợi ý (Recommender systems hoặc Recommendation systems) là một dạng của hệ giúp người dùng giải quyết vấn đề quá tải thông tin, 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ệ thống gợi ý bao gồm các kỹ thuật và công cụ phần mềm nhằm đưa ra những gợi
ý cho người dung, đáp ứng nhu cầu của họ về một sản phẩm, dịch vụ nào đó trên Internet Những gợi ý được cung cấp nhằm hỗ trợ người dùng đưa ra quyết định lựa chọn những sản phẩm, dịch vụ phù hợp với nhu cầu và thị hiếu của mình
• Hệ thống gợi ý thông thường sẽ tập trung vào một mục tin hay sản phẩm (item) cụ thể nào đó theo thiết kế và giao diện đồ hoạ của người dùng kết hợp với kỹ thuật, thuật toán gợi ý nhằm sinh ra các gợi ý tuỳ chỉnh, cung cấp những gợi ý có ích và hiệu quả cho sản phẩm đó
2.2 Ứng dụng của phân tích SVD vào hệ thống gợi ý trong học máy
• Trong các thuật toán recommendation phương pháp SVD cũng tỏ ra hiệu quả hơn so với các phương pháp matrix factorization sử dụng gradient descent Ý tưởng khi áp dụng vào recommendation system cũng tương tự như nén ảnh đó là căn cứ vào những cặp (user, item) đã được rating của ma trận tiện ích ta sẽ tìm ra một ma trận xấp xỉ tốt nhất với ma trận tiện ích Sử dụng ma trận xấp xỉ để dự báo cho những cặp (user, item) chưa được rating
Trang 9• SVD là một phương pháp phân tích ma trận, vì vậy nó cũng có thể được áp dụng vào bài toán xây dựng hệ gợi ý Ý tưởng là ta sẽ xấp xỉ Utility Matrix đã được chuẩn hóa Giá trị của ma trận xấp xỉ có rank nhỏ hơn chính là giá trị được dự đoán
- Tồn tại nhiều hệ thống có khả năng tự động gợi ý cho người dùng những sản phẩm họ có thể thích Những thuật toán đằng sau những ứng dụng này là thuật toán Machine Learning có tên gọi chung là Recommender Systems hoặc Recommendation Systems, tức Hệ thống gợi ý
- Có hai thực thể chính trong Recommendation Systems là users và items Users
là người dùng Items là sản phẩm ví dụ như sách, báo, truyện, video, phim ảnh… Mục đích chính của các Recommendation Systems là dự đoán mức độ quan tâm của một user tới một item nào đó, qua đó có chiến lược recommend phù hợp
2.2.1 SVD trong hệ thống gợi ý
- SVD xây dựng một ma trận với hàng là item và cột là user và các phần tử được đưa ra bởi xếp hạng của người dùng SVD phân tích một ma trận thành ba ma trận khác và trích xuất các yếu tố từ việc phân tích nhân tử của ma trận cấp cao (user-item-rating)
A= U.Σ.(V)T
Ma trận U: ma trận suy biến của (item x biến tiềm ẩn)
Ma trận Σ: ma trận đường chéo (thể hiện sức mạnh của từng biến tiềm ẩn)
Ma trận VT: ma trận suy biến của (user x biến tiềm ẩn)
Từ việc phân tích nhân tử ma trận, các biến tiềm ẩn cho thấy đặc điểm của các item Cuối cùng, ma trận utility A được tạo ra với hình dạng m x n Đầu ra cuối cùng của ma trận A là giảm số chiều của ma trận thông qua việc trích xuất các biến tiềm ẩn Ma trận
A cho thấy mối liên hệ giữa user và item bằng cách ánh xạ user và item vào không gian tiềm ẩn r chiều
Trang 10 Qua hình trên, ma trận A có các giá trị bị thiếu Do đó, một thuật toán như SVD xây dựng một hệ thống gợi ý bằng cách cho phép chúng ta "lấp đầy khoảng trống" trong ma trận xếp hạng R, dự đoán xếp hạng mà mỗi user sẽ chỉ định cho từng item trong tập dữ liệu
Trang 11CHƯƠNG 3 CHƯƠNG TRÌNH PHÂN TÍCH SVD (MATLAB)
1 Sự thỏa hiệp về tập dữ liệu
- Mục tiêu của hệ thống gợi ý trong lọc cộng tác ở đây là dựa trên user - item, để
dự đoán xếp hạng và đưa ra đề xuất nếu người dùng chưa thực hiện xếp hạng
- Nhưng SVD không thể dự đoán nếu có giá trị trống trong ma trận và người dùng phải xuất hiện trong hệ thống đánh giá hiện đã biết và đưa ra xếp hạng
- Để tạo tập dữ liệu, hãy thỏa hiệp rằng: nếu user chưa đưa ra xếp hạng cho một item, thì hãy điền nó bằng 0 (sẽ có xung đột nếu số 0 nằm trong xếp hạng)
2 Viết chương trình Matlab ví dụ về ứng dụng của SVD trong hệ thống gợi
ý học máy (Machine Learning)
THIẾT LẬP MỘT TẬP DỮ LIỆU XẾP HẠNG ĐÁNH GIÁ VỚI HÀNG LÀ CÁC ITEMS, CỘT LÀ CÁC USERS:
A = [5 5 0 5;5 0 3 4; 3 4 0 3; 0 0 5 3; 5 4 4 5; 5 4 5 5];
SỬ DỤNG SVD ĐỂ GIẢM CHIỀU DỮ LIỆU:
A = A';
[U S V] = svd(A);
U = U(:,1:4);
S = S(1:4,1:4);
V = V(:,1:4);
reA = U*S*V';
TẠO VECTOR XẾP HẠNG CỦA MỘT NGƯỜI DÙNG MỚI:
%Tao nguoi dung moi
bob = [5 5 0 0 0 5];
uservector = bob*V*S;
Trang 12ĐƯA RA DỰ ĐOÁN CHO MỨC ĐỘ YÊU THÍCH CỦA NGƯỜI DÙNG MỚI CHO NHỮNG SẢN PHẨM CHƯA ĐƯỢC ĐÁNH GIÁ (0)
for i = 1:1:size(A,1)
temp = U(i,:);
similarity =
temp*uservector'/(sqrt(temp*temp')*sqrt(uservector*uservector'));
userlist(i) = similarity;
end
rank = sort(userlist);
l = size(rank,2);
t = zeros(1,size(A,2));
for i=l:-1:l-1
indx = find(rank(i)==userlist);
sim = rank(i);
t = t + A(indx,:)*sim;
end
index = find(bob==0);
rank = t(index);
rank
Kết quả đưa ra dự đoán xếp hạng của Bob cho 3 mục chưa đánh giá (giá trị 0):
Trang 13Chương 4: Kết luận
Ngoài các ứng dụng trên, SVD còn có các ứng dụng khác như hồi quy tuyến tính, trong tối ưu cực trị rời rạc, lát cắt cực đại, xử lí hình ảnh,… rất thích hợp cho lượng dữ liệu lớn
Qua bài tập lớn nhóm đã tiếp thu được các kiến thức mới như:
- Biết được các thao tác thuật toán đơn giản trên Matlab
- Giúp hiểu thêm về mô hình dữ liệu, cách sử dụng và tính toán SVD bằng tay hoặc hàm viết sẵn, tìm hiểu được một đề tài với nhiều ứng dụng thú
vị
- Nâng cao sự hứng thú môn học
- Trau dồi kĩ năng học tập và làm việc nhóm
Trang 14TÀI LIỆU THAM KHẢO
HỌC QUỐC GIA TP HỒ CHÍ MINH
[2] https://machinelearningmastery.com/using-singular-value-decomposition-to-build-a-recommender-system/
[3] SVD (MATLAB Functions) (n.d.) Retrieved December 8, 2021, from
http://www.ece.northwestern.edu/local-apps/matlabhelp/techdoc/ref/svd.html
[4]
https://viblo.asia/p/cong-nghe-matrix-factorization-cho-he-thong-goi-y-naQZRJe0Zvx
[5]
https://analyticsindiamag.com/singular-value-decomposition-svd-application-recommender-system/
Trang 15PHỤ LỤC Đoạn code ví dụ hoàn chỉnh:
A = [5 5 0 5;5 0 3 4; 3 4 0 3; 0 0 5 3; 5 4 4 5; 5 4 5 5];
A = A';
[U S V] = svd(A);
U = U(:,1:4);
S = S(1:4,1:4);
V = V(:,1:4);
reA = U*S*V';
%give one new user
bob = [5 5 0 0 0 5];
uservector = bob*V*S;
for i = 1:1:size(A,1)
temp = U(i,:);
similarity = temp*uservector'/(sqrt(temp*temp')*sqrt(uservector*uservector'));
userlist(i) = similarity;
end
rank = sort(userlist);
l = size(rank,2);
t = zeros(1,size(A,2));
for i=l:-1:l-1
indx = find(rank(i)==userlist);
sim = rank(i);
t = t + A(indx,:)*sim;
end
index = find(bob==0);
rank = t(index);
rank