Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 72 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
72
Dung lượng
1,59 MB
Nội dung
ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG PINTHIP Anon Nghiên cứu phương pháp phân tích ma trận SVD số ứng dụng học máy LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH THÁI NGUN - 2019 Số hóa Trung tâm Học liệu Công nghệ thông tin – ĐHTN http://lrc.tnu.edu.vn ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG PINTHIP Anon Nghiên cứu phương pháp phân tích ma trận SVD số ứng dụng học máy Chuyên ngành: Khoa học máy tính Mã số: 8480101 LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH Người hướng dẫn khoa học: TS Đàm Thanh Phương THÁI NGUYÊN - 2019 Số hóa Trung tâm Học liệu Công nghệ thông tin – ĐHTN http://lrc.tnu.edu.vn LỜI CAM ĐOAN Tôi xin cam đoan: Luận văn thạc sỹ chuyên ngành Khoa học máy tính, tên đề tài “Nghiên cứu phương pháp phân tích ma trận SVD số ứng dụng học máy” cơng trình nghiên cứu, tìm hiểu trình bày tơi thực hướng dẫn khoa học TS Đàm Thanh Phương, Trường Đại học Công nghệ Thông tin Truyền thông - Đại học Thái Nguyên Kết tìm hiểu, nghiên cứu luận văn hồn tồn trung thực, khơng vi phạm điều luật sở hữu trí tuệ pháp luật Việt Nam Nếu sai, tơi hoàn toàn chịu trách nhiệm trước pháp luật Tất tài liệu, báo, khóa luận, cơng cụ phần mềm tác giả khác sử dụng lại luận văn dẫn tường minh tác giả có danh mục tài liệu tham khảo Thái Nguyên, ngày 18 tháng năm 2019 Tác giả luận văn Pinthip Anon i LỜI CẢM ƠN Tác giả xin chân thành cảm ơn TS Đàm Thanh Phương, trường Đại học Công nghệ thông tin truyền thông - Đại học Thái Nguyên, giáo viên hướng dẫn khoa học hướng dẫn tác giả hoàn thành luận văn này, xin cảm ơn thầy, cô giáo trường Đại học công nghệ thông tin truyền thơng nơi tác giả theo học hồn thành chương trình cao học nhiệt tình giảng dạy giúp đỡ Xin cảm ơn nơi tác giả công tác tạo điều kiện thuận lợi để tác giả hồn thành chương trình học tập Và cuối xin cảm ơn gia đình, bạn bè, đồng nghiệp động viên, giúp đỡ tác giả suốt thời gian học tập, nghiên cứu hoàn thành luận văn Xin chân thành cảm ơn Thái Nguyên, ngày 18 tháng năm 2019 Tác giả luận văn Pinthip Anon ii DANH SÁCH HÌNH VẼ 2.1 Minh họa phân tích SVD 25 2.2 Biểu diễn SVD dạng thu gọn 28 3.1 Ví dụ SVD cho nén ảnh 38 3.2 Ví dụ utility matrix với hệ thống Gợi ý hát Các hát người dùng đánh giá theo mức độ từ đến Các dấu ’ ?’ màu xám ứng với việc liệu chưa tồn sở liệu Recommendation Systems cần phải tự điền giá trị 41 3.3 Giả sử feature vector cho item cho cột cuối Với user, cần tìm mơ hình θi tương ứng cho mơ hình thu tốt 43 3.4 Ví dụ utility matrix dựa số user rate cho item Một cách trực quan, hành vi u0 giống với u1 u2 , u3 , u4 , u5 , u6 Từ dự đốn u0 quan tâm đến i2 u1 quan tâm đến item 47 3.5 Ví dụ mơ tả User-user Collaborative Filtering a) Utility Matrix ban đầu b) Utility Matrix chuẩn hoá c) User similarity matrix d) Dự đốn (normalized) ratings cịn thiếu e) Ví dụ cách dự đoán normalized rating u1 cho i1 f) Dự đốn (denormalized) ratings cịn thiếu 49 3.6 Matrix Factorization Utility matrix Y phân tích thành tích hai ma trận low-rank X W 53 iii DANH MỤC KÝ HIỆU, TỪ VIẾT TẮT R Tập hợp số thực Z Tập hợp số nguyên C Tập hợp số phức Rn Không gian Euclide n chiều ||.|| Chuẩn Euclide SV D Singular Value Decomposition rank(A) Hạng ma trận A det(A) Định thức ma trận A AT Chuyển vị ma trận A AH Hermitian ma trận A A F Frobenius norm ma trận A diag(A) Đường chéo ma trận A trace(A) trace ma trận A sng(x) Hàm xác định dấu ∂f ∂x ∇x f Đạo hàm hàm số f theo biến số x∈R Gradient (đạo hàm ) hàm số f theo véc tơ x iv MỤC LỤC Lời cam đoan i Lời cảm ơn ii Danh sách hình vẽ ii Danh mục ký hiệu, từ viết tắt iv Mở đầu Chương MỘT SỐ KIẾN THỨC CHUẨN BỊ 1.1 Một số kiến thức đại số tuyến tính 1.2 Giới thiệu học máy 18 Chương PHƯƠNG PHÁP PHÂN TÍCH MA TRẬN SVD 23 2.1 Phân tích ma trận SVD 23 2.2 Một số biến thể SVD 27 Chương MỘT SỐ ỨNG DỤNG CỦA SVD TRONG HỌC MÁY 37 3.1 Phân tích SVD ứng dụng nén ảnh 37 3.2 Ứng dụng SVD hệ gợi ý 39 Kết luận chung 63 Tài liệu tham khảo 63 v MỞ ĐẦU Những năm gần đây, AI - Artificial Intelligence (Trí Tuệ Nhân Tạo), cụ thể Machine Learning (Học Máy Máy Học) lên chứng cách mạng công nghiệp lần thứ tư (1 - động nước, lượng điện, - cơng nghệ thơng tin) Trí Tuệ Nhân Tạo len lỏi vào lĩnh vực đời sống mà khơng nhận Xe tự hành Google Tesla, hệ thống tự tag khuôn mặt ảnh Facebook, trợ lý ảo Siri Apple, hệ thống gợi ý sản phẩm Amazon, hệ thống gợi ý phim Netflix, máy chơi cờ vây AlphaGo Google DeepMind, , vài ứng dụng AI/Machine Learning [1] Machine Learning tập AI Theo định nghĩa Wikipedia, Machine learning is the subfield of computer science that “gives computers the ability to learn without being explicitly programmed” Nói đơn giản, Machine Learning lĩnh vực nhỏ Khoa Học Máy Tính, có khả tự học hỏi dựa liệu đưa vào mà không cần phải lập trình cụ thể Chính vậy, việc nghiên cứu phát triển thuật toán Học máy xây dựng ứng dụng đòi hỏi thiết người làm Khoa học máy tính Nền tảng tốn học Machine Learning địi hỏi phải có kiến thức Đại số tuyến tính, tối ưu, xác suất thống kê Việc phân tích ma trận thành tích nhiều ma trận đặc biệt khác (Matrix Factorization Matrix Decomposition) mang lại nhiều ích lợi quan trọng Đặc biệt thuật toán Học máy giảm số chiều liệu, nén liệu, tìm hiểu đặc tính liệu, giải hệ phương trình tuyến tính, clustering, nhiều ứng dụng khác Recommendation System nhiều ứng dụng Matrix Factorization SVD (singular value decomposition) dạng khai triển ma trận có nhiều ứng dụng vấn đề liên quan đến nghịch đảo số hóa liệu Hiện phân tích SVD ma trận xuất nhiều ứng dụng thực tế tín hiệu số, tính giá trị xấp xỉ kĩ thuật, công nghệ thông tin, học máy ứng dụng cơng cụ tìm kiếm websites Tuy nhiên, nghiên cứu lý thuyết liên quan đến SVD học viên cao học vấn đề mới, chưa gần gũi chưa dễ hiểu cho học viên cần nghiên cứu mảng đề tài thú vị Do em lựa chọn đề tài “Nghiên cứu phương pháp phân tích ma trận SVD số ứng dụng học máy” thực làm luận văn cao học nhằm mục đích đưa đến cho người đọc thân kiến thức khai triển SVD tạo nhìn tổng quan cách khai triển số tính chất, hệ quan trọng liên quan đến dạng khai triển này.[2], [8], [11] Đề tài luận văn nghiên cứu phương pháp Matrix Factorization đẹp Đại số tuyến tính Phương pháp có tên Singular Value Decomposition (SVD) Ta thấy, ma trận, khơng thiết vng, phân tích thành tích ba ma trận đặc biệt Sau ứng dụng cụ thể SVD nén ảnh hệ thống gợi ý nghiên cứu áp dụng Nội dung luận văn gồm chương: Chương Các kiến thức sở Chương trình bày kiến thức chuẩn bị cho việc nghiên cứu Đó kiến thức giới thiệu học máy; Các kiến thức sở Image Compresstion Recommendation System kiến thức sở Đại số tuyến tính giải tích ma trận 1.1 Giới thiệu học máy 1.2 Các kiến thức sở Image Compresstion Recommendation System 1.3 Các kiến thức sở Đại số tuyến tính Chương Phương pháp phân tích ma trận SVD Nội dung chương tập trung vào vấn đề phân tích ma trận SVD kiến thức mở rộng SVD Cụ thể sau: 2.1 Phát biểu SVD 2.2 Các kiến thức mở rộng SVD Chương Ứng dụng SVD Sau nắm rõ nội dung chương 2, chương trình bày kết ứng dụng SVD số toán học máy Cụ thể có nội dung sau: 3.1 Image Compresstion 3.2 Recommendation System 3.3 Một số ứng dụng khác Phần kết luận: Tóm tắt kết đạt thảo luận hướng phát triển đề tài cịn lại Rating prediction: Cơng thức phổ biến sử dụng để dự đoán rating u cho i là: yˆi,u = ¯i,uj sim(u, uj ) uj ∈N (u,i) y uj ∈N (u,i) |sim(u, uj )| (3.2.10) (sự khác biết so với trung bình có trọng số mẫu số có sử dụng trị tuyệt đối để xử lý số âm) N (u, i) tập hợp k users neighborhood (tức có similarity cao nhất) u mà rated i Item-item Collaborative Filtering Một số hạn chế User-user CF: • Trên thực tế, số lượng users lớn số lượng items nhiều Kéo theo Similarity matrix lớn với số phần tử phải lưu giữ nửa bình phương số lượng users (chú ý ma trận đối xứng) Việc này, đề cập trên, khiến cho việc lưu trữ ma trận nhiều trường hợp không khả thi • Ma trận Utility Y thường sparse Với số lượng users lớn so với số lượng items, nhiều cột ma trận sparse, tức có vài phần tử khác Lý users thường lười rating Cũng việc này, user thay đổi rating rate thêm items, trung bình cộng ratings vector chuẩn hoá tương ứng với user thay đổi nhiều Kéo theo đó, việc tính tốn ma trận Similarity, vốn tốn nhiều nhớ thời gian, cần thực lại Ngược lại, tính tốn similarity items recommend items gần giống với item u thích user có lợi ích sau: • Vì số lượng items thường nhỏ số lượng users, Similarity matrix trường hợp nhỏ nhiều, thuận lợi cho việc lưu trữ tính tốn bước sau 51 • Vì số lượng phần tử biết Utility matrix số hàng (items) số cột (users), nên trung bình, hàng ma trận có nhiều phần tử biết số phần tử biết cột Việc dễ hiểu item rated nhiều users Kéo theo đó, giá trị trung bình hàng bị thay đổi có thêm vài ratings Như vậy, việc cập nhật ma trận Similarity Matrix thực thường xun Cách tiếp cận thứ hai gọi Item-item Collaborative Filtering Hướng tiếp cận sử dụng nhiều thực tế Về mặt tính tốn, Item-item CF nhận từ User-user CF cách chuyển vị (transpose) ma trận utility, coi items rate users Sau tính kết cuối cùng, ta lại chuyển vị lần để thu kết 3.2.3 Matrix Factorization Collaborative Filtering Trong phần này, sử dụng phân tích ma trận SVD để giải toán Collaborative Filtering Nhắc lại Content-based Recommendation Systems, item mô tả vector x gọi item profile Trong phương pháp này, ta cần tìm vector hệ số w tương ứng với user cho rating biết mà user cho item xấp xỉ với: y ≈ xw (3.2.11) Với cách làm trên, Utility Matrix Y , giả sử điền hết, xấp xỉ với: x x w x1 w2 x1 wN 1 1 x2 w1 x2 w2 x2 wN x2 = w w w = XW Y≈ N . xM xM w1 xM w2 xM wN (3.2.12) Với M , N số item số user 52 Hình 3.6: Matrix Factorization Utility matrix Y phân tích thành tích hai ma trận low-rank X W Chú ý rằng, x xây dựng dựa thông tin mơ tả item q trình xây dựng độc lập với trịnh tìm hệ số phù hợp cho user Như vậy, việc xây dựng item profile đóng vai trị quan trọng có ảnh hưởng trực tiếp lên hiệu mơ hình Thêm nữa, việc xây dựng mơ hình riêng lẻ cho user dẫn đến kết chưa thực tốt khơng khai thác đặc điểm users gần giống Bây giờ, giả sử ta không cần xây dựng từ trước item profile x mà vector đặc trưng cho item huấn luyện đồng thời với mơ hình user (ở vector hệ số) Điều nghĩa là, biến số toán tối ưu X W; X ma trận toàn item profiles, hàng tương ứng với item, W ma trận toàn user models, cột tương ứng với user Với cách làm này, cố gắng xấp xỉ Utility Matrix Y ∈ RM ×N tích hai ma trận X ∈ RM ×K W ∈ RK×N Thông thường, K chọn số nhỏ nhiều so với M, N Khi hai ma trận X W có rank khơng vượt q K Chính vậy, phương pháp cịn gọi Low-Rank Matrix Factorization (Hình 3.6) Một số điểm lưu ý: • Ý tưởng đằng sau Matrix Factorization cho Recommendation Systems tồn latent features (tính chất ẩn) mơ tả liên quan 53 items users Ví dụ với hệ thống gợi ý phim, tính chất ẩn hình sự, trị, hành động, hài, ; kết hợp thể loại này; điều mà khơng thực cần đặt tên Mỗi item mang tính chất ẩn mức độ tương ứng với hệ số vector x nó, hệ số cao tương ứng với việc mang tính chất cao Tương tự, user có xu hướng thích tính chất ẩn mô tả hệ số vector w Hệ số cao tương ứng với việc user thích phim có tính chất ẩn Giá trị biểu thức xw cao thành phần tương ứng x w cao Điều nghĩa item mang tính chất ẩn mà user thích, nên gợi ý item cho user • Về bản, để tìm nghiệm tốn tối ưu, ta phải tìm X W thành phần lại cố định Như vậy, hàng X phụ thuộc vào toàn cột W Ngược lại, cột W lại phục thuộc vào toàn hàng X Như vậy, có quan hệ ràng buộc chằng chịt thành phần hai ma trận Tức cần sử dụng thông tin tất để suy tất Vậy nên phương pháp xếp vào Collaborative Filtering • Trong toán thực tế, số lượng items M số lượng users N thường lớn Việc tìm mơ hình đơn giản giúp dự đốn ratings cần thực cách nhanh Neighborhood-based Collaborative Filtering không yêu cầu việc learning nhiều, q trình dự đốn (inference), ta cần tìm độ similarity user xét với tồn users lại suy kết Ngược lại, với Matrix Factorization, việc learning phức tạp chút phải lặp lặp lại việc tối ưu ma trận cố định ma trận cịn lại, việc inference đơn giản ta cần lấy tích hai vector xw , vector có độ dài K số nhỏ nhiều so với M, N Vậy nên 54 trình inference khơng u cầu khả tính tốn cao Việc khiến phù hợp với mơ hình có tập liệu lớn • Việc lưu trữ hai ma trận X W yêu cầu lượng nhớ nhỏ so với việc lưu toàn Similarity matrix Neighborhood-based Collaborative Filtering Cụ thể, ta cần nhớ để chứa K(M + N ) phần tử thay lưu M N Similarity matrix Xây dựng tối ưu hàm mát Hàm mát: Tương tự Content-based Recommendation Systems, việc xây dựng hàm mát dựa thành phần điền Utility Matrix Y có khác chút khơng có thành phần bias biến tối ưu X W L(X, W) = 2s N n=1 m:rmn λ (ymn − xm wn )2 + (||X||2F + ||W||2F ) (3.2.13) =1 rmn = item thứ m đánh giá user thứ n, || • ||2F Frobineous norm, tức bậc hai tổng bình phương tất phần tử ma trận (giống với norm vector), s toàn số ratings có Thành phần thứ trung bình sai số mơ hình Thành phần thứ hai hàm mát phía l2 regularization, giúp tránh overfitting Giá trị ratings thường giá trị chuẩn hoá, cách trừ hàng Utility Matrix trung bình cộng giá trị biết hàng (item-based) trừ cột trung bình cộng giá trị biết cột (userbased) Trong số trường hợp định, ta khơng cần chuẩn hố ma trận này, kèm theo phải có thêm kỹ thuật khác để giải vấn đề thiên lệch rating Việc tối ưu đồng thời X, W tương đối phức tạp, thay vào đó, phương pháp sử dụng tối ưu ma trận cố định ma trận kia, tới hội tụ Tối ưu hàm mát: Khi cố định X, việc tối ưu W tốn tối ưu Content-based 55 Recommendation Systems: L(W) = 2s N n=1 m:rmn λ (ymn − xm wn )2 + ||W||2F =1 (3.2.14) Khi cố định W, việc tối ưu X đưa tối ưu hàm: L(X) = 2s N n=1 m:rmn λ (ymn − xm wn )2 + ||X||2F =1 (3.2.15) Hai toán tối ưu Gradient Descent Chúng ta thấy tốn 3.2.14có thể tách thành N tốn nhỏ , toán ứng với việc tối ưu cột ma trận W L(wn ) = 2s m:r mn Vì biểu thức dấu λ (ymn − xm wn )2 + ||wn ||22 =1 (3.2.16) phụ thuộc vào items rated ˆ n ma trận tạo user xét, ta đơn giản cách đặt X ˆ n ratings hàng tương ứng với items rated đó, y tương ứng Khi đó: ˆ n wn ||2 + λ ||wn ||2 ||ˆ yn − X 2s (3.2.17) ˆT ∂L(wn ) ˆ n wn ) + λwn =− X yn − X n (ˆ ∂wn s (3.2.18) L(wn ) = đạo hàm nó: Vậy cơng thức cập nhật cho cột W là: ˆT ˆ n wn ) + λwn (ˆ yn − X wn = wn − η − X s n (3.2.19) Tương tự thế, cột X tức vector cho item, tìm cách tối ưu: L (xm ) = 2s n:r (ymn − xm wn )2 + mn =1 λ xm 2 (3.2.20) ˆ m ma trận tạo cột W ứng với users đánh Đặt W ˆ m vector ratings tương ứng 3.2.20 trở thành giá item y L(xm ) = m ˆ m ||2 + λ ||xm ||2 ||ˆ y − xm W 2 2s 56 (3.2.21) Tương tự trên, công thức cập nhật cho mồi hàng X có dạng: m ˆ m )W ˆ T + λxm y − xm W xm = xm − η − (ˆ m s 3.2.4 Kết tính tốn với python CSDL MovieLens class MF Khởi tạo chuẩn hoá: import pandas as pd import numpy as np from sklearn.metrics.pairwise import cosine_similarity from scipy import sparse class MF(object): """docstring for CF""" def init (self, Y_data, K, lam = 0.1, Xinit = None, Winit = None, learning_rate = 0.5, max_iter = 1000, print_every = 100, user_based = 1): self.Y_raw_data = Y_data self.K = K # regularization parameter self.lam = lam # learning rate for gradient descent self.learning_rate = learning_rate # maximum number of iterations self.max_iter = max_iter # print results after print_every iterations self.print_every = print_every # user-based or item-based self.user_based = user_based # number of users, items, and ratings Remember to add since id starts from self.n_users = int(np.max(Y_data[:, 0])) + self.n_items = int(np.max(Y_data[:, 1])) + self.n_ratings = Y_data.shape[0] if Xinit is None: # new self.X = np.random.randn(self.n_items, K) else: # or from saved data self.X = Xinit if Winit is None: self.W = np.random.randn(K, self.n_users) else: # from daved data self.W = Winit # normalized data, update later in normalized_Y function self.Y_data_n = self.Y_raw_data.copy() def normalize_Y(self): if self.user_based: user_col = item_col = n_objects = self.n_users # if we want to normalize based on item, just switch first two columns of data else: # item bas user_col = item_col = 57 (3.2.22) n_objects = self.n_items users = self.Y_raw_data[:, user_col] self.mu = np.zeros((n_objects,)) for n in range(n_objects): # row indices of rating done by user n # since indices need to be integers, we need to convert ids = np.where(users == n)[0].astype(np.int32) # indices of all ratings associated with user n item_ids = self.Y_data_n[ids, item_col] # and the corresponding ratings ratings = self.Y_data_n[ids, 2] # take mean m = np.mean(ratings) if np.isnan(m): m = # to avoid empty array and nan value self.mu[n] = m # normalize self.Y_data_n[ids, 2] = ratings - self.mu[n] Tính giá trị hàm mát: def loss(self): L = for i in range(self.n_ratings): # user, item, rating n, m, rate = int(self.Y_data_n[i, 0]), int(self.Y_data_n[i, 1]), self.Y_data_n[i, 2] L += 0.5*(rate - self.X[m, :].dot(self.W[:, n]))**2 # take average L /= self.n_ratings # regularization, don’t ever forget this L += 0.5*self.lam*(np.linalg.norm(self.X, ’fro’) + np.linalg.norm(self.W, ’fro’)) return L Xác định items đánh giá user, users đánh giá item ratings tương ứng: def get_items_rated_by_user(self, user_id): """ get all items which are rated by user user_id, and the corresponding ratings """ ids = np.where(self.Y_data_n[:,0] == user_id)[0] item_ids = self.Y_data_n[ids, 1].astype(np.int32) # indices need to be integers ratings = self.Y_data_n[ids, 2] return (item_ids, ratings) def get_users_who_rate_item(self, item_id): """ get all users who rated item item_id and get the corresponding ratings """ ids = np.where(self.Y_data_n[:,1] == item_id)[0] user_ids = self.Y_data_n[ids, 0].astype(np.int32) ratings = self.Y_data_n[ids, 2] return (user_ids, ratings) 58 Cập nhật X, W def updateX(self): for m in range(self.n_items): user_ids, ratings = self.get_users_who_rate_item(m) Wm = self.W[:, user_ids] # gradient grad_xm = -(ratings - self.X[m, :].dot(Wm)).dot(Wm.T)/self.n_ratings + \ self.lam*self.X[m, :] self.X[m, :] -= self.learning_rate*grad_xm.reshape((self.K,)) def updateW(self): for n in range(self.n_users): item_ids, ratings = self.get_items_rated_by_user(n) Xn = self.X[item_ids, :] # gradient grad_wn = -Xn.T.dot(ratings - Xn.dot(self.W[:, n]))/self.n_ratings + \ self.lam*self.W[:, n] self.W[:, n] -= self.learning_rate*grad_wn.reshape((self.K,)) Phần thuật tốn chính: def fit(self): self.normalize_Y() for it in range(self.max_iter): self.updateX() self.updateW() if (it + 1) % self.print_every == 0: rmse_train = self.evaluate_RMSE(self.Y_raw_data) print ’iter =’, it + 1, ’, loss =’, self.loss(), ’, RMSE train =’, rmse_train Dự đoán: def pred(self, u, i): """ predict the rating of user u for item i if you need the un """ u = int(u) i = int(i) if self.user_based: bias = self.mu[u] else: bias = self.mu[i] pred = self.X[i, :].dot(self.W[:, u]) + bias # truncate if results are out of range [0, 5] if pred < 0: return if pred > 5: return return pred def pred_for_user(self, user_id): """ predict ratings one user give all unrated items """ 59 ids = np.where(self.Y_data_n[:, 0] == user_id)[0] items_rated_by_u = self.Y_data_n[ids, 1].tolist() y_pred = self.X.dot(self.W[:, user_id]) + self.mu[user_id] predicted_ratings= [] for i in range(self.n_items): if i not in items_rated_by_u: predicted_ratings.append((i, y_pred[i])) return predicted_ratings Đánh giá kết cách đo Root Mean Square Error: def evaluate_RMSE(self, rate_test): n_tests = rate_test.shape[0] SE = # squared error for n in range(n_tests): pred = self.pred(rate_test[n, 0], rate_test[n, 1]) SE += (pred - rate_test[n, 2])**2 RMSE = np.sqrt(SE/n_tests) return RMSE Áp dụng lên MovieLens 100k r_cols = [’user_id’, ’movie_id’, ’rating’, ’unix_timestamp’] ratings_base = pd.read_csv(’ml-100k/ub.base’, sep=’\t’, names=r_cols, encoding=’latin-1’) ratings_test = pd.read_csv(’ml-100k/ub.test’, sep=’\t’, names=r_cols, encoding=’latin-1’) rate_train = ratings_base.as_matrix() rate_test = ratings_test.as_matrix() # indices start from rate_train[:, :2] -= rate_test[:, :2] -= Kết sư dụng cách chuẩn hoá dựa user: rs = MF(rate_train, K = 10, lam = 1, print_every = 10, learning_rate = 0.75, max_iter = 100, user_based = 1) rs.fit() # evaluate on test data RMSE = rs.evaluate_RMSE(rate_test) print ’\nUser-based MF, RMSE =’, RMSE iter = 10 , loss = 5.67288309116 , RMSE train = 1.20479476967 iter = 20 , loss = 2.64823713338 , RMSE train = 1.03727078113 iter = 30 , loss = 1.34749564429 , RMSE train = 1.02937828335 iter = 40 , loss = 0.754769340402 , RMSE train = 1.0291792473 iter = 50 , loss = 0.48310745143 , RMSE train = 1.0292035212 iter = 60 , loss = 0.358530096403 , RMSE train = 1.02921183102 iter = 70 , loss = 0.30139979707 , RMSE train = 1.02921377947 iter = 80 , loss = 0.27520033847 , RMSE train = 1.02921421055 iter = 90 , loss = 0.263185542009 , RMSE train = 1.02921430477 iter = 100 , loss = 0.257675693217 , RMSE train = 1.02921432529 User-based MF, RMSE = 1.06037991127 Ta nhận thấy giá trị loss giảm dần RMSE train giảm dần số 60 vịng lặp tăng lên RMSE có cao so với Neighborhood-based Collaborative Filtering ( 0.99) chút tốt kết Content-based Recommendation Systems nhiều ( 1.2) Nếu chuẩn hoá dựa item: rs = MF(rate_train, K = 10, lam = 1, print_every = 10, learning_rate = 0.75, max_iter = 100, user_based = 0) rs.fit() # evaluate on test data RMSE = rs.evaluate_RMSE(rate_test) print ’\nItem-based MF, RMSE =’, RMSE iter = 10 , loss = 5.62978100103 , RMSE train = 1.18231933756 iter = 20 , loss = 2.61820113008 , RMSE train = 1.00601013825 iter = 30 , loss = 1.32429630221 , RMSE train = 0.996672160644 iter = 40 , loss = 0.734890958031 , RMSE train = 0.99621264651 iter = 50 , loss = 0.464793412146 , RMSE train = 0.996184081495 iter = 60 , loss = 0.340943058213 , RMSE train = 0.996181347407 iter = 70 , loss = 0.284148579208 , RMSE train = 0.996180972472 iter = 80 , loss = 0.258103818785 , RMSE train = 0.996180914097 iter = 90 , loss = 0.246160195903 , RMSE train = 0.996180905172 iter = 100 , loss = 0.240683073898 , RMSE train = 0.996180903957 Item-based MF, RMSE = 1.04980475198 Kết có tốt chút Khi chạy với SVD, user-based: 1.018 (tốt so với 1.06 Matrix Factorization) item-based: 1.014 (tốt so với 1.05) Tiếp theo, đến với sở liệu lớn MovieLens 1M bao gồm xấp xỉ triệu ratings 6000 người dùng lên 4000 phim Đây sở liệu lớn, thời gian training tăng theo Ta thử áp dụng mơ hình Neighborhood-based Collaborative Filtering lên sở liệu để so sánh kết Thời gian training nhanh thời gian inference lâu Load liệu: r_cols = [’user_id’, ’movie_id’, ’rating’, ’unix_timestamp’] ratings_base = pd.read_csv(’ml-1m/ratings.dat’, sep=’::’, names=r_cols, encoding=’latin-1’) ratings = ratings_base.as_matrix() # indices in Python start from ratings[:, :2] -= Tách tập training test, sử dụng 1/3 liệu cho test from sklearn.model_selection import train_test_split rate_train, rate_test = train_test_split(ratings, test_size=0.33, random_state=42) 61 print X_train.shape, X_test.shape (670140, 4) (330069, 4) Áp dụng Matrix Factorization: rs = MF(rate_train, K = 2, lam = 0.1, print_every = 2, learning_rate = 2, max_iter = 10, user_based = 0) rs.fit() # evaluate on test data RMSE = rs.evaluate_RMSE(rate_test) print ’\nItem-based MF, RMSE =’, RMSE iter iter iter iter iter = = = = = , loss = 6.80832412832 , RMSE train = 1.12359545594 , loss = 4.35238943299 , RMSE train = 1.00312745587 , loss = 2.85065420416 , RMSE train = 0.978490200028 , loss = 1.90134941041 , RMSE train = 0.974189487594 10 , loss = 1.29580344305 , RMSE train = 0.973438724579 Item-based MF, RMSE = 0.981631017423 Kết tốt sau 10 vòng lặp Kết áp dụng Neighborhood-based Collaborative Filtering khoảng 0.92 thời gian inference lớn Kết áp dụng SVD MovieLens 1M, item-based: 0.95 (tốt so với 0.98) 62 KẾT LUẬN CHUNG Dưới bảo Giáo viên hướng dẫn, vào đề cương luận văn phê duyệt, luận văn đạt số nhiệm vụ sau: (1) Tìm hiểu phương pháp phân tích ma trận SVD tính chất Mọi ma trận phân tích SVD điều mang lại nhiều lợi ích giảm số chiều liệu, nén liệu , tìm hiểu đặc tính liệu, giải hệ phương trình tuyến tính, clustering, nhiều ứng dụng khác (2) Tìm hiểu ứng dụng SVD nén ảnh hệ gợi ý Ma trận ảnh tốn nén ảnh phân tích SVD qua giảm liệu cần lưu trữ Ma trận Utility Matrix chuẩn hoá xấp xỉ thành tích ma trận theo phân tích SVD Việc dự đốn, tính tốn trở nên thuận lợi xác Trên sở kết đạt được, tiếp tục nghiên cứu luận văn tảng tốt để nghiên cứu thêm số vấn đề sau: • Các phương pháp phân tích ma trận • Hệ gợi ý, tối ưu hóa hệ gợi ý • Các ứng dụng giảm chiều liệu 63 TÀI LIỆU THAM KHẢO [1] Singular Value Decomposition - Stanford University, https://www.youtube.com/watch?v=P5mlg91as1c [2] Singular Value Decomposition - Princeton, https://www.cs.princeton.edu/courses /svdchapter.pdf [3] CS168: The Modern Algorithmic Toolbox Lecture 9: The Singular Value Decomposition (SVD) and Low-Rank Matrix Approximations - Stanford, http://theory.stanford.edu/ tim/s15/l/l9.pdf [4] The Moore-Penrose Pseudoinverse (Math 33A - UCLA), http://www.math.ucla.edu/ laub/33a.2.12s/mppseudoinverse.pdf [5] Recommendation Systems - Stanford InfoLab, http://infolab.stanford.edu/ ullman/mmds/ch9.pdf [6] The Vector Space Model of text, https://stanford.edu/rjweiss/public notebooks/tfidf.html [7] Content Based Recommendations - Stanford University, https://www.youtube.com/watch?v=2uxXPzm-7FY [8] Machine learning bản, Vũ Hữu Tiệp., https://machinelearningcoban.com/ [9] Eric Matthes, "Python Crash Course", 2016 [10] Võ Duy Tuấn, "Python bản", 2016 [11] Đàm Thanh Phương, Trương Hà Hải, Ngô Mạnh Tưởng, Bùi Thị Thanh Xuân, "Giáo trình Tốn cao cấp 1", NXB Đại học Thái Nguyên, 2016 64 Số hóa Trung tâm Học liệu Công nghệ thông tin – ĐHTN http://lrc.tnu.edu.vn ... CHƯƠNG MỘT SỐ ỨNG DỤNG CỦA SVD TRONG HỌC MÁY Chương trình bày ứng dụng phân tích ma trận SVD số tốn học máy 3.1 Phân tích SVD ứng dụng nén ảnh Như nói, phân tích SVD dạng phân tích có nhiều ứng dụng, ... Phần trình bày phương pháp phân tích ma trận SV D, ma trận khơng thiết vng phân tích thành tích ba ma trận đặc biệt 2.1.2 Phân tích ma trận SVD Định nghĩa 2.1.1 Một ma trận Am×n phân tích thành dạng... ngành Khoa học máy tính, tên đề tài ? ?Nghiên cứu phương pháp phân tích ma trận SVD số ứng dụng học máy? ?? cơng trình nghiên cứu, tìm hiểu trình bày tơi thực hướng dẫn khoa học TS Đàm Thanh Phương,