1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÁO CÁO CUỐI KÌ XÂY DỰNG MÔ HÌNH PHÂN LỚP VỚI THUẬT TOÁN NAIVE BAYES

26 5 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 26
Dung lượng 523,95 KB

Nội dung

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC NGUYỄN TẤT THÀNH KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO CUỐI KÌ XÂY DỰNG MƠ HÌNH PHÂN LỚP VỚI THUẬT TỐN NAIVE BAYES Giảng viên hướng dẫn: Ths BÙI TIẾN ĐỨC Sinh viên thực hiện: TRẦN CAO MINH MSSV: 2000004265 Chuyên ngành: TRÍ TUỆ NHÂN TẠO Mơn học: LẬP TRÌNH TRÍ TUỆ NHÂN TẠO Khóa: 2021-2022 Tp.HCM, tháng 09 năm 2022 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC NGUYỄN TẤT THÀNH KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO CUỐI KÌ XÂY DỰNG MƠ HÌNH PHÂN LỚP VỚI THUẬT TỐN NAIVE BAYES Giảng viên hướng dẫn: Ths BÙI TIẾN ĐỨC Sinh viên thực hiện: TRẦN CAO MINH MSSV: 2000004265 Chuyên ngành: TRÍ TUỆ NHÂN TẠO Mơn học: LẬP TRÌNH TRÍ TUỆ NHÂN TẠO Khóa: 2021-2022 Tp.HCM, tháng 09 năm 2022 Lời cảm ơn Lời đầu tiên, em chân thành gửi lời cảm ơn tới thầy BÙI TIẾN ĐỨC giúp đỡ em lớp suốt môn học Trong q trình học tập tìm hiểu mơn “LẬP TRÌNH TRÍ TUỆ NHÂN TẠO”, thầy tận tuỵ hỗ trợ nhiệt tình cho em, lớp Thầy giúp em tích luỹ thêm nhiều kiến thức để hồn thiện ước mơ cơng nghệ thơng tin Thơng qua báo cáo kì này, em muốn thể tổng quan tất kiến thức thầy truyền đạt cho em đến thời điểm Trong thời gian thực đồ án cuối kì mơn học để có kết nộp thầy không tránh thiếu sót, em mong thầy xem xét đưa nhận xét, góp ý chân thành để đồ án hồn thiện Kính chúc thầy nhiều sức khoẻ, thành công đường truyền đạt tri thức Em cảm ơn thầy! Lời mở đầu Trước hết xin nói chữ 'trí tuệ nhân tạo', vốn dùng rộng rãi cộng đồng Công nghệ thông tin Trí tuệ nhân tạo, tiếng Anh Artificial Intelligence hay chữ viết tắt dùng phổ biến AI, hiểu bình dân 'thơng minh nhân tạo', tức thơng minh máy móc người tạo ra, đặc biệt tạo cho máy tính, robot, hay máy móc có thành phần tính tốn điện tử Trí tuệ nhân tạo lĩnh vực khoa học công nghệ nhằm làm cho máy có khả trí tuệ trí thơng minh người, tiêu biểu biết suy nghĩ lập luận để giải vấn đề, biết giao tiếp hiểu ngơn ngữ tiếng nói, biết học tự thích nghi, dựa mơ hình máy học (Machine Learning) khai phá liệu (Data Mining) Tập liệu (Dataset) cung cấp 'nhiên liệu' cho mơ hình AI giống xăng điện cho ô tô Cho dù nhiệm vụ chúng tạo văn bản, nhận dạng đối tượng hay dự đốn giá cổ phiếu cơng ty, hệ thống AI 'học' cách chọn lọc qua vơ số ví dụ để phân biệt mẫu liệu Ví dụ, hệ thống thị giác máy tính (computer vision) đào tạo để nhận số vật thể 'học' trước đó, Dữ liệu kho tàng tài nguyên khổng lồ doanh nghiệp Bởi có q nhiều liệu khơng xếp phân nhóm dễ bị mất, tốn nhiều thời gian cho việc tìm kiếm hay thực mã hóa Encryption việc sử dụng sau Bên cạnh đó, việc thực phân loại liệu giúp doanh nghiệp dễ dàng quản lý liệu tránh việc thất Từ tiết kiệm chi phí cho giải pháp Data Loss Prevention tương lai Sau lợi ích việc phân loại liệu đem lại: - Xác định loại data có giá trị tổ chức, doanh nghiệp - Việc phân loại rõ ràng cụ thể liệu giúp cho việc lựa chọn giải pháp bảo vệ liệu nhanh chóng phù hợp - Dữ liệu phân loại rõ ràng giúp doanh nghiệp, tổ chức dựa vào để thiết lập hệ thống phân quyền truy cập cho cá nhân, từ tạo hiểu việc sử dụng liệu - Việc tiến hành phân loại thể chuyên nghiệp tổ chức Doanh nghiệp việc bảo vệ tài nguyên liệu có giá trị khách hàng doanh nghiệp Ta áp dụng Định lý Bayes cho phép tính xác suất xảy kiện ngẫu nhiên A biết kiện liên quan B xảy Xác suất ký hiệu P(A|B), đọc “xác suất A có B” Đại lượng gọi xác suất có điều kiện hay xác suất hậu nghiệm rút từ giá trị cho B phụ thuộc vào giá trị - Dựa định lý Bayes + Phân loại Naïve Bayesian  Giả định: độc lập có điều kiện lớp (class conditional independence) + Phân loại Bayesian belief networks - Phương pháp phân loại dựa xác suất Nạve Bayes tính xác suất cho yếu tố, sau chọn kết với xác suất cao Tuy nhiên, ta cần lưu ý giả định thuật toán Naive Bayes yếu tố đầu vào cho độc lập với PHẦN NHẬN XÉT + CHẤM ĐIỂM CỦA GIẢNG VIÊN Điểm giáo viên hướng dẫn: Điểm giảng viên chấm vòng 2: TPHCM, Ngày …… tháng …… năm Giáo viên chấm vòng Giáo viên hướng dẫn MỤC LỤC Lời cảm ơn i Lời mở đầu ii PHẦN NHẬN XÉT + CHẤM ĐIỂM CỦA GIẢNG VIÊN iv MỤC LỤC v DANH MỤC HÌNH vii Chương Giới thiệu đề tài .1 1.1 Lý chọn đề tài 1.2 Mô tả hướng xây dựng đề tài .1 1.3 Môi trường cài đặt Chương Lý thuyết 2.1 Định lý Bayes 2.1.1 Giải thích kí hiệu công thức Bayes 2.2 Phân lớp Naïve Bayes 2.2.1 Cách để xây dựng mơ hình phân lớp Naïve Bayes 2.2.2 Tập liệu mẫu 2.2.3 Tính phân lớp mẫu A Chương Xây dựng thuật toán phân lớp .7 3.1 Quy trình khai phá tri thức 3.1.1 Phân tích mơ hình 3.1.2 Giải thích mơ hình Chương Dựa Trên Naïve Bayes Xây Dựng Mơ Hình Machine Learning Bằng Ngơn Ngữ Python 10 4.1 Các thư viện cần thiết 10 4.1.1 Thư viện Pandas 10 4.1.2 Thư viện Scikit-learn .10 4.2 Tiến hành viết lệnh 10 4.3 Các bước để chạy mơ hình Machine Learning Google Colaboratory 13 Kết luận 16 Hướng phát triển tương lai 16 Tài liệu kham khảo 17 DANH MỤC HÌNH Hình Bảng liệu giả lập Hình Quy trình khai phá tri thức .7 Hình Trực quan bảng liệu sau chuyển thành số nguyên 11 Hình Kết mà máy học dựa bảng liệu giả lập mà ta áp vào 13 Hình Khởi chạy bước 13 Hình Khởi chạy bước 14 Hình Khởi chạy bước 14 Hình Khởi chạy bước 14 Hình Khởi chạy bước 15 Hình 10 Xem kết đánh giá độ xác model máy học 15 Chương Giới thiệu đề tài 1.1 Lý chọn đề tài Naïve Bayes Classification (NBC) thuật toán dựa định lý Bayes lý thuyết xác suất để đưa dự đoán phân loại liệu dựa liệu quan sát thống kê Nạve Bayes Classification thuật tốn ứng dụng nhiều lĩnh vực Machine learning dùng để đưa dự đoán dựa tập liệu thu thập, độ phúc tạp thuật tốn thấp, thời gian huấn luyện mơ hình nhỏ, phù hợp với mơ hình liệu vừa phải Nó thuộc vào nhóm Supervised Machine Learning Algorithms (học có giám sát) dễ hiểu độ xác tương đối cao 1.2 Mơ tả hướng xây dựng đề tài Sử dụng định lý Naïve Bayes để phân lớp gán nhãn cho liệu từ liệu cho trước, bỏ qua vấn đề tiền xử lý liệu - Ta tách dòng từ bảng liệu thành hai phần: + Train: Dùng máy học + Test: Dùng để kiểm tra lại kết máy học -  Tức máy học từ ví dụ từ mẫu liệu có sau đánh giá lại sai số mơ hình - Tiến hành viết lệnh ngôn ngữ Python thực thi môi trường Google Colaboratory 1.3 Môi trường cài đặt Môi trường: - Ngôn ngữ: Python Sản phẩm viết thực thi Google Colaboratory Bộ liệu lưu trữ GitHub Chương Lý thuyết 2.1 Định lý Bayes Định lý Bayes cho phép tính xác suất xảy kiện ngẫu nhiên A khi biết kiện liên quan B đã xảy Xác suất ký hiệu là P(A|B), đọc "xác suất của A nếu có B" Đại lượng gọi là xác suất có điều kiện hay xác suất hậu nghiệm vì rút từ giá trị cho của B hoặc phụ thuộc vào giá trị - Theo định lý Bayes, xác suất xảy ra A khi biết B sẽ phụ thuộc vào yếu tố: + Xác suất xảy A riêng nó, khơng quan tâm đến B Ký hiệu P(A) đọc xác suất A Đây gọi xác suất biên duyên hay xác suất tiên nghiệm, "tiên nghiệm" theo nghĩa khơng quan tâm đến thơng tin B + Xác suất xảy B riêng nó, khơng quan tâm đến A Ký hiệu P(B) đọc "xác suất B" Đại lượng cịn gọi số chuẩn hóa (normalising constant), ln giống nhau, khơng phụ thuộc vào kiện A muốn biết + Xác suất xảy B biết A xảy Ký hiệu P(B|A) đọc "xác suất B có A" Đại lượng gọi khả (likelihood) xảy B biết A xảy Chú ý không nhầm lẫn khả xảy B biết A xác suất xảy A biết B Khi biết ba đại lượng này, xác suất A biết B cho công thức: P( A∨B)= P(B∨A)∗P( A) P(B) 2.1.1 Giải thích kí hiệu cơng thức Bayes Từ cơng thức Bayes ta có :  A: Một mẫu (đối tượng), thuộc phân lớp B  B: Phân lớp (ví dụ phân lớp Yes - No, Có – Khơng, – 1,…)  P(A): Xác suất giả thuyết C (khi chưa có chứng cứ)  P(B): Xác suất quan sát chứng B  P(A | B) : Xác suất giả thuyết A có chứng B  P(B | A): Xác suất nhìn thấy chứng B biết giả thuyết A 2.2 Phân lớp Naïve Bayes Dựa Định lý Bayes, đưa giả thiết “ngây thơ” thuộc tính độc lập với Với giả thuyết thuộc tính hoàn toàn độc lập với nhau, thực tế thuộc tính khơng độc lập với Ví dụ: Trời nắng ảnh hưởng tới nhiệt độ Tuổi cao ảnh hưởng đến khả ghi nhớ học,… 2.2.1 Cách để xây dựng mơ hình phân lớp Nạve Bayes Mẫu số P(B) khơng phụ thuộc vào liệu đầu vào lớp A → Không thiết phải tính để phân lớp Với P(A | B), P(A) P(B) tính từ tập liệu → Phân lớp mẫu B cho P(A | B) lớn 2.2.2 Tập liệu mẫu - Cho tập liệu mẫu có cột + Cột ‘CongTy’ mô tả công ty làm việc: nhận giá trị + Cột ‘CongViec’ mơ tả vị trí làm việc cơng ty đó: nhận giá trị + Cột ‘BangCap’ mô tả cấp làm việc cơng ty đó: nhận giá trị + Cột ‘LuongTren_20Trieu’ mơ tả mức cơng ty đó: nhận giá trị Hình Bảng liệu giả lập 2.2.3 Tính phân lớp mẫu A Cho phân lớp giả lập mẫu A=(CongTy = FPT_sof, CongViec = Banhang, BangCap=Thacsi) - Lúc ta cần tính:  P(Luong20Trieu = Co) * P( A | Luong20Trieu = Co) = P(Luong20Trieu = Co) * P(CongTy = FPT_sof | Luong20Trieu = Co) * P(CongViec = Banhang | Luong20Trieu = Co) * P(BangCap=Thacsi | Luong20Trieu = Co)  P(Luong20Trieu = Khong) * P( A | Luong20Trieu = Khong) = P(Luong20Trieu = Khong) * P(CongTy = FPT_sof | Luong20Trieu = Khong) * P(CongViec = Banhang | Luong20Trieu = Khong) * P(BangCap=Thacsi | LuongT20Trieu = Khong) - Sau quan sát bảng liệu giả lập ta thu 23 dòng liệu:  P(Luong20Trieu = Co) = 14/23  P(Luong20Trieu = Khong) = 9/23  P(CongTy = FPT_sof | Luong20Trieu = Co) = 4/14  P(CongTy = FPT_sof | Luong20Trieu = Khong) = 2/9  P(CongViec = Banhang | Luong20Trieu = Co) = 3/14  P(CongViec = Banhang | Luong20Trieu = Khong) = 3/9  P(BangCap=Thacsi | LuongT20Trieu = Co) = 11/14  P(BangCap=Thacsi | Luong20Trieu = Khong) = 2/9 - Tính tốn phân lớp dựa vào định lý Nạve Bayes P(Luong20Trieu = Co) * P(A | Luong20Trieu = Co) = (14/23) * (4/14) * (3/14) * (11/14) = 0.0292 P(Luong20Trieu = Khong) * P(A | Luong20Trieu = Khong) =(9/23) * (2/9) * (3/9) * (2/9) = 0.0064 ⟹ Vậy kết luận mẫu A thuộc phân lớp Luong20Trieu = Co Chương Xây dựng thuật tốn phân lớp 3.1 Quy trình khai phá tri thức - Quá trình xử lý liệu thô/gốc (raw/original data) nhằm cải thiện chất lượng liệu (quality of the data) cải thiện chất lượng kết khai phá - Chất lượng liệu (data quality): tính xác, tính hành, tính tồn vẹn, tính qn Hình Quy trình khai phá tri thức 3.1.1 Phân tích mơ hình - Làm liệu (data cleaning/cleansing): loại bỏ nhiễu (Remove noise), hiệu chỉnh phần liệu không quán (Correct data inconsistencies) - Tích hợp liệu (Data integration): từ nhiều nguồnkhác vào kho liệu - Biến đổi liệu (Data transformation): chuẩn hoá liệu (Data normalization) - Thu giảm liệu (Data reduction): + Thu giảm kích thước liệu (nghĩa giảm số phần tử) kết hợp liệu (Data Aggregation), gom cụm liệu + loại bỏ đặc điểm dư thừa (redundant features) giảm số chiều/thuộc tính liệu 3.1.2 Giải thích mơ hình - Làm liệu: + Xử lý liệu bị thiếu (Missing data)  Nguyên nhân: không tồn lúc nhập liệu, cố,… Giải pháp: Bỏ qua dịng liệu đó, cập nhật tay, dùng giá trị  thay (tự động): số tồn cục, trị phổ biến, trung bình (tồn cục, cục bộ), trị dự đoán,… Ngăn chặn từ ban đầu: thiết kế tốt CSDL thủ tục nhập liệu (các ràng buộc liệu) + Nhận diện phần tử biên (Outliers) giảm thiểu nhiễu (Noisy data)  Nguyên nhân: (công cụ thu thập liệu, lỗi đường truyền, giới hạn công nghệ,  Giải pháp: Dựa phân bố thống kê, Dựa mật độ, Hồi quy, Phân tích cụm,… + Xử lý liệu khơng qn (Inconsistent data)  Nguyên nhân: Không quán qui ước đặt tên hay mã hóa, Định dạng khơng quán vùng nhập liệu, Thiết bị ghi nhận liệu, …  Giải pháp: Tận dụng siêu liệu, ràng buộc liệu, kiểm tra nhà phân tích liệu cho việc nhận diện, Điều chỉnh liệu khơng qn tay,… - Tích hợp liệu: + Quá trình tập hợp liệu từ nguồn khác vào kho liệu sẵn sàng cho trình Khai Phá Dữ Liệu + Vấn đề nhận dạng thực thể (Entity identification problem)  Tích hợp lược đồ (Schema integration)  So trùng đối tượng (Object matching) + Vấn đề dư thừa (Redundancy) + Vấn đề mâu thuẫn giá trị liệu (Data value conflicts) - Biến đổi liệu + Làm trơn liệu (Smoothing) + Kết hợp liệu (Aggregation) + Tổng quát hoá (Generalization) + Chuẩn hoá (Normalization) + Xây dựng thuộc tính/đặc tính (Attribute/Feature construction) - Thu giảm liệu + Các chiến lược thu giảm  Kết hợp khối liệu (Data cube aggregation)  Chọn số thuộc tính (Attribute subset selection)  Thu giảm chiều (Dimensionality reduction)  Thu giảm lượng (Numerosity reduction)  Rời rạc hóa (Discretization)  Tạo phân cấp ý niệm (concept hierarchy generation) Chương Dựa Trên Nạve Bayes Xây Dựng Mơ Hình Machine Learning Bằng Ngôn Ngữ Python - Giả thuyết liệu ta có liệu chuẩn, khơng cần phải xử lý lại - Giả sử tên cột giá trị bảng liệu thật xử lý 4.1 Các thư viện cần thiết 4.1.1 Thư viện Pandas Là thư viện Python cung cấp cấu trúc liệu nhanh, mạnh mẽ, linh hoạt mang hàm ý Tên thư viện bắt nguồn từ panel data (bảng liệu) Pandas thiết kế để làm việc dễ dàng trực quan với liệu có cấu trúc (dạng bảng, đa chiều, có tiềm khơng đồng nhất) liệu chuỗi thời gian 4.1.2 Thư viện Scikit-learn Sklearn thiết kế để xử lý thư viện số khoa học Python NumPy SciPy Các tính thư viện Scikit-learning bao gồm thuật tốn phân loại, hồi quy phân cụm (hỗ trợ máy vectơ, rừng ngẫu nhiên, tăng độ dốc, k-means DBSCAN) 4.2 Tiến hành viết lệnh - Đầu tiên ta gọi thư viện đọc file csv # Bước 1: Khởi tạo thư viện và đọc file data CSV # Gọi thư viện import pandas as pd from sklearn.preprocessing import LabelEncoder # Load file dữ liệu .csv url='https://raw.githubusercontent.com/CaoMinhh/file-dulieu-tieuduong/main/DataTest.csv' df = pd.read_csv(url) - Sau ta đặt biến phụ thuộc (x) biến độc lập (y) # lấy tất cả các cột để làm biến độc lập trừ cột LuongTren_20Trieu inputs = df.drop('LuongTren_20Trieu', axis='columns')  # Lấy cột LuongTren_20Trieu để làm biến phụ thuộc targets = df['LuongTren_20Trieu'] - Do liệu từ file csv kiểu chuỗi nên ta tiến hành dùng hàm LabelEncoder() từ thư viện sklearn để chúng thành số ngun để máy tính hiểu # Bước 2: Conver dữ liệu text sang number # chuyển các giá trị trong data từ dữ liệu text sang number (do máy tính chỉ xử lý được data có giá trị là số) le_Congty = LabelEncoder() le_Congviec = LabelEncoder() le_Bangcap = LabelEncoder() inputs['Cơng ty'] = le_Congty.fit_transform(inputs['CongTy']) inputs['Cơng việc'] = le_Congviec.fit_transform(inputs['CongViec']) inputs['Bằng cấp'] = le_Bangcap.fit_transform(inputs['BangCap']) - Lúc bảng liệu gốc ta có thêm cột giá trị vừa chuyển đổi thành số Hình Trực quan bảng liệu sau chuyển thành số nguyên - Ta tiến hành xoá bỏ cột có giá trị kiểu chuỗi drop() inputs_n = inputs.drop(['CongTy', 'CongViec', 'BangCap',],axis='columns') print(inputs_n) - Lúc ta tách bảng liệu thành phần train test - Ta lấy 70% bảng liệu máy học dùng 30% lại để kiểm tra độ xác # Bước 3: Tạo model từ cây phân loại là đưa nó vào máy học # Tạo model và đưa nó vào máy học from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(inputs_n,targets,test_size=0.3) from sklearn.naive_bayes import GaussianNB # Đại diện cho Gaussian Naive Bayes model = GaussianNB() # Đưa dữ liệu vào model máy học dựa trên Naive Bayes  model.fit(X_train,y_train) - Dùng model.core để đánh giá lại mơ hình xác phần trăm # Bước 4: Đánh giá mơ hình máy học # Đánh giá độ chính xác của mơ hình doChinhXac = model.score(X_test,y_test) # Đếm số dịng dùng để học và kiểm tra sizeHocMay = (round(len(X_train) / len(inputs) , 2)) sizeKiemTra = (round(len(X_test) / len(inputs) , 2)) - Sau ta tiến hành in kết thu sau chạy model # Bước 5: Xuất kết quả print(f'Từ tập dữ liệu có {len(inputs)} dịng ta lấy ra {sizeHocMay*100}% cho máy học và dùng {sizeKiemT ra*100}% để kiểm tra') print(f'Số dịng máy học: {len(X_train)} \nSố dịng kiểm tra: {len(X_test)} \n') print(f'Kết quả máy dự đốn ra: \n{y_test[0:5]} \n') print(f'Kết quả thực tế: \n{model.predict(X_test[0:5])}') print(f'Độ chính xác của model máy học: {doChinhXac*100}% \n') - Ví dụ ta khởi chạy, model trả kết mà máy học dựa bảng liệu giả lập mà ta áp vào: Hình Kết mà máy học dựa bảng liệu giả lập mà ta áp vào 4.3 Các bước để chạy mơ hình Machine Learning Google Colaboratory - Truy cập vào địa mã nguồn 4.1 sau tiến hành bước sau: Bước 1: Khởi tạo thư viện đọc file data CSV Hình Khởi chạy bước Bước 2: Conver liệu text sang number Hình Khởi chạy bước Bước 3: Tạo model từ phân loại đưa vào máy học Hình Khởi chạy bước Bước 4: Đánh giá mơ hình máy học Hình Khởi chạy bước Bước 5: Xuất kết Hình Khởi chạy bước Bước 6: Xem kết đánh giá độ xác model máy học Hình 10 Xem kết đánh giá độ xác model máy học Kết luận - Kết thúc khóa học hiểu quy trình khai phá tri thức lĩnh vực AI nói chung Machine Learning Deep Learning nói riêng - Biết cách áp dụng toán học vào AI để khai phá tri thức từ liệu - Biết cách tổ chức liệu trình khai phá tri thức - Biết áp dụng cơng cụ tốn học để huấn luyện cho máy học - Có thể áp dụng thư viện hỗ trợ mạnh mẽ tốn học ngơn ngữ lập trình Python Hướng phát triển tương lai - Xây dựng thêm giao diện cho người dùng tương tác - Điều chỉnh tham số truyền vào - Giảm sai số mơ hình Tài liệu kham khảo Mã nguồn source code: https://drive.google.com/drive/folders/1N_8N_0Evv84rFi6GOBD0DDOSDL slBJDf?usp=sharing Mã nguồn liệu giả lập : https://drive.google.com/file/d/1WQ1U1oBloVbKrKAwd1W6FScww6j4hek/view?usp=sharing Thực thi sản phẩm Google Colab : https://colab.research.google.com/drive/1h96ocsY1AYT6B4ynhqMba79ULPen9qS?authuser=3

Ngày đăng: 01/09/2022, 20:21

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w