Ứng dụng của thuật toán này thường được sử dụng rất nhiều vàrộng rãi trong những bài toán phân lớp Hình 1: Mối quan hệ giữa AI, machine learning và deep learning Nội dung chính: Giới
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
Khoa Vật lý
Tiểu Luận Khoa Học
Phát triển các dự án máy học dựa trên các thư viện
Trang 2Lời cảm ơn
Trong quá trình nghiên cứu và hoàn thành tiểu luận, em đã nhận được sự định hướng, giúp đỡ, các ý kiến đóng góp quý báu và
những lời động viên của các thầy cô giáo, gia đình và bạn bè
Trước hết, em xin bày tỏ lời cảm ơn tới quý Thầy, Cô đang giảng dạy tại Trường Đại học Khoa học Tự nhiên nói chung và khoa Vật
lý nói riêng Thầy, Cô không chỉ là những người truyền thụ kiến thức đơn thuần, mà còn là những người tiếp lửa đam mê, truyền cảmhứng mãnh liệt cho chúng em trên con đường học tập và nghiên cứukhoa học Công ơn này chúng em sẽ mãi luôn khắc ghi và thực hiện thật tốt
Đặc biệt, em xin gửi lời cảm ơn sâu sắc nhất tới thầy T.S Nguyễn Tiến Cường đã tận tình hướng dẫn và giúp đỡ em trong quá trình nghiên cứu và thực hiện bài báo cáo này Thầy không chỉ dạy em những kiến thức không chỉ về chuyên ngành, về môn học, mà còn hướng dẫn, chỉ bảo về cách sống, tác phong làm việc, Những điều thầy đã dạy quả thật rất bổ ích và em tin chắc rằng nó sẽ giúp em rấtnhiều trong cuộc sống sau này
Trong quá trình học tập cũng như thực hiện bài báo cáo, khó tránhkhỏi những sai sót không đáng có, rất mong quý Thầy, Cô thông cảm và bỏ qua Ngoài ra bài báo cáo còn nhiều chỗ thiếu sót, em rất mong nhận được những ý kiến đóng góp của quý Thầy, Cô để giúp
em có thể hoàn thiện và chuẩn bị tốt hơn cho những bài báo cáo tiếptheo
Em xin chân thành cảm ơn!
2
Tieu luan
Trang 3Mở đầu
AI (trí tuệ nhân tạo) và cụ thể hơn là machine learning ngày càng nổi lên trong thế giới công nghệ ngày nay AI đã có mặt trong mọi lĩnh vực của cuộc sống như xe tự lái của tesla, hệ thống gợi ý sản phẩm của Amazon hay máy chơi cờ vây Aphago của google deep mind
Một trong những thuật toán thường dùng trong machine learning là lân cận Ứng dụng của thuật toán này thường được sử dụng rất nhiều vàrộng rãi trong những bài toán phân lớp
Hình 1: Mối quan hệ giữa AI, machine learning và deep learning
Nội dung chính:
Giới thiệu về machine learning
Thuật toán K-lân cận
Trang 4Mục lục
Lời cảm ơn .2
Mở đầu .3
Danh sách hình ảnh 5
1 Giới thiệu về machine learning .6
1.1 Khái niệm .6
1.2 Hàm mất mát và tham số mô hình .6
1.3 Mô hình chung trong các bài toán machine learning .7
1.4 Bài toán phân lớp dữ liệu .8
2 Thuật toán K-lân cận .9
2.1 Định nghĩa .9
2.2 Quy trình làm việc .9
2.3 Ví dụ minh họa KNN nhiễu .10
3 Cơ sở toán học 11
3.1 Khoảng cách giữa hai vector .11
3.2 Khoảng cách được định nghĩa như thế nào? 11
3.3 Cần phải tính toán khoảng cách thế nào cho hiệu quả 12
4 Phương pháp thử nghiệm và kết quả .13
4.1 Giới thiệu về ngôn ngữ python và thư viện Scikit learn 13
4.2 Bộ dữ liệu hoa Iris .14
4.3 Sử dụng KNN để thử nghiệm với bộ dữ liệu hoa Iris 15
4.3.1 Mô hình bài toán 15
4.3.2 Thiết kế chương trình 16
4.3.2a Lập trình .17
4.3.2b Bầu chọn đa số 18
4.3.2c Đánh trọng số cho các điểm lân cận .19
4.3.2d Trọng số tự định nghĩa 20
5 Kết luận và mở rộng 21
5.1 Mở rộng 21
5.2 Kết luận 22
6 Tài liệu tham khảo 23
Phụ lục .24
4
Tieu luan
Trang 5Danh mục hình ảnh
machine learning và deep learning
machine learning
nhiễu với K=1
trong không gian 2 chiều
data
5
Tieu luan
Trang 6Chương 1: Giới thiệu về machine
Học không giám sát: Dữ liệu huấn luyện chỉ bao gồm dữ liệu đầu vào và không có đầu ra tương ứng(unsupervised learning)
Học bán giám sát: Có những thuật toán mà tập huấn luyện bao gồm các cặp (đầu vào, đầu ra) và dữ liệu khác chỉ có đầu vào Những thuật toán này được gọi là học bán giám sát (semi-supervised learning)
Học củng cố:Có một nhóm các thuật toán machine learning khác có thể không yêu cầu dữ liệu huấn luyện mà mô hình học cách ra quyết định bằng cách giao tiếp với môi trường xung quanh Các thuật toán thuộc nhóm này liên tục ra quyết định và nhận phản hồi từ môi trường để tự củng cố hành vi Nhóm các thuật toán này có tên học củng cố
Phân loại (classification) là một trong những bài toán được nghiên cứu nhiều nhất trong machine learning 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
Trang 71.3 Mô hình chung trong các bài toán machine
learning
Hình 1.3: Mô hình chung của machine learning
Mô hình chung trong machine learning bao gồm 2 pha chính: Pha huấn luyện và pha kiểm tra
Pha huấn luyện: Xây dựng mô hình dựa trên dữ liệu huấn luyện.Trong pha huấn luyện sẽ có hai khối cần được thiết kế là khối bộ trích chọn đặctrưng và khối thuật toán
Pha kiểm tra: Dữ liệu kiểm tra đánh giá hiệu quả mô hình Khi xây dựng
bộ trích chọn đặc trưng và thuật toán chính không được sử dụng dữ liệu kiểm tra, chỉ được dựa trên dữ liệu huấn luyện
7
Tieu luan
Trang 81.4 Bài toán phân lớp dữ liệu
Để xây dựng được mô hình phân lớp và đánh giá hiệu quả của mô hình cần phải tiến hành theo 3 bước:
Bước 1: chuẩn bị tập dữ liệu và rút trích đặc trưng
Chúng ta cần phải biết chọn ra những đặc trưng tốt của dữ liệu Lược bỏ những đặc trưng gây nhiễu Ước lượng số chiều của dữ liệu bao nhiêu là tốt hay nói cách khác là chọn bao nhiêu feature
Ở bước này chúng ta cũng chuẩn bị bộ dữ liệu để test trên mô hình
Bước 2: Xây dựng mô hình phân lớp
Mục đích của mô hình huấn luyện là tìm ra hàm F(x) và thông qua hàm f tìm được để chúng ta gán nhãn cho dữ liệu Bước này thường được gọi làhọc hay trainning
Bước 3: Kiểm tra dữ liệu với mô hình
8
Tieu luan
Trang 9Chương 2: Thuật toán K lân cận
2.1 Định nghĩa
Tên tiếng anh là K-nearest neghibor, là thuật toán thuộc loại học có giám sát
KNN có thể áp dụng được cho cả bài toán phân loại và hồi quy
Khi training KNN không học một điều gì từ dữ liệu mọi tính toán được thực hiện khi dự đoán kết quả của dữ liệu mới
Với việc phân lớp, nhãn(đầu ra) của một điểm dữ liệu mới được suy
ra từ K điểm dữ liệu gần nhất
Với hồi quy, đầu ra của một điểm dữ liệu bằng chính đầu ra của điểm
dữ liệu đã biết gần nhất( trong trường hợp K=1)
Tóm lại KNN 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 tập dữ liệu gần nó nhất, mà 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( dữ liệu mà có lời giải sai)
2.2 Quy trình làm việc của thuật toán KNN
Bước 1: Xác định tham số K = số láng giềng gần nhất
Bước 2: Tính khoảng cách đối tượng cần phân lớp với tất cả các đối tượng trong training data
Bước 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 đối tượng cần phân lớp
Bước 4: Lấy tất cả các lớp của K láng giềng gần nhất
Bước 5: Dựa vào phần lớp của K để xác định lớp cho đối tượng cần phânlớp
9
Tieu luan
Trang 102.3 Ví dụ về KNN nhiễu
Hình 2.3 Bản đồ minh họa KNN nhiễu với k=1
Hình trên là bài toán phân lớp với 3 lớp đỏ, lam, lục.Mỗi điểm dữ liệu mới (test data point) sẽ được gán nhãn theo màu của điểm mà nó thuộc về Trong hình này, có một vài vùng nhỏ xem lẫn vào các vùng lớn hơn khác màu Ví dụ
có một điểm màu Lục ở gần góc 11 giờ nằm giữa hai vùng lớn với nhiều dữ liệu màu Đỏ và Lam Điểm này rất có thể là nhiễu Dẫn đến nếu dữ liệu test rơi vào vùng này sẽ có nhiều khả năng cho kết quả không chính xác
10
Tieu luan
Trang 11Chương 3: Cơ sở toán học
Vì KNN ra quyết định dựa trên các điểm gần nhất nên có hai vấn đề ta cần xử lý.Vấn đề 1: Khoảng cách được định nghĩa như thế nào? Và vấn đề 2: Cần phảitính toán khoảng cách như thế nào cho hiệu quả?
3.1 Khoảng cách giữa hai vector
Trong không gian một chiều, khoảng cách giữa hai điểm là trị tuyệt đối của hiệu giữa hai giá trị đó Trong không gian hai chiều, tức mặt phẳng, chúng ta thường dùng khoảng cách Euclid để đo khoảng cách giữa hai điểm
Khoảng cách Euclid chính là độ dài đoạn thẳng nối hai điểm trong mặt phẳng Việc đo khoảng cách giữa hai điểm dữ liệu nhiều chiều rất cần thiết trong machine learning Đây chính là lý do khái niệm chuẩn (norm)
ra đời Để xác định khoảng cách giữa hai vector y và z, người ta thường
áp dụng một hàm số lên vector hiệu x = y − z Hàm số này cần có một vài tính chất đặc biệt
Một hàm số f : R n → R được gọi là một chuẩn nếu nó thỏa mãn ba điều kiện sau đây: a f(x) ≥ 0 Dấu bằng xảy ra ⇔ x = 0
Vì mỗi điểm dữ liệu được thể hiện bằng một vector đặc trưng nên
khoảng cách giữa hai điểm dữ liệu chính là khoảng cách giữa hai vector
Khoảng cách thường được sử dụng là khoảng cách Eucild
11
Tieu luan
Trang 12Hình 3.2: Minh họa chuẩnl 1 vàl 2 trong không gian hai chiều
3.3 Cần phải tính toán khoảng cách như thế nào cho hiệu quả?
Khoảng cách từ một điểm tới từng điểm trong một tập hợp:
Khoảng cách Eucild từ một điểm z tới một điểm xi trong tập huấn luyệnđược định nghĩa bới ‖z−xi‖2 Ta sẽ dùng bình phương khoảng cách Eucild để tránh phép tính căn bậc 2
12
Tieu luan
Trang 13Chương 4: Phương pháp thử nghiệm và kết quả
4.1 Giới thiệu về ngôn ngữ Python và Scikit-learn
Python là ngôn ngữ lập trình hướng đối tượng, cấp cao, mạnh mẽ, được tạo ra bởi Guido van Rossum Nó dễ dàng để tìm hiểu và đang nổi lên như một trong những ngôn ngữ lập trình nhập môn tốt nhất cho người lầnđầu tiếp xúc với ngôn ngữ lập trình Python cung cấp rất nhiều thư viện
để xử lý thuật toán ví dụ như Numpy, Scikit-learn, Matplotlip,…
Scikit-learn (Sklearn) là thư viện mạnh mẽ nhất dành cho các thuật toán học máy được viết trên ngôn ngữ Python
Thư viện cung cấp một tập các công cụ xử lý các bài toán machine learning gồm: Phân loại, hồi quy, phân cụm,…
Một số nhóm thuật toán được xây dựng bởi thư viện Scikit-learn:
Clustering, Datasets, Supervised Models,…
Để cài đặt thư viện Scikit learn, trong cửa sổ cmd của máy tính ta gõ lệnh: pip install sklearn
13
Tieu luan
Trang 144.2 Bộ dữ liệu hoa Iris
Gồm thông tin của ba nhãn hoa Iris khác nhau: Iris setosa, Iris virginica và Iris versicolor
Mỗi nhãn chứa thông tin của 50 bông hoa với dữ liệu là bốn thông tin: chiều dài, chiều rộng đài hoa, và chiều dài, chiều rộng cánh hoa
Các điểm dữ liệu là vector đặc trưng bốn chiếu gồm các thông tin ở trên
Hình 4.2 Hình ảnh minh họa về Iris flower data
14
Tieu luan
Trang 154.3 Sử dụng thuật toán KNN để thử nghiệm với bộ dữ liệu hoa Iris
4.3.1.Mô hình bài toán
Lưu đồ chương trình
Chúng ta sẽ tách 150 dữ liệu trong Iris flower dataset làm 2 phần:
Training set và test set
KNN sẽ dựa vào thông tin ở training set để dự đoán dữ liệu ở test set ứngvới loại hoa nào
Dữ liệu được dự đoán này sẽ được đối chiếu với loại hoa thật của mỗi dữliệu trong test set để đánh giá hiệu quả của KNN
Hình 4.3.1 Sơ đồ minh họa phân cụm của Iris flower dataset( Nguồn: wikipidia)
15
Tieu luan
Trang 164.3.2 Thiết kế chương trình
4.3.2a Lập trình
Đầu tiên chúng ta sẽ khai báo vài thư viện Thư viện Scikit-learn cung cấp sẵn bộ dữ liệu Iris flower.Thư viện Numpy phép làm việc hiệu quả với ma trận và mảng với tốc độ xử lý nhanh
Tiếp theo chúng ta sẽ load dữ liệu từ tập hoa Iris:
Các lớp sẽ được gán nhãn là (0,1,2) 20 mẫu dữ liệu được lấy ra ngẫu nhiên tạo thành tập huấn luyện, 130 mẫu còn lại được dùng để kiểm tra.Scikit-learn có một hàm số cho phép chúng ta ngẫu nhiên lựa chọn các điểm này, như sau:
Kết quả sau khi tách tập huấn luyện và tập kiểm tra:
16
Tieu luan
Trang 17 Ta có thể xây dựng thuật toán KNN như sau:
17
Tieu luan
Trang 18 Thay vì phải xây dựng thuật toán phức tạp ta có thể sử trực tiếp sử dụng thư viện scikit-learn cho KNN Xét ví dụ đầu tiên với K = 1 Tức là với mỗi điểm test data, ta chỉ xét 1 điểm training data gần nhất và lấy nhãn của điểm đó để dự đoán cho điểm test này:
Kết quả nhận được:
4.3.2b Bầu chọn đa số
1NN rất dễ gây ra over fitting
Để tránh hiện tượng này ta có thể tăng số điểm lân cận lên, ví dụ 7 điểm, kết quả được xác định dựa trên đa số
Kết quả nhận được:
Như vậy khi sử dụng nhiều điểm lân cận hơn độ chính xác đã tăng lên
Phương pháp dựa trên đa số trong lân cận còn gọi là bầu chọn đa số
18
Tieu luan
Trang 194.3.2c Đánh trọng số cho các điểm lân cận
Những điểm gần hơn sẽ phải có trọng số cao hơn
Ta sẽ đánh trọng số khác nhau cho 7 điểm đang xét nhưng phải thỏa mãnđiều kiện điểm gần test data thì phải có trọng số cao hơn
Scikit-learn giúp chúng ta đơn giản hóa việc này bằng cách gán giá trị weights = ‘distance’, lúc đó những điểm gần với test data sẽ có trọng số cao hơn( giá trị mặc định của weights là ‘uniform’ tương ứng tất cả các điểm lân cận có giá trị như nhau)
Trang 21Chương 5 Mở rộng và kết luận
5.1 Mở rộng
Ngoài bài toán phân lớp, KNN còn có thể áp dụng cho bài toán hồi quy
Với bài toán hồi quy, chúng ta cũng hoàn toàn có thể sử dụng phương pháp KNN: đầu ra của một điểm được xác định dựa trên đầu ra của các điểm lân cận và khoảng cách tới chúng
Hình dưới là một ví dụ về KNN cho hồi quy với K = 5, sử dụng hai cách đánh trọng số khác nhau Ta có thể thấy rằng weights = ’distance’ có xu hướng gây ra overfitting
Ngoài ra KNN còn được sử dụng trong những bài toán về lĩnh vực y tế, tài chính,…
Hình 8:KNN cho bài toán hồi quy (Nguồn: Nearest neighbors regression – scikitlearn -https://goo.gl/9VyBF3)
21
Tieu luan
Trang 225.2 Kết luận
Ưu điểm của KNN:
1 Độ phức tạp tính toán của quá trình training là bằng 0
2 Việc dự đoán kết quả của dữ liệu mới rất đơn giản
3 Không cần giả sử gì về phân phối của các lớp(class)
Nhược điểm của KNN:
1 KNN rất nhạy cảm với nhiễu khi K nhỏ
2 Tính toán khoảng cách rất tốn thời gian
3 K càng lớn thì độ phức tạp cũng sẽ tăng lên 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 KNN
22
Tieu luan
Trang 23Chương 6 Tài liệu tham khảo
1 sklearn.neighbors.NearestNeighb ors
2 sklearn.model_selection.train_tes t_split
Trang 24Phụ Lục
24
Tieu luan
Trang 25Mã nguồn của chương trình
1 # Khai báo các thư viện cần dùng
2 from future import print_function
3 import numpy as np
4 from sklearn import neighbors, datasets
5 from sklearn.model_selection import train_test_split # Để chia nhỏ dữ liệu
6 from sklearn.metrics import accuracy_score # Để đánh giá kết quả
14.# Tách dữ liệu huấn luyện và kiểm tra
15.X_train, X_test, y_train, y_test = train_test_split(
16.iris_X, iris_y, test_size=120)
17.print('Training size:', X_train.shape[0], ', test size:', X_test.shape[0])18
19.def get2DPlot(iris):
20 X = iris.data[:, :2] # Lấy hai thuộc tính đầu tiên
21 Y = iris.target
22 X_min, X_max = X[:, 0].min() - 5, X[:, 0].max() + 5
23 Y_min, Y_max = X[:, 1].min() - 5, X[:, 1].max() + 5
24 plt.figure(2, figsize=(8, 6))
25 plt.clf()
26
27 # Biểu diễn tập dữ liệu huấn luyện bằng đồ thị
28 plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired)
Trang 2638.# Xây dựng hàm KNN
39.def KNN(X_train,X_test,y_train,k):
40 num_test = X_test.shape[0] # số lượng dữ liệu test
41 num_train = X_train.shape[0] # số lượng dữ liệu train
42 # y_pred là một ma trận, mỗi hàng tương ứng là khoảng cách của một điểm dữ liệu trong tập test đối với tất cả các điểm dữ liệu trong tập train
Trang 28
28
Tieu luan