Demo về các chức năng của MongoDBKịch bản dự kiến demoTrong phần demo này, sử dụng 2 collections Restaurant và Address được xâydựng dựa trên mô hình Referenced Relationship cơ sở dữ liệ
Trang 1MỤC LỤC
CHƯƠNG I: THÍ NGHIỆM MONGODB CƠ BẢN VÀ ỨNG DỤNG 2
I Cơ sở lý thuyết 2
Giới thiệu về MongoDB 2
II Bài thí nghiệm thực hành 2
1 Mục tiêu bài thí nghiệm 2
2 Các tính năng cơ bản của MongoDB 2
3 Demo về các chức năng của MongoDB 4
III Kết quả đạt được và hướng phát triển 6
1 Kết quả đạt được 6
2 Hướng phát triển 6
CHƯƠNG II: MACHINE LEARNING FOR BEGINNERS 6
I Machine learning là gì? 7
II Machine learning trên thực tế 7
III Machine Learning Workflow 10
IV Các bài toán cơ bản trong machine learning 11
1 Phân loại (Classification) 11
2 Hồi quy (Regression) 11
3 Máy dịch (Machine translation) 11
4 Phân cụm (Clustering) 11
5 Hoàn thiện dữ liệu (Data completion) 11
V Phân loại thuật toán Machine Learning 12
1 Học có giám sát (supervised learning) 12
2 Học không giám sát (unsupervised learning) 12
3 Học bán giám sát (semi-supervised learning) 12
4 Học củng cố (reinforcement learning) 12
5 Hàm mất mát và tham số mô hình (model parameter) 12
VI Thí nghiệm Thực hành Machine Learning 13
Bài 1: Xây dựng model cơ bản để giải bài toán dự đoán giá trị 13
Bài 2: Vẽ đồ thị đường 14
VII Kết quả đạt được và hướng phát triển 17
1 Kết quả đạt được 17
2 Hướng phát triển 17
TÀI LIỆU THAM KHẢO 18
Trang 2CHƯƠNG I: THÍ NGHIỆM MONGODB CƠ BẢN VÀ ỨNG DỤNG.
I Cơ sở lý thuyết
Giới thiệu về MongoDB
- MongoDB: MongoDB hay Mongo Database là cơ sở dữ liệu opensource (mã
nguồn mở) dạng NoSQL hỗ trợ nhiều nền tảng lập trình và được thiết kế theo kiểu hướng đối tượng Những bảng dữ liệu trong MongoDB (các Collection) được thiết kế với cấu trúc linh hoạt cho phép dữ liệu được lưu trữ không cần phải tuân theo định dạng cấu trúc nào.MongoDB thuộc CSDL NoSQL dưới
dạng văn bản (document database).
Hình ảnh 1 : Giao diện của phần mềm MongoDB.
- Các thuật ngữ được dùng trong MongoDB:
Bảng 1: Thuật ngữ giữa MongoDB và RDBMS.
II Bài thí nghiệm thực hành
1 Mục tiêu bài thí nghiệm
- Hiểu được định nghĩa về CSDL NoSQL nói chung và MongoDB nói riêng.
- Cài đặt thành công MongoDB và thực hành 1 số câu lệnh Thêm,Xem,Sửa,Xoá cơ bản.
- Cài đặt được MongoDB Compass để sử dụng giao diện MongoDB một cách trực quan.
2 Các tính năng cơ bản của MongoDB
a Chức năng đọc hoặc truy vấn (Find)
Trang 3Để có thể thực hiện câu lệnh đọc hoặc truy vấn thì ta có thể dùng cú pháp:
db.CollectionName.find().
- find : là phương thức hiển thị document dưới dạng không cấu trúc.
Ngoài ra, chúng ta còn có một câu lệnh giúp ta hiển thị document đã được định dạng, để có thể thực hiện điều đó ta có thể dùng cú pháp:
db.CollectionName.find().pretty()
Đọc hoặc truy vấn (Có điều kiện)
Để truy vấn Document dựa trên một số điều kiện nào đó mà những bài toán đặt
ra, ta có thể sử dụng các toán tử so sánh sau:
Bảng 2: Các toán tử so sánh khi muốn truy vấn có điều kiện
Dưới đây là cú pháp để thực hiện một lệnh truy vấn có điều kiện Song, là một ví
dụ cụ thể lẫn ý nghĩa của câu lệnh.
+ Cú pháp: db.CollectionNam.find ({ <key> : { toán_tử: <value> }}) + Ví dụ minh hoạ: db.CollectionName.find ({ key1: { $ne:50 }}).pretty().
=> Ý nghĩa: Ta sẽ lọc ra các bộ sẽ thỏa mãn điều kiện key1 != 50.
b Chức năng thêm hoặc ghi (Insert)
Cú pháp: db.CollectionName.insert (document)
hoặc: db.CollectionName.save (document)
- CollectionName: tên bảng.
- insert và save: 2 phương thức chèn dữ liệu vào.
- document: dữ liệu thêm dưới dạng JSON để có thể thực thi lệnh insert
hoặc save một cách thành công.
Trang 4c Chức năng xoá (Remove)
Cú pháp: db.CollectionName.remove (query,
{
justOne: <boolean>,
writeConcern: <document>,
collation: <document>
})
- remove: phương thức để xoá dữ liệu.
- query: câu truy vấn để chọn lọc dữ liệu.
- justOne: truyền vào true/false True xóa bản ghi và False xóa tất cả khớp
với query.
- writeConcern: một document chứa write concern.
- collation: một document chứa các quy tắc.
Ngoài ra, những thứ như justOne, writeConcern, collation có thể đưa vào hoặc không Khi ta không đưa vào câu lệnh thì chúng sẽ xoá đi tất cả, nhằm tránh điều đó ta đưa vào nhằm mục đích xóa có chọn lọc, để tránh xoá đi những dữ liệu mà ta không mong muốn.
d Chức năng sửa (Update)
Cú pháp: db.CollectionName.update (query, update_data).
hoặc: db.CollectionName.save (query, update_data).
- update: phương thức dùng để cập nhật giá trị đang tồn tại trong
document.
- save: phương thức sẽ thay thế document cũ bằng một document mới.
3 Demo về các chức năng của MongoDB
Kịch bản dự kiến demo
Trong phần demo này, sử dụng 2 collections Restaurant và Address được xây
dựng dựa trên mô hình Referenced Relationship (cơ sở dữ liệu tiêu chuẩn hoá)
và DBRefs để thao tác các chức năng trong MongoDB
Nội dung demo
Nội dung 1: Cài đặt MongoDB trên Ubuntu 20.04 và chạy 1 số lệnh cơ bản
(Thêm, Xem,Sửa,Xóa) trong MongoDB.
Dựa trên 2 collections Restaurant và Address, các chức năng sẽ được demo như sau:
Khởi tạo user có tên QLTT để thực thi những chức năng.Sau khi khởi tạo thành
công, ta thực thi thao tác ghi (Insert) để insert dữ liệu vào những collections
Restaurant,Address.
Trang 5Hình ảnh 2: Tạo user, collections và thêm dữ liệu vào những collections đó.
Tiếp theo, ta thực thi lệnh đọc (Find) để kiểm tra dữ liệu.
Hình ảnh 3 - 4: Đọc dữ liệu từ các Collections.
Kế tiếp, ta dùng lệnh update để thay đổi dữ liệu và lệnh remove để xóa dữ liệu hoặc một bộ.
Hình ảnh 5 - 6: Sửa, xóa dữ liệu của các Collections.
Nội dung 2: Cài đặt MongoDB Compass và chạy 1 số lệnh cơ bản.
Bước 1: Vào trang chủ của MongoDB Compass
Truy cập vào link https://www.mongodb.com/try/download/compass
Bước 2: Download về máy
Trang 6- Sau khi cài đặt MongoDB Compass, tiến hành vào ứng dụng, mặc định MongoDB Compass sẽ chạy cổng 27017.
Hình ảnh 7: Chạy MongoDb Compass.
III Kết quả đạt được và hướng phát triển
1 Kết quả đạt được
- Cài đặt thành công MongoDB và MongoDB Compass.
- Hiểu về các đặc điểm của cơ sở dữ liệu NoSQL và các ưu điểm,nhược điểm.
- Tìm hiểu được cách sử dụng MongoDB ở mức cơ bản.Từ đỏ làm nền tảng tìm hiểu sâu hơn để áp dụng vào các bài toán quản lý trong thực tế.
- Ánh xạ được những kiến thức tương đương từ hệ quản trị SQL Server.
- Đề xuất bài toán quản lý trong thực tế sử dụng MongoDB.
2 Hướng phát triển
MongoDB phù hợp với các hệ thống:
- Hệ thống real-time (thời gian thực) với nhu cầu phản hồi nhanh
- Các hệ thống BigData với nhu cầu truy vấn nhanh
- Các hệ thống có tần suất Write và Insert lơn
- Các hệ thống có nền tảng là Search Engine
=> Từ những kiến thức có được, có thể kết luận hệ quản trị MongoDB có thể áp dụng tốt cho các ứng dụng mạng xã hội.
Trang 7CHƯƠNG II: MACHINE LEARNING FOR BEGINNERS
I Machine learning là gì?
Machine learning (ML) là lĩnh vực nhỏ của khoa học máy tính, nó có khả năng tự học hỏi dựa trên dữ liệu đưa vào mà không cần phải lập trình cụ thể
Với ML, chúng ta cung cấp các câu trả lời (labels) cho dữ liệu đầu vào (data) Dựa
vào đó, chương trình sẽ học và đưa ra cách giải quyết cho bài toán
Ví dụ:
Trong khi chuẩn bị cho các kỳ thi, học sinh không thực sự nhồi nhét các kiến thức mà
cố gắng học nó với sự hiểu biết đầy đủ Chúng cung cấp cho não của mình một lượng
dữ liệu chất lượng cao (câu hỏi và câu trả lời từ các cuốn sách khác nhau hoặc ghi chú của giáo viên…) Trên thực tế, chúng đang huấn luyện bộ não với đầu vào cũng như đầu ra, tức là chúng có cách tiếp cận hoặc logic nào đó để giải quyết các loại câu hỏi khác nhau Chúng làm các bài kiểm tra và tìm ra hiệu suất (độ chính xác / điểm số) bằng cách so sánh các câu trả lời với đáp án được đưa ra, dần dần, hiệu suất không ngừng tăng lên, có được sự tự tin hơn với phương pháp đã áp dụng Đó là cách thực sự
mô hình được tạo ra, đào tạo máy với dữ liệu (cả đầu vào và đầu ra đều được cung cấp cho mô hình) và khi đến thời điểm kiểm tra dữ liệu (chỉ với đầu vào) và đạt được điểm với mô hình của chúng ta bằng cách so sánh câu trả lời của nó với đầu ra thực tế trong khi huấn luyện Các nhà nghiên cứu đang nỗ lực không ngừng để cải thiện các thuật toán, kỹ thuật để các mô hình này hoạt động tốt hơn nhiều
II Machine learning trên thực tế
Áp dụng thuật toán K-means clustering vào bài toán xử lý ảnh thực tế: Phân nhóm
chữ số viết tay.
Bộ cơ sở dữ liệu MNIST
Bộ cơ sở dữ liệu MNIST là bộ cơ sở dữ liệu lớn nhất về chữ số viết tay và được sử
dụng trong hầu hết các thuật toán nhận dạng hình ảnh (Image Classification).
MNIST bao gồm hai tập con: tập dữ liệu huấn luyện (training set) có tổng cộng 60k ví
dụ khác nhau về chữ số viết tay từ 0 đến 9, tập dữ liệu kiểm tra (test set) có 10k ví dụ
khác nhau Tất cả đều đã được gán nhãn
Bài toán phân nhóm giả định
Bài toán: Giả sử rằng chúng ta không biết nhãn của các chữ số này, chúng ta muốn
phân nhóm các bức ảnh gần giống nhau về một nhóm
Trước khi áp dụng thuật toán K-means clustering, chúng ta cần coi mỗi bức ảnh là một
điểm dữ liệu Và vì mỗi điểm dữ liệu là 1 vector (hàng hoặc cột) chúng ta phải làm
thêm một bước đơn giản trung gian gọi là vectorization (vector hóa) Nghĩa là, để có
được 1 vector, ta có thể tách các hàng của ma trận pixel ra, sau đó đặt chúng cạnh nhau, và chúng ta được một vector hàng rất dài biểu diễn 1 bức ảnh chữ số
Làm việc trên Python
Trang 8Trước tiên chúng ta vào trang chủ của MNIST để download bộ cơ sở dữ liệu này Mặc
dù trong bài này chúng ta chỉ dùng bộ dữ liệu test với 10k ảnh và không cần label, ta
vẫn cần download cả hai file t10k-images-idx3-ubyte.gz và t10k-labels-idx1-ubyte.gz vì thư viện python-mnist cần cả hai file này để load dữ liệu từ tập test.
Trước tiên chúng ta cần khai báo một số thư viện:
- numpy: cho các phép toán liên quan đến ma trận
- mnist: để đọc dữ liệu từ MNIST
- matplotlib: để hiển thị hình vẽ
# %reset
import numpy as np
from mnist import MNIST # require ‘pip install python-mnist’
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
Để hiện thị nhiều bức ảnh các chữ số cùng một lúc, ta dùng thêm hàm số
display_network.py.
Thực hiện thuật toán K-means clustering trên toàn bộ 10k chữ số
Trang 9Đến đây, sau khi đã tìm được các center và phân nhóm dữ liệu vào từng cluster, muốn hiển thị xem center trông như thế nào và các bức ảnh được phân vào mỗi cluster có giống nhau hay không Dưới đây là kết quả khi chọn ngẫu nhiên 20 bức ảnh từ mỗi cluster Áp dụng K-means clustering vào tập test set của bộ cơ sở dữ liệu MNIST với
K = 10 cluster
Cột 1: centers của các cluster
Các cột còn lại: Mỗi hàng là 20 điểm dữ liệu ngẫu nhiên được chọn ra từ mỗi cluster
Mỗi hàng tương ứng với một cluster, cột đầu tiên có nền xanh bên trái là centers tìm được của các clusters (màu đỏ hơn là các pixel có giá trị cao hơn) Chúng ta thấy rằng các center đều hoặc là giống với một chữ số nào đó, hoặc là kết hợp của hai/ba chữ số nào đó Ví dụ: center của nhóm thứ 4 là sự kết hợp của các số 4, 7, 9; của hàng thứ 7 là kết hợp của chữ số 7, 8 và 9
Tuy nhiên, các bức ảnh lấy ra ngẫu nhiên từ mỗi nhóm trông không thực sự giống nhau Lý do có thể là những bức ảnh này ở xa các center của mỗi nhóm (mặc dù center
đó đã là gần nhất) Như vậy thuật toán K-means clustering làm việc không thực sự tốt trong trường hợp này
Chúng ta vẫn có thể khai thác một số thông tin hữu ích sau khi thực hiện thuật toán này Bây giờ, thay vì chọn ngẫu nhiên các bức ảnh trong mỗi cluster, tôi chọn 20 bức ảnh gần center của mỗi cluster nhất, vì càng gần center thì độ tin cậy càng cao Hãy xem hình dưới đây:
Trang 10Ta có thể thấy dữ liệu trong mỗi hàng khá giống nhau và giống với center ở cột đầu tiên bên trái Có một vài quan sát thú vị có thể rút ra từ đây:
1 Có hai kiểu viết chữ số 1, một thẳng, một chéo Và K-means clustering nghĩ rằng đó là hai chữ số khác nhau Điều này là dễ hiểu vì K-means clustering là thuật toán Unsupervised learning Nếu có sự can thiệp của con người, chúng ta
có thể nhóm hai clusters này vào làm một
2 Hàng số 9, chữ số 4 và 9 được phân vào cùng 1 cluster Sự thật là hai chữ số này cũng khá giống nhau Điều tương tự xảy ra đối với hàng số 7 với các chữ số
7, 8, 9 được xếp vào 1 cluster Với các cluster này, chúng ta có thể tiếp tục áp dụng K-means clustering để phân nhỏ cluster đó ra
3 Trong clustering có một kỹ thuật thường được sử dụng là Hierarchical clustering (clustering phân tầng ) Có hai loại Hierachical clustering:
- Agglomerative tức “đi từ dưới lên” Ban đầu coi mỗi điểm dữ liệu thuộc 1
cluster khác nhau, sau đó các cặp cluster gần giống nhau được gộp lại làm một cluster lớn hơn Lặp lại quá trình này đến khi nhận được kết quả chấp nhận được
- Divisive tức “đi từ trên xuống” Ban đầu coi tất cả các điểm dữ liệu thuộc
cùng một cluster, sau đó chia nhỏ mỗi cluster bằng một thuật toán clustering nào đó
III Machine Learning Workflow
- Data collection - thu thập dữ liệu: Để máy tính có thể học và đưa ra các dự
đoán, phân tích lập trình viên cần cung cấp một bộ dữ liệu gọi là Dataset cho
máy Thông thường, chúng ta có thể thu thập các dữ liệu này hoặc sử dụng các
Dataset có sẵn trên các nền tảng hỗ trợ học lập trình học máy.
- Cần lưu ý lựa chọn những bộ dữ liệu từ những nguồn chính thống, như vậy máy tính mới có thể học được một cách chính xác và đưa ra những kết quả đúng đắn,
có tỷ lệ hiệu quả cao hơn
- Preprocessing - tiền xử lý: bước này dùng để chuẩn hóa dữ liệu loại bỏ các
thuộc tính không cần thiết, gán nhãn dữ liệu, mã hóa một số đặc trưng, trích xuất, thu gọn dữ liệu nhưng vẫn đảm bảo kết quả
- Bước này chiếm nhiều thời gian nhất tỷ lệ thuận với lượng dữ liệu ta cung cấp Bước 1 và 2 thường chiếm hơn 70% tổng thời gian thực hiện
- Training model - huấn luyện mô hình: bước này là bước huấn luyện mô hình
hoặc để nó học trên dữ liệu đã thu thập và xử lý ở hai bước đầu tiên
- Evaluating model - đánh giá mô hình: sau khi huấn luyện mô hình chúng ta
cần sử dụng các công cụ để đánh giá mô hình Độ chính xác của mô hình trên 80% được coi là tốt
- Improve - Cải thiện: Sau khi đánh giá mô hình, những mô hình có độ chính
Trang 11xác mong muốn Tổng thời gian của 3 bước cuối chiếm khoảng 30% tổng thời gian thực hiện
IV Các bài toán cơ bản trong machine learning
1 Phân loại (Classification)
- Phân loại là một trong những bài toán được nghiên cứu nhiều nhất trong ML Trong bài toán này, chương trình được yêu cầu xác định lớp/nhãn (class/label) của một điểm dữ liệu trong số C nhãn khác nhau Cặp (dữ liệu, nhãn) được ký hiệu là (x, y) với y nhận một trong C giá trị trong tập đích Y Trong bài toán này, việc xây dựng mô hình tương đương với việc đi tìm hàm số f ánh xạ một điểm dữ liệu x vào một phần tử y ∈ Y : y = f(x).
- Ví dụ : Bài toán phân loại email rác Trong bài toán này:
+ Nhiệm vụ: xác một email mới trong hộp thư đến là email rác hay không
+ Phép đánh giá: tỉ lệ email rác tìm thấy email thường được xác định đúng
+ Kinh nghiệm: cặp các (email, nhãn) thu thập được trước đó
2 Hồi quy (Regression)
- Nếu tập đích Y gồm các giá trị thực (có thể vô hạn) thì bài toán được gọi là hồi quy Trong bài toán này, ta cần xây dựng một hàm số f : Rd → R
- Ví dụ: Ước lượng giá của một căn nhà rộng x m2 , có y phòng ngủ và cách trung tâm thành phố z km
3 Máy dịch (Machine translation)
- Trong bài toán máy dịch , chương trình máy tính được yêu cầu dịch một đoạn
văn trong một ngôn ngữ sang một ngôn ngữ khác Dữ liệu huấn luyện là các cặp văn bản song ngữ Các văn bản này có thể chỉ gồm hai ngôn ngữ đang xét hoặc
có thêm các ngôn ngữ trung gian Lời giải cho bài toán này gần đây đã có nhiều
bước phát triển vượt bậc dựa trên các thuật toán deep learning.
4 Phân cụm (Clustering)
- Phân cụm là bài toán chia dữ liệu X thành các cụm nhỏ dựa trên sự liên quan
giữa các dữ liệu trong mỗi cụm Trong bài toán này, dữ liệu huấn luyện không
có nhãn, mô hình tự phân chia dữ liệu thành các cụm khác nhau
- Ví dụ: Phân cụm khách hàng dựa trên hành vi mua hàng Dựa trên việc mua bán
và theo dõi của người dùng trên một trang web thương mại điện tử, mô hình có thể phân người dùng vào các cụm theo sở thích mua hàng Từ đó, mô hình có thể quảng cáo các mặt hàng mà người dùng có thể quan tâm
5 Hoàn thiện dữ liệu (Data completion)
- Một bộ dữ liệu có thể có nhiều đặc trưng nhưng việc thu thập đặc trưng cho từng điểm dữ liệu đôi khi không khả thi Chẳng hạn, một bức ảnh có thể bị