Những dữ liệu, thông tin về các khách sạn trên trang hotels.com đều khá đầy đủ và chính xác.. Bài toán dự đoán tiện nghi khách sạn sẽ lấy dữ liệu trên trang web hotels.com để phân tích,
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
BÁO CÁO BÀI TẬP LỚN MÔN HỌC MÁY
ĐỀ TÀI: Dự đoán tiện nghi khách sạn
Gv hướng dẫn: ThS Ngô Văn Linh
Hà nội, 11 tháng 5, 2019
Sinh viên thực hiện:
1 Đào Duy Hòa - 20151589
2 Vũ Đức Anh Tuấn - 20154153
3 Nguyễn Quốc Thái - 20153353
Trang 2MỤC LỤC
I Mô tả bài toán 3
II Phân tích bài toán 3
1 Yêu cầu bài toán 3
2 Hướng tiếp cận 3
2.1 Cơ sở lý thuyết 4
2.2 Phương pháp Bag-of-Word 7
2.3 Phương pháp TF-IDF 7
III Thực hiện 9
3.1 Lấy dữ liệu trên trang hotels.com 9
3.2 Trích chọn đặc trưng 13
3.3 Áp dụng giải thuật k-NN 14
3.4 Kết quả 14
3.4.1 Ma trận nhầm lẫn của giải thuật KNN 15
3.4.2 Ma trận nhầm lẫn của giải thuật Linear SVC 15
IV Đánh giá 16
Trang 3I Mô tả bài toán
Trang web hotels.com là trang web tổng hợp về dịch vụ khách sạn và là công cụ tìm kiếm để đặt chỗ ở Trên web sẽ có các thông tin về các khách sạn cũng như có xếp hạng về những khách sạn đó Những dữ liệu, thông tin về các khách sạn trên trang hotels.com đều khá đầy đủ và chính xác Bài toán dự đoán tiện nghi khách sạn sẽ lấy dữ liệu trên trang web hotels.com để phân tích, huấn luyện để dự đoán mức độ tiện nghi Các đánh giá sẽ thuộc các mức khác nhau 1-star, 1.5-star, 2-star, 2.5-star, 3-star, 3.5-star, 4-star, 4.5-star, 5-star Để làm giảm số lượng các nhãn cần phân loại nên các mức 1.5, 2.5, 3.5, 4.5 sẽ được đưa về mức 1, 2, 3, 4
II Phân tích bài toán
1 Yêu cầu bài toán
* Lấy dữ liệu trên trang hotels.com về mô tả phòng ốc, các dịch vụ của
khách sạn và xếp hạng của khách sạn
* Trích chọn đặc trưng từ tập dữ liệu lấy được
* Tiến hành huấn luyện tập dữ liệu
* Dự đoán mức độ tiện nghi của khách sạn mới
2 Hướng tiếp cận
Mô hình triển khai bài toán:
framework Dữ liệu gồm mô tả khách sạn, dịch vụ, … và xếp hạng của khách sạn
đó
Trang 4Tập dữ liệu lấy từ trên hotels.com gồm vị trí khách sạn, các mô tả phòng ốc, các dịch vụ Các dữ liệu này đều là dữ liệu dạng văn bản Để trích chọn đặc trưng, lấy những vector đặc trưng từ tập dữ liệu, nhóm em có sử dụng phương pháp Bag-Of-Word, TF-IDF(Term Frequency-Inverse Document Frequency) Những phương pháp này sẽ đưa các từ, các câu, đoạn văn ở dạng văn bản về một vector mà mỗi phần tử là một số
Theo như mô hình triển khai bài toán, phạm vi của bài toán thuộc lớp bài toán học có giám sát (supervised learing) trong học máy Do đó, để dự đoán một lớp chưa biết từ những thuộc tính đã cho dựa vào tập dữ liệu huấn luyện, nhóm em chọn thuật toán K-NN
2.1 Cơ sở lý thuyết
2.1.1 Tổng quan Thuật toán K-Nearest Neighbor
K-nearest neighbor là một trong những thuật toán supervised-learning đơn giản KNN là giải thuật phi tham số áp dụng cho hai loại bài toán là Phân
lớp(Classificaition) và Hồi quy(Regression)
K-NN là phương pháp để phân lớp các đối tượng dựa vào khoảng cách gần nhất giữa đối tượng cần xếp lớp và tất cả các đối tượng trong Training Data
Thuật toán K-NN được mô tả như sau:
1 Xác định giá trị tham số K (số láng giềng gần nhất)
2 Tính khoảng cách giữa đối tượng cần phân lớp (Query Point) với tất cả các đối tượng trong training data (thường sử dụng khoảng các Euclidean)
3 Sắp xếp khoảng cách theo thứ tự tăng dần và xác định K láng giềng gần nhất với Query Point
4 Lấy tất cả các lớp của K láng giềng gần nhất đã xác định
5 Dựa vào phần lớn lớp của láng giềng gần nhất để xác định lớp cho Query Point
Một cách ngắn gọn, K-NN là thuật toán đi tìm đầu ra của một điểm dữ liệu mới bằng cách chỉ dựa trên thông tin của K điểm dữ liệu trong training set gần nó nhất
Trang 5(K-lân cận), không quan tâm đến việc có một vài điểm dữ liệu trong những điểm gần nhất này là nhiễu
Giải thuật K-NN cho bài toán phân lớp
*Mỗi ví dụ học x được biểu diễn bởi 2 thành phần:
- Mô tả của ví dụ: x = (x1, x2, ,xn), trong đó xn ∈ R
- Nhãn lớp: c ∈ C, với C là tập các nhãn lớp được xác định trước
* Giai đoạn học
- Chỉ đơn giản là lưu lại các vector đặc trưng và các lớp nhãn của tập ví dụ học:
D
* Giai đoạn phân lớp: k là hằng số do người dùng chọn, các test point sẽ được phân lớp dựa vào lớp nào chiếm đa số trong k điểm gần với nó nhất Để phân lớp cho một ví dụ z:
- Với mỗi ví dụ học x thuộc D, tính khoảng cách giữa x và z
- Xác định tập NB(z) - các láng giềng gần nhất của z
→ Gồm k ví dụ học trong D gần nhất với z tính theo một hàm khoảng cách d
- Phân z vào lớp chiếm số đông trong số các lớp của các ví dụ trong NB(z)
* Ví dụ :
Trang 6Xét 1 láng giềng gần nhất→Gán z vào lớp c2
Xét 3 láng giềng gần nhất→Gán z vào lớp c1
Xét 5 láng giềng gần nhất→Gán z vào lớp c1
2.1.2 Các vấn đề:
- Hàm khoảng cách: Tùy vào từng bài toán sẽ có cách chọn hàm khoảng cách riêng để phù hợp Khoảng cách thông thường sử dụng cho kiểu dữ liệu liên tục là khoảng cách Euclidean Còn đối với kiểu dữ liệu rời rạc, như là phân loại dữ liệu text, có thể sử dụng khoảng cách Hamming, overlap, …
- Chọn tham số k: Lựa chọn tốt nhất cho tham số k dựa vào dữ liệu đối với từng bài toán Nếu chọn k lớn sẽ giảm độ nhiễu của các điểm dữ liệu trong phân lớp, nhưng phân cách giữa các lớp sẽ không rõ ràng Ngược lại, với k nhỏ sẽ dễ bị ảnh hưởng bởi các điểm dữ liệu nhiễu
Trang 72.2 Phương pháp Bag-of-Word
Bag of word model (BoW) là mô hình được sử dụng trong xử lí ngôn ngữ tự nhiên giúp chúng ta lọc và tìm kiếm các từ quan trọng trong một đoạn văn bản bất
kì, từ đó có thể đưa ra đặc trưng và giá trị của nó trong đoạn văn bản đó
Mỗi từ được tương ứng với 1 chiều trong không gian dữ liệu, mỗi văn bản sẽ trở thành một vector nhiều chiều, mỗi chiều có giá trị không âm Giá trị của mỗi từ được tính bằng tần suất xuất hiện của từ đó trong văn bản
Xét tập n văn bản D = {d1, d2, , dn} và tập T = {t1, t2,
, tn} là tập các từ riêng biệt được trích ra từ tập văn bản D Mỗi văn bản được
biểu diễn thành một vector m chiều:
td = (tf(d, t1), tf(d, t2), tf(d, tm))
trong đó tf(d,ti) là tần suất xuất hiện của ti trong văn bản d
* Các vấn đề của Bag-Of-Word:
- Với bài toán này, từ điền có nhiều hơn 10 từ rất nhiều,, như vậy vector đặc
trưng thu được sẽ rất dài Một văn bản mô tả đều được biểu diễn bằng các vector
có số chiều rất lớn
- Những từ hiếm đôi khi lại mang những thông tin qua trọng nhất mà chỉ loại văn bản đó có Đây là một nhược điểm của BoW Có một phương pháp cải tiến khác giúp khắc phục nhược điểm này có tên là Term Frequency-Inverse Document Frequency (TF-IDF) dùng để xác định tầm quan trọng của một từ trong một văn bản dựa trên toàn bộ văn bản trong cơ sở dữ liệu
2.3 Phương pháp TF-IDF
TF-IDF (Term frequency – inverse document frequency): Giúp thống kê
các từ các đoạn từ trọng đoạn văn bản (hay trong các trường của dữ liệu trong dữ liệu của bài này)
Term frequency (TF) là tần số xuất hiện của một từ Số lần xuất hiện của từ
đó so với số lần của từ xuất hiện nhiều nhất, giá trị trong khoảng từ [0,1]
Công thức tính:
Trang 8
f (t,d): Số lần xuât hiện của từ t trong đoạn d
bản
Inverse document frequency (IDF): Tấn số nghịch của 1 từ trong tập văn
bản Công thức tính:
|D|: Tổng số văn bản trong tập D
|d ∈ D : t ∈ d|: Số văn bản chứa từ nhất định, với điều kiện t xuất
hiện trong văn bản d (tf(t, d) khác 0)
Giá trị IF-TDF = tf(t,d) x idf(t, D)
Những từ xuất hiện nhiều trong vản bản này ( tf(t,d) cao ) và ít trong văn bản khác (idf(t, D) cao ) (những từ có giá trị nhất của văn bản) thì giá trị IF-TDF sẽ cao
Trang 9III Thực hiện
3.1 Lấy dữ liệu trên trang hotels.com
3.1.1 Mô hình cơ bản của một Scrapy project gồm các phần sau:
Scrapy engine:
Chịu tránh nhiệm điều khiển các thành phần khác và kích hoạt sự kiện khi có một hành động cụ thể xảy ra
Scheduler:
Nhận requests từ Scrapy engine và đẩy vào queue và gọi chúng lại khi mà engine cần request chúng
Download:
Download trang web về theo requests nhận được chứa trong Scheduler
Trang 10 Spiders:
Phân tích các thành phần trong trang web được tải về từ phần Download có thể tiếp tục gửi requests cho engine hoặc kết thúc bằng việc lấy được các items
Item pipeline:
Xử lí dữ liệu sau khi đã được Spiders trích xuất ra (như lưu trữ trong cơ sở
dữ liệu hay in ra file)
Luồng dữ liệu trong Scrapy (The data flow)
1 Engine mở một tên miền, chỉ định Spider xử lí tên miền này và hỏi Spider URL
sẽ dùng để lấy dữ liệu
2 Engine lấy URL đầu tiên từ Spider và đặt lịch trình cho chúng tại Scheduler
3 Engine hỏi Scheduler URL tiếp theo để lấy dữ liệu
4 Scheduler trả về URL tiếp theo và Engine sends URL này tới Download
5 Tải trang được trang về qua Download và gửi về Engine
6 Engine nhận dữ liệu tải về và đẩy vào Spider để xử lí
7 Spider xử lí và gửi tài nguyên có được vào Item Pipeline hoặc gửi yêu cầu tiếp tới Engine
8 Tiếp tục lại bước 2 nếu Spider gửi tiếp dữ liệu
3.1.2 Các thông tin về khách sạn chúng ta lấy được trên trang hotels.com gồm
có như sau:
Thông tin cơ bản của khách sạn
Trang 11Các thuộc tính của khách sạn sẽ được lấy từ các phần dưới đây của trang Mỗi một thuộc tính sẽ được liệt kê trong một cột trong excel từ đó sẽ được tính điểm qua TF-IDF để trở thành một chiều trong giải thuật k-NN
Trang 133.2 Trích chọn đặc trưng
Dữ liệu thu về được 4187 khách sạn từ các thành phố lớn trên thế giới như Hà nội, London, New York, Paris, TP HCM, trong đó có:
- 88 khách sạn 1-star
- 993 khách sạn 2-star
- 2209 khách sạn 3-star
- 810 khách sạn 4-star
- 87 khách sạn 5-star
Các cột trong dữ liệu sẽ bao gồm:
- Tên khách sạn
- Địa chỉ
- Số sao
- Số phòng
- Pets and Children
- Tiện nghi
- Các địa điểm nổi tiếng gần đó
Thuộc tính số phòng sẽ được chuẩn hóa về [0,1] bằng cách chia số phòng cho số phòng của khách sạn có số phòng lớn nhất
Các thuộc tính Pets and Children, Tiện nghi, các địa điểm nổi tiếng sẽ được tiền xử
lý và đưa về các vector nhiều chiều nhờ phương pháp TF-IDF và Bag of words Tiền xử lý:
- Các từ được đưa về dạng chữ thường
- Các từ phủ định như not sẽ được nối liền với từ tiếp theo nó: ví dụ Pets not
allowed sẽ được chuyển thành pets not_allowed
- Loại bỏ các ký tự không mong muốn như * , (, ), -,
- Các giá trị trong cột các địa điểm nổi tiếng sẽ được nối liền lại
Ví dụ: Lotte Center Hanoi => lotte_center_hanoi (các giá trị khoảng cách bị xóa đi)
Trang 143.3 Áp dụng giải thuật k-NN
Việc chọn k cho bài toán phân lớp của k-NN cũng là một vấn đề quan trọng
Sử dụng phương pháp Cross Validation chia tập dữ liệu thành 5 phần bằng nhau, không giao nhau Trong đó 4 phần data để training và 1 phần để test
Với tập dữ liệu n = 4186 bản ghi, căn bậc 2 của n là 65, ta tiến hành tìm k mà tại
đó hàm đạt cực đại
Nhận thấy với k = 31 thì hàm có cực đại với độ chính xác là 0.68
3.4 Kết quả
Kết quả đánh giá trên k vừa tìm được k=31
Trang 153.4.1 Ma trận nhầm lẫn của giải thuật KNN
3.4.2 Ma trận nhầm lẫn của giải thuật Linear SVC
Ngoài ra, nhóm em có cài đặt thử thêm thuật toán Linear SVC để so sánh kết quả với thuật toán K-NN
Trang 16Độ chính xác của thuật toán Linear SVC là 0.61
IV Đánh giá
Ưu điểm:
- Chi phí thấp cho quá trình huấn luyện (chỉ việc lưu lại các ví dụ học)
- Hoạt động tốt với các bài toán phân loại gồm nhiều lớp → Không cần phải học
c bộ phân loại cho c lớp
- Về mặt lý thuyết thì k-NN có thể đạt khả năng phán đoán tối ưu khi gặp một số điều kiện
- Rất Linh động trong việc chọn hàm khoảng cách
→ Có thể dùng độ tương tự (similarity): cosine
Trang 17→ Có thể dùng độ đo khác, chẳng hạn Kullback-Leibler divergence, Bregman divergence, …
Nhược điểm: Trong quá trình k-NN hoạt động, nó phải tính toán "khoảng cách" từ
dữ liệu cần xác định loại đến tất cả các dữ liệu trong tập huấn luyện (training set)
==> nếu tập huấn luyện quá lớn, điều đó sẽ làm cho thời gian chạy của chương trình sẽ rất lâu Ngoài ra, việc lưu toàn bộ dữ liệu trong bộ nhớ cũng ảnh hưởng tới hiệu năng của K-NN
Trang 18TÀI LIỆU THAM KHẢO
1 https://machinelearningcoban.com/
2 Các thư viện sử dụng: sklearn.neighbors.KneighborsClassifier
3 https://docs.scrapy.org/en/latest/