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

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 python

28 14 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 28
Dung lượng 210,84 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 2

Lờ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 3

A /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 4

Mục lục

Trang 5

Danh 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 6

Chươ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 7

1.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 8

1.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 9

Chươ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 10

2.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 11

Chươ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 12

Hì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 ||zxiII2 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 13

Chươ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 14

4.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 15

4.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 16

4.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 19

4.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 20

3.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 21

Chươ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 )

Ngày đăng: 18/01/2022, 12:30

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w