(Luận văn thạc sĩ) Nghiên cứu phương pháp giảm chiều dữ liệu với PCA và một số ứng dụng

66 21 0
(Luận văn thạc sĩ) Nghiên cứu phương pháp giảm chiều dữ liệu với PCA và một số ứng dụng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

(Luận văn thạc sĩ) Nghiên cứu phương pháp giảm chiều dữ liệu với PCA và một số ứng dụng(Luận văn thạc sĩ) Nghiên cứu phương pháp giảm chiều dữ liệu với PCA và một số ứng dụng(Luận văn thạc sĩ) Nghiên cứu phương pháp giảm chiều dữ liệu với PCA và một số ứng dụng(Luận văn thạc sĩ) Nghiên cứu phương pháp giảm chiều dữ liệu với PCA và một số ứng dụng(Luận văn thạc sĩ) Nghiên cứu phương pháp giảm chiều dữ liệu với PCA và một số ứng dụng(Luận văn thạc sĩ) Nghiên cứu phương pháp giảm chiều dữ liệu với PCA và một số ứng dụng(Luận văn thạc sĩ) Nghiên cứu phương pháp giảm chiều dữ liệu với PCA và một số ứng dụng(Luận văn thạc sĩ) Nghiên cứu phương pháp giảm chiều dữ liệu với PCA và một số ứng dụng(Luận văn thạc sĩ) Nghiên cứu phương pháp giảm chiều dữ liệu với PCA và một số ứng dụng(Luận văn thạc sĩ) Nghiên cứu phương pháp giảm chiều dữ liệu với PCA và một số ứng dụng(Luận văn thạc sĩ) Nghiên cứu phương pháp giảm chiều dữ liệu với PCA và một số ứng dụng(Luận văn thạc sĩ) Nghiên cứu phương pháp giảm chiều dữ liệu với PCA và một số ứng dụng(Luận văn thạc sĩ) Nghiên cứu phương pháp giảm chiều dữ liệu với PCA và một số ứng dụng(Luận văn thạc sĩ) Nghiên cứu phương pháp giảm chiều dữ liệu với PCA và một số ứng dụng(Luận văn thạc sĩ) Nghiên cứu phương pháp giảm chiều dữ liệu với PCA và một số ứng dụng(Luận văn thạc sĩ) Nghiên cứu phương pháp giảm chiều dữ liệu với PCA và một số ứng dụng(Luận văn thạc sĩ) Nghiên cứu phương pháp giảm chiều dữ liệu với PCA và một số ứng dụng(Luận văn thạc sĩ) Nghiên cứu phương pháp giảm chiều dữ liệu với PCA và một số ứng dụng(Luận văn thạc sĩ) Nghiên cứu phương pháp giảm chiều dữ liệu với PCA và một số ứng dụng

