l.Khái niệm • Là một tập con của AI, 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 được lập trình cụ thể.. • Học có giám sát: Một thuật toán machine learning được
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ảngdạ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ếnthứ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ệnthậ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ễnTiến Cường đã tận tình hướng dẫn và giúp đỡ em trong quá trìnhnghiên cứu và thực hiện bài báo cáo này Thầy không chỉ dạy emnhững kiến thức không chỉ về chuyên ngành, về môn học, mà cònhướng dẫn, chỉ bảo về cách sống, tác phong làm việc, Những điềuthầ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ôngcảm và bỏ qua Ngoài ra bài báo cáo còn nhiều chỗ thiếu sót, em rấtmong 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
Trang 3A /T ’ 4-Ầ
Mở đâuAI (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ựccủa cuộc sống như xe tự lái của tesla, hệ thống gợi ý sản phẩm củaAmazon 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
K-195O'S 1960's 197O’S 1980’s 1990's 2000's 2010's
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
• Cơ sở toán học
• Phương pháp thử nghiệm và kết quả
Mở rộng và kết luận
3
Trang 4Mục lục
Trang 5Danh mục hình ảnh
STT Tên hình ảnh Nội dung
1 Hình 1 Mối quan hệ giữa AI,
machine learning và deep learning
2 Hình 1.3 Mô hình chung của
machine learning
3 Hình 2.3 Bản đồ minh họa của KNN
nhiễu với K=1
4 Hình 3.2 Minh họa chuẩn i1 vài 2
trong không gian 2 chiều
5 Hình 4.3 Minh họa về Iris flower
data
Trang 6Chương 1: Giới thiệu vê machine learning
1 l.Khái niệm
• Là một tập con của AI, 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 được lập trình cụ thể
• Các thuật toán trong machine learning: Học có giám sát, học không giám
sát, học bán giám sát và học củng cố
• Học có giám sát: Một thuật toán machine learning được gọi là học có
giám sát (supervised learning) nếu việc xây dựng mô hình dự đoán mối
quan hệ giữa đầu vào và đầu ra được thực hiện dựa trên các cặp (đầu
vào, đầu ra) đã biết trong tập huấn luyện
• 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
số N nhãn khác nhau
1.2 Hàm mất mát và tham số mô hình
• Mỗi mô hình machine learning được mô tả bởi một bộ tham số các mô
hình
• Quan hệ giữa một phép đánh giá và các tham số mô hình được mô tả
thông qua một hàm số gọi là hàm mất mát (loss function hoặc cost
function).Hàm số có giá trị nhỏ thì phép đánh giá sẽ cho kết quả tốt và
ngược lại
• Xây dựng một mô hình ML chính là việc đi tối thiểu hàm mất mát
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ấnluyệ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.Trongpha 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ệukiểm tra, chỉ được dựa trên dữ liệu huấn luyện
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ầnphả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 ftì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
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ớibằng cách chỉ dựa trên thông tin của K điểm dữ liệu trong tập dữ liệugần nó nhất, mà không quan tâm đến việc có một vài điểm dữ liệutrong 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ân
lớp
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ề Tronghì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ơivào vùng này sẽ có nhiều khả năng cho kết quả không chính xác
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
• Độ dài Euclid của một vector x e R n chính là một chuẩn, chuẩn này được
gọi là chuẩn l2 hoặc chuẩn Euclid:
11 x 112 = V x 12+ x 22 +••• xn 2
3.2 Khoảng cách được định nghĩa như thế nào?
• 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
Trang 12Hình 3.2: Minh họa chuẩn/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—xiII2 Ta sẽ dùng bình phương khoảng cáchEucild để tránh phép tính căn bậc 2
l|z-xi||2 = ||z||2+||xi||2-2 (xi LL T) z 6
Để tìm ra xi gần với z nhất số hạng đầu tiên có thể được bỏ qua, các giátrị ||xi||2 có thể được tính và lưu trước vào bộ nhớ Ta chỉ cần tính tích vôhướng (xi 66 T) z 6
• Khoảng cách giữa từng cặp điểm trong hai tập hợp: Khi làm việc trên
python, chúng ta có thể sử dụng hàm cdist trong scipy.spatial.distance,
hoặc hàm pairwise_distances trong sklearn.metrics.pairwise Các hàm
này giúp tính khoảng cách từng cặp điểm trong hai tập hợp khá hiệu quả
Trang 13Chương 4: Phương pháp thử nghiệm và
1 Ắ.
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
ESB Command Prompt
Microsoít Hỉndovưs [Version 10.0.1904-2.1052]
(c) Microsoít Corporation All rights reserved.
c : \Llsers\HP>pỉp install sklearn
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ôngtin: 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
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)
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 cungcấ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
from tuture import print_function
import numpy as np
from sklearn import neighbors, datasets
írom sklearn.model_selection import train_test_split # Để chia nhó dữ Liệu
from sklearn metrics import accuracyscore # Để đánh giá kết quả
• Tiếp theo chúng ta sẽ load dữ liệu từ tập hoa Iris:
print( ' Labels:' , np.unique(iris_y))
np.random.seed(7)
xtrain, xtest, y train, ytest = train_test_spl.it (
iris_x, irỉs_y, test_size=130)
print('Training size:‘, x_train.shape[0], test size:', x_test shape[0])
Kết quả sau khi tách tập huấn luyện và tập kiểm tra:
Labels: [0 1 2]
Training size: 20 , test size: 130
Trang 17• Ta có thê xây dựng thuật toán KNN như sau:
def KNN(X_train,X_test J y_train J k):
num test: x_test.shape[0 i số lượng dữ liệu test
nuntrain: xtraỉn.shape 0] # só lưọìig dừ liệu train
# yjred 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 I
ypred: np.zeros((rium_test,nuiii train))
# duyệt qua môi điểm trong tập test
for i in range(numtest):
# tưong ứng một điỂm trong tập test sẽ duyêt qua hết bộ train
for i in range(num_train):
# tính khoảng cách tói tập train
yjred[i,i]: np.sqrt(np.sum(np.power(x test[i,:]-x_train[jj :],2)))
results : []
# sắp xếp theo chiêu tăng dan khoảng cách
for i in range(len(y_pred)):
zipped: zip(y_pred[i, :],y_train)
res : sorted(zipped,key : lambda x:x[0])
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ụngthư viện scikit-learn cho KNN Xét ví dụ đầu tiên với K = 1 Tức là vớimỗi điểm test data, ta chỉ xét 1 điểm training data gần nhất và lấy nhãncủa điểm đó để dự đoán cho điểm test này:
• 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ố
Accuracy of 7NN with major voting: 93.85 %
• 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ố
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)
# tóih trọng só cho các điéin Lân cận
Kcf: neighbors.KNeighborsClassifier(n neighbors: 7) p 2, weights: 'distance')
Kcf.fit(x train, y train)
y pred: Kcf ,predict(x test)
print("Accuracy of 7NII (distance weights): I2f 0" ?í(1001accuracy score(y test) y pred)))Kết quả nhận được:
Accuracy of 7NN (dĩstance ueights): 94.17 %
1Độ chính xác tiếp tục được tăng lên
Trang 203.3.2d Trọng số tự định nghĩa
Scikit-learn cung cấp đánh trọng số tùy chọn:
wi là tr ọ ng s ố c ủ a đi ể m g ầ n th ứ i (xi) c ủ a đi ể m d ữ li ệ u đang xét z
sigma2 = 4 # we can change this number
Kcf = neighbors,KNeighborsClassifier(n_neighbors = 7j p : 2, weights = myweight)
Kcf fỉt(x_train, y train)
y_pred: Kcf predict(x test)
print("Accuracy of 7NN (self-defined ueights): %.2f %(100*accuracy_score(y_testíy_pred)))
Kết quả tiếp tục tăng lên một chút:
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ươngphá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ó xuhướ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 )