ĐẠI HỌC THÁI NGUYÊN TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG VŨ THỊ NGUYỆT NGHIÊN CỨU PHƢƠNG PHÁP GIẢM CHIỀU DỮ LIỆU VỚI PCA VÀ MỘT SỐ ỨNG DỤNG Chuyên ngành: Khoa học máy tính Mã số: 48 01 01 LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH Giáo viên hƣớng dẫn: TS Đàm Thanh Phƣơng THÁI NGUYÊN - 2021 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 giảm chiều liệu với PCA số ứng dụng” cơng trình nghiên cứu, tìm hiểu trình bày 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 hồn tồ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 2021 Tác giả luận văn Vũ Thị Nguyệt 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 trường THPT Cẩm Phả - Quảng Ninh nơi tác giả công tác tạo điều kiện thuận lợi để tác giả có thời gian, tâm trí để hồn thành nhiệm vụ nghiên cứu 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 2021 Tác giả luận văn Vũ Thị Nguyệt ii DANH SÁCH HÌNH VẼ 1.1 Kiến trúc autoendcoder hàm loss 12 2.1 Ví dụ điểm liệu chiều có phương sai theo chiều thứ lớn 20 2.2 Ví dụ điểm liệu chiều có phương sai theo chiều lớn 22 2.3 Mô tả ý tưởng đổi hệ tọa độ PCA Dữ liệu biểu diễn qua hệ sở thỏa mãn mong muốn chênh lệch phương sai thành phần 22 2.4 Minh họa liệu hệ sở trực chuẩn tìm PCA 26 2.5 Các bước thực PCA 28 3.1 Ví dụ ảnh người Yale Face Database 38 3.2 Các eigenfaces tìm PCA 40 3.3 Hàng trên: ảnh gốc Hàng dưới: ảnh tái tạo dùng khuôn mặt riêng Ảnh hàng có nhiễu mang đặc điểm riêng mà mắt người phân biệt 41 3.4 PCA cho tốn dị tìm điểm bất thường 41 3.5 Danh mục đầu tư sử dụng PCA 43 3.6 Trực quan liệu sử dụng thành phần PCA 45 3.7 Dữ liệu biểu diễn theo chiều 46 3.8 Tái tạo lại chữ số sở PCA 46 3.9 Tương quan số thành phần giữ lại Phương sai 47 3.10 Dữ liệu chưa có nhiễu 48 3.11 Dữ liệu cộng nhiễu 49 3.12 Dữ liệu sau giảm chiều PCA, chống nhiễu 49 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 Rd Không gian Euclide d chiều Ck Khơng gian hàm có đạo hàm cấp k liên tục ||.|| Chuẩn Euclide ||.||F Chuẩn Frobenius P CA Principal Component Analysis- Phân tích thành phần ML Machine Learning - Học máy T race(A) Vết ma trận A Span(S) Không gian sinh hệ S Linear Discriminant Analysis - Phân tích biệt thức tuyến LDA tính KPCA Kernel PCA Eigenface Khuân mặt riêng EigenProfolio Danh mục đầu tư MNIST Bộ sở liệu chữ số viết tay SVD Singular Value Decomposition - Phân tích giá trị riêng iv MỤC LỤC Lời cam đoan i Lời cảm ơn ii Danh sách hình vẽ iii Danh mục ký hiệu, từ viết tắt iv Mở đầu Chương Tổng quan học máy toán giảm chiều liệu 1.1 Tổng quan học máy 1.2 Tổng quan giảm chiều liệu 10 1.3 Nền tảng toán học 13 Chương PHƯƠNG PHÁP PCA GIẢM CHIỀU DỮ LIỆU 19 2.1 Phát biểu toán 19 2.2 Phân tích thành phần 20 Chương MỘT SỐ ỨNG DỤNG CỦA PCA 33 3.1 Khuôn mặt riêng 33 3.2 Dị tìm điểm bất thường 40 3.3 Ứng dụng PCA tài 41 3.4 Ứng dụng PCA trực quan hóa liệu, khử nhiễu 44 Kết luận chung 50 Tài liệu tham khảo 51 Phụ lục code chương trình 53 v MỞ ĐẦU Ngày nay, xã hội ngày phát triển, việc đưa máy tính vào sử dụng, phục vụ cho công việc đời sống người sản sinh khối lượng liệu lớn phức tạp (big data), số hóa lưu trữ máy tính Những tập liệu lớn bao gồm liệu có cấu trúc, khơng có cấu trúc bán cấu trúc Đó liệu thông tin bán hàng trực tuyến, lưu lượng truy cập trang web, thông tin cá nhân, thói quen hoạt động thường ngày người.v.v Chúng chứa đựng nhiều thông tin quý báu mà khai thác hợp lý trở thành tri thức, tài sản mang lại giá trị lớn Thách thức đặt cho người phải đưa phương pháp, thuật tốn cơng cụ hợp lý để phân tích lượng liệu lớn Người ta nhận thấy máy tính có khả phân tích, xử lí khối liệu lớn phức tạp, tìm mẫu quy luật, vượt khả năng, tốc độ tính tốn ghi nhớ não người Khái niệm học máy từ hình thành Ý tưởng học máy máy tính học hỏi, học tự động theo kinh nghiệm [1] Máy tính phân tích lượng lớn liệu, tìm thấy mẫu, quy tắc ẩn liệu, sử dụng quy tắc để mơ tả liệu cách tự động liên tục cải thiện Học máy có nhiều ứng dụng, bao gồm nhiều lĩnh vực Máy tìm kiếm sử dụng học máy để xây dựng mối quan hệ tốt cụm từ tìm kiếm trang web Bằng cách phân tích nội dung trang web, cơng cụ tìm kiếm xác định từ cụm từ quan trọng việc xác định trang web định họ sử dụng cụm từ để trả thông tin kết phù hợp cho cụm từ tìm kiếm định [2] Cơng nghệ nhận dạng hình ảnh sử dụng học máy để xác định đối tượng cụ thể, chẳng hạn khuôn mặt [5] Đầu tiên thuật tốn học máy phân tích hình ảnh có chứa đối tượng định Nếu cung cấp đủ hình ảnh cho trình này, thuật tốn xác định hình ảnh có chứa đối tượng hay khơng [3] Ngồi học máy sử dụng để hiểu loại sản phẩm mà khách hàng quan tâm, cách phân tích sản phẩm khứ mà người dùng mua Máy tính đưa đề xuất sản phẩm khách hàng mua với xác suất cao [1] Tất ví dụ có ngun tắc giống nhau: Máy tính xử lý học cách xác định liệu, sau sử dụng kiến thức để đưa định liệu tương lai Tùy theo loại liệu đầu vào, thuật tốn học máy chia thành học có giám sát học khơng giám sát Trong học có giám sát, liệu đầu vào có nhãn kèm với cấu trúc biết [1], [5] Dữ liệu đầu vào gọi liệu huấn luyện Thuật tốn thường có nhiệm vụ tạo mơ hình dự đốn số thuộc tính từ thuộc tính biết Sau mơ hình tạo, sử dụng để xử lý liệu có cấu trúc giống liệu đầu vào Trong học không giám sát, liệu đầu vào chưa có nhãn, khơng có cấu trúc Nhiệm vụ thuật toán xác định cấu trúc liệu.[2] Phương pháp phân tích thành phần (Principle Component Analysis – PCA) kết đẹp quan trọng đại số tuyến tính Ngày kết ứng dụng nhiều lĩnh vực như: Công nghệ thông tin, Học máy, sinh học, tài chính.[1], [2] Đối với lĩnh vực ứng dụng sử dụng liệu, chẳng hạn học máy, liệu cần phân tích ban đầu phụ thuộc nhiều biến, vấn đề biến thường có tương quan với bất lợi cho việc áp dụng biến để xây dựng mơ hình tính tốn ví dụ: Hồi quy với số biến giải thích lớn khó để có nhìn trực quan liệu ví dụ: thị trường ta quan tâm có hàng ngàn mã cổ phiếu làm cách để quan sát liệu từ hàng ngàn cổ phiếu ta hình dung xu hướng toàn thị trường Phương pháp PCA “chiếu” (biễu diễn) liệu đa chiều lên khơng gian có sở trực giao, tức ta xem sở khơng gian biến hình ảnh liệu gốc khơng gian biểu diễn thông qua biến độc lập (tuyến tính) Vấn đề: chuyển liệu ban đầu sang khơng gian thơng tin đáng quan tâm liệu ban đầu liệu có bị mất? Để giải vấn đề phương pháp PCA tìm khơng gian với tiêu chí cố gắng phản ánh nhiều thông tin gốc tốt, thước đo cho khái niệm “thông tin” phương sai Một điểm hay là: biến khơng gian độc lâp, nên ta tính tốn tỷ lệ giải thích phương sai biến liệu, điều cho phép ta cân nhắc việc dùng số biến để giải thích liệu Các ứng dụng tự nhiên mà ta nhận là: • Giảm kích thước liệu • Nếu ta giảm số chiều chiều, ta dùng loại đồ thị để hiểu thêm liệu mà có, giúp ta nhìn liệu trực quan • Xử lý vấn đề tương quan biến liệu ban đầu cách sử dụng biến không gian mà phương pháp PCA tìm để mơ tả liệu • Nén ảnh: Giảm kích thước ảnh mà giữ đặc trưng quan trọng Đối tượng phạm vi nghiên cứu Nghiên cứu kiến thức đại số tuyến tính liên quan PCA thân phương pháp giảm chiều liệu sử dụng PCA Phạm vi nghiên cứu: Nghiên cứu kiến thức tảng PCA để hiểu chất; Nghiên cứu ứng dụng PCA học máy để giảm chiều liệu trường hợp Nội dung luận văn gồm chương Chương Tổng quan học máy tốn giảm chiều liệu Chương trình bày kiến thức tổng quan học máy toán giảm chiều liệu số tảng toán học cần thiết Nội dung bao gồm 1.1 Tổng quan học máy 1.2 Tổng quan giảm chiều liệu 1.3 Nền tảng toán học Chương Phương pháp PCA giảm chiều liệu Nội dung chương tập trung nghiên cứu thuật toán PCA, bao gồm mục: 2.1 Phát biểu tốn 2.2 Phân tích thành phần Chương Một số ứng dụng PCA Chương nghiên cứu, cài đặt số ứng dụng PCA.Nội dung bao gồm 3.1 Khuôn mặt riêng 3.2 Dị tìm điểm bất thường 3.3 Ứng dụng PCA tài 3.4 Ứng dụng PCA trực quan hóa liệu, khử nhiễu Cuối phần kết luận: Trình bày kết mà luận văn đạt hướng phát triển Mặc dù có cố gắng nỗ lực, song luận văn không tránh khỏi thiếu sót lực thời gian hạn chế Em chân thành mong muốn lắng nghe đóng góp, góp ý thầy cô bạn bè đồng nghiệp để luận văn cải thiện tốt Em xin chân thành cảm ơn khơng phản chiếu tồn hình ảnh: loại bỏ gần 90% số pixel! Hàng bảng hiển thị pixel riêng lẻ hàng cho Hình 3.7: Dữ liệu biểu diễn theo chiều thấy đóng góp tích lũy pixel vào việc xây dựng hình ảnh Chỉ sử dụng tám số thành phần dựa pixel, tạo phần nhỏ hình ảnh 64 pixel Nếu tiếp tục trình tự sử dụng tất 64 pixel, khơi phục hình ảnh ban đầu Nhưng cách biểu diễn theo pixel lựa chọn sở Chúng ta sử dụng hàm khác, hàm chứa số đóng góp xác định trước từ pixel viết sau image(x) = mean + x1 · (basis 1) + x2 · (basis 2) + x3 · (basis 3) · · · PCA coi trình lựa chọn hàm sở tối ưu, cho thêm vài hàm chúng lại với đủ để cấu trúc lại cách thích hợp phần lớn phần tử tập liệu Các thành phần chính, đóng vai trị biểu diễn chiều thấp liệu, đơn giản hệ số nhân phần tử chuỗi Hình cho thấy mô tả tương tự việc tái tạo lại chữ số cách sử dụng giá trị trung bình cộng với tám hàm sở PCA đầu tiên: Hình 3.8: Tái tạo lại chữ số sở PCA Không giống sở pixel, sở PCA cho phép khơi phục tính bật hình ảnh đầu vào với trung bình cộng với tám thành phần! Số lượng pixel thành phần hệ hướng vectơ ví dụ hai chiều Đây ý nghĩa mà PCA cung 46 cấp biểu diễn liệu theo chiều thấp: phát tập hợp hàm sở hiệu so với sở pixel gốc liệu đầu vào Một phần quan trọng việc sử dụng PCA thực tế khả ước tính có thành phần cần thiết để mơ tả liệu Điều xác định cách xem xét tỷ lệ phương sai giải thích tích lũy hàm số thành phần pca = PCA().fit(digits.data) plt.plot(np.cumsum(pca.explained_variance_ratio_)) plt.xlabel(’number of components’) plt.ylabel(’cumulative explained variance’); Hình 3.9: Tương quan số thành phần giữ lại Phương sai Đường cong định lượng tổng phương sai 64 chiều chứa N thành phần Ví dụ: thấy với chữ số viết tay MNIST, 10 thành phần chứa khoảng 75% phương sai, ta cần khoảng 50 thành phần để mô tả gần 100% phương sai Ở đây, thấy phép chiếu hai chiều nhiều thông tin (như đo phương sai giải thích) cần khoảng 20 thành phần để giữ lại 90% phương sai Nhìn vào biểu đồ để biết số chiều lớn giúp ta hiểu mức độ dư thừa nhiều lần quan sát 47 3.4.2 Khử nhiễu dùng PCA PCA sử dụng phương pháp lọc liệu nhiễu Ý tưởng là: thành phần có phương sai lớn nhiều so với ảnh hưởng nhiễu tương đối không bị ảnh hưởng nhiễu Vì vậy, ta xây dựng lại liệu cách sử dụng tập hợp lớn thành phần chính, ta nên ưu tiên giữ tín hiệu loại bỏ nhiễu Hãy xem điều trông với liệu chữ số MNIST Đầu tiên, vẽ số liệu đầu vào khơng có nhiễu def plot_digits(data): fig, axes = plt.subplots(4, 10, figsize=(10, 4), subplot_kw={’xticks’:[], ’yticks’:[]}, gridspec_kw=dict(hspace=0.1, wspace=0.1)) for i, ax in enumerate(axes.flat): ax.imshow(data[i].reshape(8, 8), cmap=’binary’, interpolation=’nearest’, clim=(0, 16)) plot_digits(digits.data) Hình 3.10: Dữ liệu chưa có nhiễu Bây giờ, ta thêm số nhiễu ngẫu nhiên để tạo tập liệu nhiễu vẽ lại np.random.seed(42) noisy = np.random.normal(digits.data, 4) plot_digits(noisy) Bằng mắt thường, hình ảnh bị nhiễu chứa pixel giả thấy rõ Chúng ta huấn luyện PCA liệu nhiễu, yêu cầu phép chiếu bảo toàn 50% phương sai: pca = PCA(0.50).fit(noisy) pca.n_components_ 48 Hình 3.11: Dữ liệu cộng nhiễu 12 Ở 50% phương sai tương đương với 12 thành phần Bây tính tốn thành phần sau sử dụng phép nghịch đảo phép biến đổi để tạo lại chữ số lọc: components = pca.transform(noisy) filtered = pca.inverse_transform(components) plot_digits(filtered) Hình 3.12: Dữ liệu sau giảm chiều PCA, chống nhiễu Thuộc tính bảo tồn tín hiệu, lọc nhiễu làm cho PCA trở thành quy trình lựa chọn thuộc tính hữu ích — ví dụ: thay huấn luyện phân loại liệu có chiều cao, thay vào ta đào tạo phân loại biểu diễn chiều thấp hơn, điều tự động phân loại để lọc nhiễu ngẫu nhiên đầu vào 49 KẾT LUẬN CHUNG Dưới bảo tận tình của 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 mơ hình giải tốn thực tế học máy Vận dụng mơ hình để tiếp cận giải vấn đề cụ thể Nghiên cứu chi tiết thuật tốn học máy từ phân tích tốn học, đến tìm nghiệm tối ưu, cài đặt thành thạo môi trường Python IDE chuyên dùng (2) Hiểu rõ sở toán học phương pháp phân tích thành phần PCA để giảm chiều liệu PCA phương pháp giảm chiều liệu dựa việc tối đa lượng thông tin giữ lại Lượng thông tin giữ lại đo tổng phương sai thành phần liệu Lượng liệu giữ lại nhiều chiều liệu lại tương ứng với vector riêng trị riêng lớn ma trận hiệp phương sai (3) Hiểu ứng dụng PCA, bao gồm trực tiếp giảm chiều liệu, sử dụng khuân mặt nhận dạng khuân mặt PCA giúp cho liệu chống lại nhiễu giữ lại thành phần có phương sai lớn PCA ứng dụng tài chính, dị tìm điểm bất thường số ứng dụng khác (4) Ưu điểm PCA: Loại bỏ đặc trưng tương quan, cải thiện hiệu suất thuật toán, Giảm khớp, Cải thiện trực quan hóa liệu (5) Nhược điểm PCA Các biến độc lập trở nên khó hiểu hơn, đặc trưng khơng dễ đọc dễ hiểu đặc trưng ban đầu Cần phải 50 chuẩn hóa liệu trước sử dụng PCA Có mát thơng tin Ngồi PCA phân tích tuyến tính, liệu phi tuyến không áp dụng tốt 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: • Nghiên cứu mối liên hệ phân tích thành phần phân tích ma trận khác SVD, LDA • Với tốn quy mơ lớn, đơi việc tính tốn tồn liệu khơng khả thi vấn đề nhớ Giải pháp thực PCA lần đầu tập liệu vừa với nhớ, sau lấy tập khác để từ từ (incrementally) cập nhật nghiệm PCA tới hội tụ • Ngồi ra,có thể nghiên cứu mở rộng PCA theo hướng Sparse PCA, Kernel PCA, Robust PCA 51 TÀI LIỆU THAM KHẢO [1] Vũ Hữu Tiệp, Machine learning Ebook on machinelearningcoban.com, 2020 [2] Hồng Xn Huấn , Giáo Trình học máy NXB ĐHQG Hà Nội, 2015 [3] Aurélien Géron, Hands-on Machine Learning with Scikit-Learn, Keras, and TensorFlow Published by O’Reilly Media, 2019 [4] Mehryar Mohri, Afshin Rostamizadeh, Ameet Talwalkar, Foundations of Machine Learning Massachusetts Institute of Technology, 2018 [5] Peter Flach, Machine learning, the art and science of algorithms that make sence of data Cambridge, 2012 [6] Bishop, Christopher M “Pattern recognition and Machine Learning.”, Springer (2006) Chapter 12 [7] Shalev-Shwartz S., Ben-David S, Understanding Machine Learning From Theory to Algorithms, Cambridge University Press, 2014 [8] Jason Brownlee, Master Machine Learning Algorithms - Discover how they work, Machinelearning Mastery, 2016 52 PHỤ LỤC CODE CHƯƠNG TRÌNH Khn mặt riêng import numpy as np from scipy import misc # for loading image ids = range(1, 16) # 15 persons states = [’centerlight’, ’glasses’, ’happy’, ’leftlight’, ’noglasses’, ’normal’, ’rightlight’,’sad’, ’sleepy’, ’surprised’, ’wink’ ] prefix = ’subject’ surfix = ’.pgm’ im = misc.imread(fn) h = 116 # hight w = 98 # width D = h * w N = len(states)*15 X = np.zeros((D, N)) cnt = for person_id in range(1, 16): for state in states: fn = path + prefix + str(person_id).zfill(2) + ’.’ + state + surfix X[:, cnt] = misc.imread(fn).reshape(D) cnt += from sklearn.decomposition import PCA pca = PCA(n_components=100) # k = 100 pca.fit(X.T) # projection matrix U = pca.components_.T import matplotlib.pyplot as plt for i in range(U.shape[1]): plt.axis(’off’) f1 = plt.imshow(U[:, i].reshape(116, 98), interpolation=’nearest’) f1.axes.get_xaxis().set_visible(False) f1.axes.get_yaxis().set_visible(False) # f2 = plt.imshow(, interpolation=’nearest’ ) plt.gray() fn = ’eigenface’ + str(i).zfill(2) + ’.png’ plt.savefig(fn, bbox_inches=’tight’, pad_inches=0) # plt.show() # See reconstruction of first persons for person_id in range(1, 7): for state in [’centerlight’]: fn = path + prefix + str(person_id).zfill(2) + ’.’ + state + surfix im = misc.imread(fn) plt.axis(’off’) # plt.imshow(im, interpolation=’nearest’ ) f1 = plt.imshow(im, interpolation=’nearest’) f1.axes.get_xaxis().set_visible(False) f1.axes.get_yaxis().set_visible(False) plt.gray() 53 fn = ’ori’ + str(person_id).zfill(2) + ’.png’ plt.savefig(fn, bbox_inches=’tight’, pad_inches=0) plt.show() # reshape and subtract mean, don’t forget x = im.reshape(D, 1) - pca.mean_.reshape(D, 1) # encode z = U.T.dot(x) #decode x_tilde = U.dot(z) + pca.mean_.reshape(D, 1) # reshape to orginal dim im_tilde = x_tilde.reshape(116, 98) plt.axis(’off’) # plt.imshow(im_tilde, interpolation=’nearest’ ) f1 = plt.imshow(im_tilde, interpolation=’nearest’) f1.axes.get_xaxis().set_visible(False) f1.axes.get_yaxis().set_visible(False) plt.gray() fn = ’res’ + str(person_id).zfill(2) + ’.png’ plt.savefig(fn, bbox_inches=’tight’, pad_inches=0) plt.show() cnt = for person_id in [10]: for ii, state in enumerate(states): fn = path + prefix + str(person_id).zfill(2) + ’.’ + state + surfix im = misc.imread(fn) f1 = plt.imshow(im, interpolation=’nearest’) f1.axes.get_xaxis().set_visible(False) f1.axes.get_yaxis().set_visible(False) fn = ’ex’ + str(ii).zfill(2) + ’.png’ plt.axis(’off’) plt.savefig(fn, bbox_inches=’tight’, pad_inches=0) plt.show() # cnt += Khử nhiễu ứng dụng khác function [dates, codes, prices] = FilterIndexData(filename, from, to) % load data fid=fopen(filename); data = textscan(fid,’%s %d %*f %*f %*f %f %*f’,’HeaderLines’,1,’Delimiter’,’,’,’CollectOutput’,1); fclose(fid); time = from:to; tempID = find(ismember(data{2}(:,1), time)); % danh sach cac ma co phieu thoi gian xem xet (CODE) codes = unique(data{1}(tempID)); % danh sach giao dich thoi gian xem xet dates = unique(data{2}(tempID,1)); % loc va fill du lieu vao ma tran row = length(dates); col = length(codes); prices = zeros(row, col); oldprices = zeros(col); for i=1:row % cac ma co phieu co gia giao dich thu i 54 ids = find(ismember(data{2}, dates(i))); code_in_date = data{1}(ids); % ID (theo CODE) cac ma co phieu co gia thu i code_id = find(ismember(codes, code_in_date)); % cac gia tuong ung cua co phieu thu i p = data{3}(ids); % dien gia cua i vao cac ma co phieu tuong ung prices(i, code_id) = p; zero_value_id = find(prices(i,:) == 0); prices(i, zero_value_id) = oldprices(zero_value_id); oldprices = prices(i,:); end % correct lai du lieu for i=row-1:-1:1 ids = find(prices(i,:) == 0); prices(i,ids) = prices(i+1,ids); end end from sklearn.decomposition import PCA def draw_vector(v0, v1, ax=None): ax = ax or plt.gca() arrowprops=dict(arrowstyle=’->’, linewidth=2, shrinkA=0, shrinkB=0) ax.annotate(’’, v1, v0, arrowprops=arrowprops) rng = np.random.RandomState(1) X = np.dot(rng.rand(2, 2), rng.randn(2, 200)).T pca = PCA(n_components=2, whiten=True) pca.fit(X) fig, ax = plt.subplots(1, 2, figsize=(16, 6)) fig.subplots_adjust(left=0.0625, right=0.95, wspace=0.1) # plot data ax[0].scatter(X[:, 0], X[:, 1], alpha=0.2) for length, vector in zip(pca.explained_variance_, pca.components_): v = vector * * np.sqrt(length) draw_vector(pca.mean_, pca.mean_ + v, ax=ax[0]) ax[0].axis(’equal’); ax[0].set(xlabel=’x’, ylabel=’y’, title=’input’) # plot principal components X_pca = pca.transform(X) ax[1].scatter(X_pca[:, 0], X_pca[:, 1], alpha=0.2) draw_vector([0, 0], [0, 3], ax=ax[1]) draw_vector([0, 0], [3, 0], ax=ax[1]) ax[1].axis(’equal’) ax[1].set(xlabel=’component 1’, ylabel=’component 2’, title=’principal components’, xlim=(-5, 5), ylim=(-3, 3.1)) fig.savefig(’figures/05.09-PCA-rotation.png’) def plot_pca_components(x, coefficients=None, mean=0, components=None, imshape=(8, 8), n_components=8, fontsize=12, show_mean=True): if coefficients is None: coefficients = x if components is None: components = np.eye(len(coefficients), len(x)) 55 mean = np.zeros_like(x) + mean fig = plt.figure(figsize=(1.2 * (5 + n_components), 1.2 * 2)) g = plt.GridSpec(2, + bool(show_mean) + n_components, hspace=0.3) def show(i, j, x, title=None): ax = fig.add_subplot(g[i, j], xticks=[], yticks=[]) ax.imshow(x.reshape(imshape), interpolation=’nearest’) if title: ax.set_title(title, fontsize=fontsize) show(slice(2), slice(2), x, "True") approx = mean.copy() counter = if show_mean: show(0, 2, np.zeros_like(x) + mean, r’$\mu$’) show(1, 2, approx, r’$1 \cdot \mu$’) counter += for i in range(n_components): approx = approx + coefficients[i] * components[i] show(0, i + counter, components[i], r’$c_{0}$’.format(i + 1)) show(1, i + counter, approx, r"${0:.2f} \cdot c_{1}$".format(coefficients[i], i + 1)) if show_mean or i > 0: plt.gca().text(0, 1.05, ’$+$’, ha=’right’, va=’bottom’, transform=plt.gca().transAxes, fontsize=fontsize) show(slice(2), slice(-2, None), approx, "Approx") return fig from sklearn.datasets import load_digits digits = load_digits() sns.set_style(’white’) fig = plot_pca_components(digits.data[10], show_mean=False) fig.savefig(’figures/05.09-digits-pixel-components.png’) pca = PCA(n_components=8) Xproj = pca.fit_transform(digits.data) sns.set_style(’white’) fig = plot_pca_components(digits.data[10], Xproj[10], pca.mean_, pca.components_) fig.savefig(’figures/05.09-digits-pca-components.png’) File main import import import import import import pandas as pd numpy as np matplotlib.pyplot as plt seaborn as sb random pickle from sklearn.linear_model import LogisticRegression 56 from from from from from from from from from from from from sklearn.neighbors import KNeighborsClassifier sklearn.tree import DecisionTreeClassifier sklearn.naive_bayes import GaussianNB sklearn.svm import SVC sklearn.ensemble import RandomForestClassifier sklearn.ensemble.bagging import BaggingClassifier sklearn.ensemble.gradient_boosting import GradientBoostingClassifier sklearn.ensemble.weight_boosting import AdaBoostClassifier sklearn.model_selection import train_test_split sklearn import model_selection sklearn.model_selection import RepeatedStratifiedKFold sklearn.model_selection import GridSearchCV from keras.models import Sequential from keras.layers import Dense def grid_serarch(grid, model, X_train, y_train): cv = RepeatedStratifiedKFold(n_splits=5, n_repeats=5, random_state=451) grid_search = GridSearchCV(estimator=model, param_grid=grid, n_jobs=-1, cv=cv, scoring=’accuracy’,error_score=0) return grid_search.fit(X_train, y_train) def tuning_logistic(X_train , y_train): model = LogisticRegression() solvers = [’newton-cg’, ’lbfgs’, ’liblinear’] penalty = [’l1’, ’l2’] c_values = [500, 100, 10, 1.0, 0.1, 0.01, 0.001] # define grid search grid = dict(solver=solvers,penalty=penalty,C=c_values) grid_result = grid_serarch(grid, model, X_train ,y_train) # summarize results print("Best score: %f using LogisticRegression %s" % (grid_result.best_score_, grid_result.best_params_)) return grid_result.best_params_ def tuning_knn(X_train , y_train): model = KNeighborsClassifier() n_neighbors = range(1, 100, 2) weights = [’uniform’, ’distance’] metric = [’euclidean’, ’manhattan’, ’minkowski’] # define grid search grid = dict(n_neighbors=n_neighbors,weights=weights,metric=metric) grid_result = grid_serarch(grid, model, X_train ,y_train) # summarize results print("Best score: %f using KNeighborsClassifier %s" % (grid_result.best_score_, grid_result.best_params_)) return grid_result.best_params_ def tuning_svm(X_train , y_train): model = SVC() kernel = [’poly’, ’rbf’, ’sigmoid’] C = [50, 10, 1.0, 0.1, 0.01, 0.01, 0.05, 0.001] gamma = [’scale’, ’auto’] grid = dict(kernel=kernel,C=C,gamma=gamma) grid_result = grid_serarch(grid, model, X_train ,y_train) # summarize results print("Best score: %f using SVM %s" % (grid_result.best_score_, grid_result.best_params_)) return grid_result.best_params_ def tuning_dt(X_train , y_train): 57 model = DecisionTreeClassifier() grid = { ’max_features’: [’log2’, ’sqrt’,’auto’], ’criterion’: [’entropy’, ’gini’], ’max_depth’: [2, 3, 5, 10, 50], ’min_samples_split’: [2, 3, 50, 100], ’min_samples_leaf’: [1, 5, 8, 10] } # define grid search grid_result = grid_serarch(grid, model, X_train ,y_train) # summarize results print("Best score: %f using DecisionTreeClassifier %s" % (grid_result.best_score_, grid_result.best_params_)) return grid_result.best_params_ def tuning_rf(X_train , y_train): model = RandomForestClassifier() n_estimators = [10, 30, 50, 70, 100] max_depth = [2, 3, 4] max_features = [’sqrt’, ’log2’] # define grid search grid = dict(n_estimators=n_estimators,max_features=max_features, max_depth=max_depth) grid_result = grid_serarch(grid, model, X_train ,y_train) # summarize results print("Best score: %f using RandomForestClassifier %s" % (grid_result.best_score_, grid_result.best_params_)) return grid_result.best_params_ def tuning_gd(X_train , y_train): model = GradientBoostingClassifier() n_estimators = [5, 10, 20] learning_rate = [0.001, 0.01, 0.1] subsample = [0.5, 0.7, 1.0] max_depth = [2, 3, 4] # define grid search grid = dict(learning_rate=learning_rate, n_estimators=n_estimators, subsample=subsample, max_depth=max_depth) grid_result = grid_serarch(grid, model, X_train ,y_train) # summarize results print("Best: %f using GradientBoostingClassifier %s" % (grid_result.best_score_, grid_result.best_params_)) return grid_result.best_params_ def compare_model(X, y): models = [] models.append((’LR’, LogisticRegression())) models.append((’KNN’, KNeighborsClassifier())) models.append((’Tree’, DecisionTreeClassifier())) models.append((’NB’, GaussianNB())) models.append((’SVM’, SVC())) models.append((’RF’, RandomForestClassifier())) models.append((’AD’, AdaBoostClassifier())) models.append((’GD’, GradientBoostingClassifier())) models.append((’BG’, BaggingClassifier())) results = [] names = [] scoring = ’accuracy’ for name, model in models: kfold = model_selection.KFold(n_splits=5, random_state=42) cv_results = model_selection.cross_val_score(model, X, y, cv=kfold, scoring=scoring) results.append(cv_results) 58 names.append(name) msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std()) print(msg) # boxplot algorithm comparison fig = plt.figure(figsize=(20,10)) fig.suptitle(’Algorithm Comparison’) ax = fig.add_subplot(111) plt.boxplot(results) ax.set_xticklabels(names) plt.show() def explode_model(X, y, columns = ’all’): path_model = ’Model/’ X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42) param = tuning_logistic(X_train, y_train) model = LogisticRegression(C = param[’C’], penalty = param[’penalty’], solver = param[’solver’]).fit(X_train, y_train) pickle.dump(model, open(path_model + ’logistic.sav’ if columns == ’all’ else path_model + ’logistic_selection.sav’, ’wb’)) print(’Score LogisticRegression Data Test=’, model.score(X_test, y_test)) print(’====================================================================================================== param = tuning_knn(X_train, y_train) model = KNeighborsClassifier(n_neighbors = param[’n_neighbors’], weights = param[’weights’], metric = param[’metric’]).fit(X_train, y_train) pickle.dump(model, open(path_model + ’knn.sav’ if columns == ’all’ else path_model + ’knn_selection.sav’, ’wb’)) print(’Score KNeighborsClassifier Data Test=’, model.score(X_test, y_test)) print(’====================================================================================================== param = tuning_svm(X_train, y_train) model = SVC(C = param[’C’], kernel = param[’kernel’], gamma = param[’gamma’]).fit(X_train, y_train) pickle.dump(model, open(path_model + ’svm.sav’ if columns == ’all’ else path_model + ’svm_selection.sav’, ’wb’)) print(’Score SVM Data Test=’, model.score(X_test, y_test)) print(’====================================================================================================== param = tuning_dt(X_train, y_train) model = DecisionTreeClassifier(max_features = param[’max_features’], criterion = param[’criterion’], max_depth = param[’max_depth’], min_samples_split = param[’min_samples_split’], min_samples_leaf = param[’min_samples_leaf’] ).fit(X_train, y_train) print(’Score DecisionTreeClassifier Test=’, model.score(X_test, y_test)) print(’====================================================================================================== param = tuning_rf(X_train, y_train) model = RandomForestClassifier(n_estimators = param[’n_estimators’], max_depth= param[’max_depth’], max_features = param[’max_features’]).fit(X_train, y_train) pickle.dump(model, open(path_model + ’rf.sav’ if columns == ’all’ else path_model + ’rf_selection.sav’, ’wb’)) print(’Score RandomForestClassifier Data Test=’, model.score(X_test, y_test)) print(’====================================================================================================== param = tuning_gd(X_train, y_train) model = GradientBoostingClassifier(learning_rate = param[’learning_rate’], max_depth = param[’max_depth’], n_estimators = param[’n_estimators’], subsample = param[’subsample’]).fit(X_train, y_train) pickle.dump(model, open(path_model + ’xgb.sav’ if columns == ’all’ else path_model + ’xgb_selection.sav’, ’wb’)) print(’Score GradientBoostingClassifier Data Test=’,model.score(X_test, y_test)) def create_model_mlp(X, y, ip = 43, epochs=20): 59 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=451) # define the keras model model = Sequential() model.add(Dense(128, input_dim=ip, activation=’relu’)) model.add(Dense(64, activation=’relu’)) model.add(Dense(16, activation=’relu’)) model.add(Dense(4, activation=’softmax’)) # compile the keras model model.compile(loss=’categorical_crossentropy’, optimizer=’adam’, metrics=[’accuracy’]) model.fit(X_train, y_train, epochs=25, batch_size=4) score, acc = model.evaluate(X_test, y_test, batch_size=4) print(’Test score:’, score) print(’Test accuracy:’, acc) model_json = model.to_json() path = ’Model/model_mlp’ if ip > 30 else ’Model/model_mlp_select’ with open(path + ".json", "w") as json_file: json_file.write(model_json) # serialize weights to HDF5 model.save_weights(path + ".h5") print("Saved model to disk") 60 ... vi nghiên cứu Nghiên cứu kiến thức đại số tuyến tính liên quan PCA thân phương pháp giảm chiều liệu sử dụng PCA Phạm vi nghiên cứu: Nghiên cứu kiến thức tảng PCA để hiểu chất; Nghiên cứu ứng dụng. .. Chương Một số ứng dụng PCA Chương nghiên cứu, cài đặt số ứng dụng PCA. Nội dung bao gồm 3.1 Khn mặt riêng 3.2 Dị tìm điểm bất thường 3.3 Ứng dụng PCA tài 3.4 Ứng dụng PCA trực quan hóa liệu, khử... 32 CHƯƠNG MỘT SỐ ỨNG DỤNG CỦA PCA Chương trình bày số ứng dụng PCA Ứng dụng PCA việc giảm chiều liệu, giúp việc lưu trữ tính tốn thuận tiện Thực tế cho thấy, nhiều làm việc liệu giảm chiều mang

Ngày đăng: 15/03/2022, 07:27

Từ khóa liên quan

Mục lục

  • Lời cam đoan

  • Lời cảm ơn

  • Danh sách hình vẽ

  • Danh mục ký hiệu, từ viết tắt

  • Mở đầu

  • Tổng quan học máy và bài toán giảm chiều dữ liệu

    • Tổng quan về học máy

    • MỘT SỐ ỨNG DỤNG CỦA PCA

      • Khuôn mặt riêng

      • Dò tìm điểm bất thường

      • Ứng dụng PCA trong tài chính

      • Ứng dụng PCA trong trực quan hóa dữ liệu, khử nhiễu

      • Kết luận chung

      • Tài liệu tham khảo

      • Phụ lục code chương trình

Tài liệu cùng người dùng

Tài liệu liên quan