Khái niệm về học máy: Học máy Machine learning là một lĩnh vực con của Trí tuệ nhântạoArtificial Intelligence sử dụng các thuật toán cho phép máy tính có thểhọc từ dữ liệu để thực hiện c
Trang 1TRƯỜNG ĐẠI HỌC ĐIỆN LỰC
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN
Trang 2PHIẾU CHẤM ĐIỂM Sinh viên thực hiện:
Trang 3MỤC LỤC
Trang 4LỜI MỞ ĐẦU
Công nghệ ngày càng phổ biến và không ai có thể phủ nhận được tầmquan trọng và những hiệu quả mà nó đem lại cho cuộc sống chúng ta Bất kỳtrong lĩnh vực nào, sự góp mặt của trí tuệ nhân tạo sẽ giúp con người làmviệc và hoàn thành tốt công việc hơn Và gần đây, một thuật ngữ “machinelearning” rất được nhiều người quan tâm.Thay vì phải code phần mềm vớicách thức thủ công theo một bộ hướng dẫn cụ thể nhằm hoàn thành mộtnhiệm vụ đề ra thì máy sẽ tự “học hỏi” bằng cách sử dụng một lượng lớn dữliệu cùng những thuật toán cho phép nó thực hiện các tác vụ
Đây là một lĩnh vực khoa học tuy không mới, nhưng cho thấy lĩnh vựctrí tuệ nhân tạo đang ngày càng phát triển và có thể tiến xa hơn trong tươnglai Đồng thời, thời điểm này nó được xem là một lĩnh vực “nóng” và dànhrất nhiều mối quan tâm để phát triển nó một cách mạnh mẽ, bùng nổ hơn.Hiện nay, việc quan tâm machine learning càng ngày càng tăng lên là
vì nhờ có machine learning giúp gia tăng dung lượng lưu trữ các loại dữ liệusẵn, việc xử lý tính toán có chi phí thấp và hiệu quả hơn rất nhiều
Những điều trên được hiểu là nó có thể thực hiện tự động, nhanhchóng để tạo ra những mô hình cho phép phân tích các dữ liệu có quy môlớn hơn và phức tạp hơn đồng thời đưa ra những kết quả một cách nhanh vàchính xác hơn
Chính sự hiệu quả trong công việc và các lợi ích vượt bậc mà nó đemlại cho chúng ta khiến machine learning ngày càng được chú trọng và quan
tâm nhiều hơn Vì vậy chúng em đã chọn đề tài ” ỨNG DỤNG THUẬT TOÁN PHÂN CỤM KMEANS CLUSTERING ĐỂ DỰ ĐOÁN NHÂN VẬT POKEMON”để làm báo cáo.
Trang 5Chúng em xin chân thành gửi lời cảm ơn tới các thầy cô giáo trongTrường Đại học Điện Lực nói chung và các thầy cô giáo trong Khoa Côngnghệ thông tin nói riêng đã tận tình giảng dạy, truyền đạt cho chúng emnhững kiến thức cũng như kinh nghiệm quý báu trong suốt quá trình học.Đặc biệt, em gửi lời cảm ơn đến giảng viên Vũ Văn Định đã tận tình theo sátgiúp đỡ, trực tiếp chỉ bảo, hướng dẫn trong suốt quá trình nghiên cứu và họctập của chúng em.
Trang 6CHƯƠNG 1 TỔNG QUAN VỀ HỌC MÁY
1.1 Khái niệm về học máy:
Học máy (Machine learning) là một lĩnh vực con của Trí tuệ nhântạo(Artificial Intelligence) sử dụng các thuật toán cho phép máy tính có thểhọc từ dữ liệu để thực hiện các công việc thay vì được lập trình một cách rõràng, cung cấp cho hệ thống khả năng tự động học hỏi và cải thiện hiệu suất,
độ chính xác dựa trên những kinh nghiệm từ dữ liệu đầu vào Học máy tậptrung vào việc phát triển các phần mềm, chương trình máy tính có thể truycập vào dữ liệu và tận dụng nguồn dữ liệu đó để tự học
Học máy vẫn đòi hỏi sự đánh giá của con người trong việc tìm hiểu
dữ liệu cơ sở và lựa chọn các kĩ thuật phù hợp để phân tích dữ liệu Đồngthời, trước khi sử dụng, dữ liệu phải sạch, không có sai lệch và không có dữliệu giả
Các mô hình học máy yêu cầu lượng dữ liệu đủ lớn để "huấn luyện"
và đánh giá mô hình Trước đây, các thuật toán học máy thiếu quyền truycập vào một lượng lớn dữ liệu cần thiết để mô hình hóa các mối quan hệgiữa các dữ liệu Sự tăng trưởng trong dữ liệu lớn (big data) đã cung cấp cácthuật toán học máy với đủ dữ liệu để cải thiện độ chính xác của mô hình và
dự đoán
1.2 Phân nhóm các thuật toán học máy
1.2.1 Học có giám sát (Supervised Learning)
Là phương pháp sử dụng những dữ liệu đã được gán nhãn từ trước đểsuy luận ra quan hệ giữa đầu vào và đầu ra Các dữ liệu này được gọi là dữliệu huấn luyện và chúng là cặp các đầu vào-đầu ra Học có giám sát sẽ xemxét các tập huấn luyện này để từ đó có thể đưa ra dự đoán đầu ra cho 1 đầu
Trang 7vào mới chưa gặp bao giờ Ví dụ dự đoán giá nhà, phân loại email Các môhình như mạng Nơ-ron, SVM, CNN,…
Hình 1.1 Mô hình học có giám sát
Supervised Learning Là thuât toán dự đoán đầu ra (outcome) của một
dữ liệu mới (new input) dựa trên cặp (input, outcome) đã biết tư trước Cặp
dữ liệu này còn đươc gọi là data, label tức dữ liệu, nhãn SupervisedLearning Là nhóm phổ biến nhất trong các thuật toán Machine learning
1.2.2 Học phi giám sát (Unsupervised Learning)-UL
Khác với học có giám sát, học phi giám sát sử dụng những dữ liệuchưa được gán nhãn từ trước để suy luận Phương pháp này thường được sửdụng để tìm cấu trúc của tập dữ liệu Tuy nhiên lại không có phương phápđánh giá được cấu trúc tìm ra được là đúng hay sai Ví dụ như phân cụm dữliệu, triết xuất thành phần chính của một chất nào đó K-mean Ứng dụng phổbiến nhất của học không giám sát là gom cụm (cluster)
Trang 8Hình 1.2 Mô hình học không giám sát
Trong thuật toán này, chúng ta không biết được dữ liệu đầu ra hay
nhãn mà chỉ có dữ liệu đầu vào Thuật toán Học không giám sát dựa vào cấu
trúc của dữ liệu để thực hiện một công việc nào đó, ví dụ như phân nhómhoặc giảm số chiều của dữ liệu để thuận tiện trong việc lưu trữ và tính toán.Một cách toán học, Học không giám sát là khi chúng ta chỉ có dữ liệuvào X mà không biết nhãn Y tương ứng
Sự khác nhau giữa học có giám sát và học không giám sát:
Trang 9Hình 1.3: Sự khác biệt giữa 2 mô hình SL và UL
Học có giám sát: Là cách huấn luyện một mô hình trong đó dữ liệuhọc có đầu vào và đầu ra tương ứng đầu vào đó Mô hình được huấn luyệnbằng cách giảm thiểu sai số lỗi (loss) của các dự đoán tại các vòng lặp huấnluyện Sau quá trình huấn luyện mô hình sẽ có khả năng đưa ra dự đoán vềđầu ra với một đầu vào mới gặp (không có trong dữ liệu học) Nếu khônggian đầu ra được biểu diễn dứới dạng rời rạc, ta gọi đó là bài toán phân loại(classification) Nếu không gian đầu ra được biểu diễn dưới dạng liên tục, tagọi đó là bài toán hồi quy (regression)
Học không giám sát: Là cách huấn luyện một mô hình trong đó dữliệu học chỉ bao gồm đầu vào mà không có đầu ra Mô hình sẽ được huấnluyện cách để tìm cấu trúc hoặc mối quan hệ giữa các đầu vào Một trongnhững phương pháp học không giám sát quan trọng nhất là phân cụm(clustering): Tạo các cụm khác nhau với mỗi cụm biểu diễn một đặc trưngnào đó của dữ liệu và phân các đầu vào mới vào các cụm theo các đặc trưngcủa đầu vào đó Các phương pháp học không giám sát khác có thể kể đến
Trang 10như: phát hiện điểm bất thường (anomaly detection), Singular-valuedecomposition,…
1.2.3 Học tăng cường (reinforcement learning)
Phương pháp học tăng cường tập trung vào việc làm sao để cho 1tác tử trong môi trường có thế hành động sao cho lấy được phần thưởngnhiều nhất có thể Khác với học có giám sát nó không có cặp dữ liệu gánnhãn trước làm đầu vào và cũng không có đánh giá các hành động là đúnghay sai
1.2.4 Học bán giám sát (Semi-Supervised Learning)
Các bài toán khi chúng ta có một lượng lớn dữ liệu X nhưng chỉ mộtphần trong chúng được gán nhãn được gọi là Semi-Supervised Learning.Những bài toán thuộc nhóm này nằm giữa hai nhóm được nêu bên trên Một
ví dụ điển hình của nhóm này là chỉ có một phần ảnh hoặc văn bản được gánnhãn (ví dụ bức ảnh về người, động vật hoặc các văn bản khoa học, chínhtrị) và phần lớn các bức ảnh/văn bản khác chưa được gán nhãn được thu thập
từ internet
Thực tế cho thấy rất nhiều các bài toán Machine Learning thuộc vàonhóm này vì việc thu thập dữ liệu có nhãn tốn rất nhiều thời gian và có chiphí cao Rất nhiều loại dữ liệu thậm chí cần phải có chuyên gia mới gánnhãn được (ảnh y học chẳng hạn) Ngược lại, dữ liệu chưa có nhãn có thểđược thu thập với chi phí thấp từ internet
1.3 Ứng dụng của học máy:
Nhiều hoạt động hàng ngày của chúng ta được trợ giúp bởi các thuậttoán machine learning, bao gồm:
Trang 11• Trong y tế: xác định bệnh lý của người bệnh mới dựa trên dữ liệu lịch sử củacác bệnh nhân có cùng bệnh lý có cùng các đặc điểm đã được chữa khỏitrước đây, hay xác định loại thuốc phù hợp
• Trong lĩnh vực ngân hàng: xác định khả năng khách hàng chậm trả cáckhoản vay hoặc rủi ro tín dụng do nợ xấu dựa trên phân tích Credit score;xác định xem liệu các giao dịch có hành vi phạm tội, lừa đảo hay không
• Trong giáo dục: phân loại các học sinh theo hoàn cảnh, học lực để xem xemcần hỗ trợ gì cho những học sinh ví dụ như hoàn cảnh sống khó khăn nhưnghọc lực lại tốt
• Trong thương mại điện tử: phân loại khách hàng theo sở thích cụ thể để hỗtrợ personalized marketing hay xây dựng hệ thống khuyến nghị, dựa trên dữliệu từ website, social media
• Trong kinh tế nói chung: giúp dự báo các sự kiện kinh tế trong tương lai, dựbáo tình hình thời tiết trong nông nghiệp, xác định xu hướng thị trườngchứng khoán để lên kế hoạch đầu tư thích hợp
Trang 12CHƯƠNG 2: THUẬT TOÁN K-MEANS CLUSTERING TRONG
BÀI TOÁN PHÂN CỤM 2.1 Tổng quan về thuật toán K-Means Clustering
Với thuật toán K-Means Clustering, chúng ta không biết nhãn (label)của từng điểm dữ liệu Mục đích là làm thể nào để phân dữ liệu thành cáccụm (cluster) khác nhau sao cho dữ liệu trong cùng một cụm có tính chấtgiống nhau Ý tưởng đơn giản nhất về cluster (cụm) là tập hợp các điểm ởgần nhau trong một không gian nào đó (không gian này có thể có rất nhiềuchiều trong trường hợp thông tin về một điểm dữ liệu là rất lớn) Hình bêndưới là một ví dụ về 3 cụm dữ liệu (từ giờ tôi sẽ viết gọn là cluster)
Trang 13Hình 2.1: Bài toán với 3 clusters
Giả sử mỗi cluster có một điểm đại diện (center) màu vàng Và nhữngđiểm xung quanh mỗi center thuộc vào cùng nhóm với center đó Một cáchđơn giản nhất, xét một điểm bất kỳ, ta xét xem điểm đó gần với center nàonhất thì nó thuộc về cùng nhóm với center đó
2.2 Thuật toán K-Means Clustering:
2.2.1 Mô hình toán học:
Trang 14Ta gọi điểm tại vị trí trung bình của tất cả các điểm dữ liệu trong mộtcụm là trung tâm cụm Như vậy, nếu có K cụm thì sẽ có K trung tâm cụm
và mỗi trung tâm cụm sẽ nằm gần các điểm dữ liệu trong cụm tương ứnghơn các trung tâm cụm khác Trong hình dưới đây, K = 3 và ta có 3 trungtâm cụm là các điểm màu vàng
Hình 2.2: Mô hình dữ liệu được phân cụm
Để phân cụm dữ liệu bằng K-Means Clustering, trước hết ta chọn K là
số cụm để phân chia và chọn ngẫu nhiên K trong số m dữ liệu ban đầu làmtrung tâm cụm μ1, μ2, …, μK Sau đó, với điểm dữ liệu x(i) ta sẽ gán nó chocụm c(i) là cụm có trung tâm cụm gần nó nhất
Trang 15Khi tất cả các điểm dữ liệu đã được gán về các cụm, bước tiếp theo làtính toán lại vị trí các trung tâm cụm bằng trung bình tọa độ các điểm dữ liệutrong cụm đó.
với k1, k2, …, kn là chỉ số các dữ liệu thuộc cụm thứ k Các bước trênđược lặp lại cho tới khi vị trí các trung tâm cụm không đổi sau một bước lặpnào đó
2.2.2 Độ chính xác của thuật toán:
Hàm mất mát của thuật toán K-Means Clustering đặc trưng cho độchính xác của nó sẽ càng lớn khi khoảng cách từ mỗi điểm dữ liệu tới trungtâm cụm càng lớn
2.2.3 Nghiệm của thuật toán K-Means Clustering:
Trong các bước của thuật toán, thực chất bước gán các điểm dữ liệu
về trung tâm cụm gần nhất và bước thay đổi trung tâm cụm về vị trí trungbình của các điểm dữ liệu trong cụm đều nhằm mục đích giảm hàm mất mát.Thuật toán kết thúc khi vị trí các trung tâm cụm không đổi sau một bước lặpnào đó Khi đó hàm mất mát đạt giá trị nhỏ nhất
Trang 16Khi K càng nhỏ so với m, thuật toán càng dễ đi đến kết quả chưa phảitối ưu Điều này phụ thuộc vào cách chọn K trung tâm cụm ban đầu.
Để khắc phục điều này, ta cần lặp lại thuật toán nhiều lần và chọnphương án có giá trị hàm mất mát nhỏ nhất
2.2.4 Tóm tắt thuật toán:
Đầu vào: Dữ liệu XX và số lượng cluster cần tìm KK.
Đầu ra: Các center MM và label vector cho từng điểm dữ liệu YY.
Chọn KK điểm bất kỳ làm các center ban đầu
Phân mỗi điểm dữ liệu vào cluster có center gần nó nhất
Nếu việc gán dữ liệu vào từng cluster ở bước 2 không thay đổi so vớivòng lặp trước nó thì ta dừng thuật toán
Cập nhật center cho từng cluster bằng cách lấy trung bình cộng của tấtcác các điểm dữ liệu đã được gán vào cluster đó sau bước 2
Quay lại bước 2
Trang 173.1.3 Bộ dữ liệu:
#: Số thứ tự của Pokémon
Name: Tên của Pokémon
Type 1: Loại chính của Pokémon
Type 2: Loại phụ của Pokémon (có thể rỗng)
Total: Tổng điểm sức mạnh của Pokémon
HP: Điểm máu của Pokémon
Attack: Điểm tấn công của Pokémon
Defense: Điểm phòng thủ của Pokémon
Sp Atk: Điểm tấn công đặc biệt của Pokémon
Sp Def: Điểm phòng thủ đặc biệt của Pokémon
Speed: Tốc độ của Pokémon
Generation: Thế hệ của Pokémon
Legendary: Xác định liệu Pokémon có phải là huyền thoại hay không
(TRUE/FALSE)
Dữ liệu này cung cấp thông tin chi tiết về các thuộc tính của mỗi Pokémon, bao gồm loại, điểm số, và các thuộc tính về sức mạnh và tốc độ
Trang 18- ĐỌC FILE DỮ LIỆU CSV:
df = pd.read_csv('C:/1/NMHM/Pokemon.csv')
Trang 19- GIỮ LẠI NHỮNG DỮ LIỆU CẦN THIẾT
types = df['Type 1'].isin(['Grass', 'Fire', 'Water'])
- BỎ NHỮNG DỮ LIỆU KHÔNG CẦN THIẾT
drop_cols = ['Type 1', 'Type 2', 'Generation', 'Legendary', '#']
- PHÂN THÀNH 2 CỤM ATTACK VÀ DEFENSE
from sklearn.cluster import KMeans
import numpy as np
# k means
kmeans = KMeans(n_clusters=3, random_state=0)
df['cluster'] = kmeans.fit_predict(df[['Attack', 'Defense']])
# get centroids
centroids = kmeans.cluster_centers_
cen_x = [i[0] for i in centroids]
cen_y = [i[1] for i in centroids]
## add to df
df['cen_x'] = df.cluster.map({0:cen_x[0], 1:cen_x[1], 2:cen_x[2]})
df['cen_y'] = df.cluster.map({0:cen_y[0], 1:cen_y[1], 2:cen_y[2]})
# define and map colors
colors = ['#DF2020', '#81DF20', '#2095DF']
df['c'] = df.cluster.map({0:colors[0], 1:colors[1], 2:colors[2]})
- TRỰC QUAN HÓA CÁC CỤM BẰNG BIỂU ĐỒ
plt.scatter(df.Attack, df.Defense, c=df.c, alpha = 0.6, s=10)#s is size, c is color
Trang 20# Visualize with size = Speed
plt.scatter(df.Attack, df.Defense, c=df.c, s=df.Speed, alpha = 0.6)
- PHÂN THÀNH 3 CỤM THEO ATTACK, DEFFENCE,HPcolors = ['#DF2020', '#81DF20', '#2095DF']
Trang 21kmeans = KMeans(n_clusters=3, random_state=0)
df['cluster'] = kmeans.fit_predict(df[['Attack', 'Defense', 'HP']])
df['c'] = df.cluster.map({0:colors[0], 1:colors[1], 2:colors[2]})
kmeans = KMeans(n_clusters=3, random_state=0)
df['cluster'] = kmeans.fit_predict(df[['Attack', 'Defense']])
# get centroids
centroids = kmeans.cluster_centers_
cen_x = [i[0] for i in centroids]
cen_y = [i[1] for i in centroids]
Trang 22## add to df
df['cen_x'] = df.cluster.map({0:cen_x[0], 1:cen_x[1], 2:cen_x[2]})
df['cen_y'] = df.cluster.map({0:cen_y[0], 1:cen_y[1], 2:cen_y[2]})
# define and map colors
colors = ['#DF2020', '#81DF20', '#2095DF']
df['c'] = df.cluster.map({0:colors[0], 1:colors[1], 2:colors[2]})
#####PLOT#####
from matplotlib.lines import Line2D
fig, ax = plt.subplots(1, figsize=(8,8))
# plot data
plt.scatter(df.Attack, df.Defense, c=df.c, alpha = 0.6, s=10)
# create a list of legend elemntes
plt.legend(handles=legend_elements, loc='upper left')
# title and labels
plt.title('Pokemon Stats\n', loc='left', fontsize=22)
plt.xlabel('Attack')
Trang 23#
================================Annotations===============
==============================
from matplotlib.lines import Line2D
fig, ax = plt.subplots(1, figsize=(8,8))
# plot data
plt.scatter(df.Attack, df.Defense, c=df.c, alpha = 0.6, s=10)
# plot centroids
plt.scatter(cen_x, cen_y, marker='^', c=colors, s=70)
# plot Attack mean
plt.plot([df.Attack.mean()]*2, [0,200], color='black', lw=0.5, linestyle=' ')plt.xlim(0,200)
# plot Defense mean
plt.plot([0,200], [df.Defense.mean()]*2, color='black', lw=0.5, linestyle=' ')plt.ylim(0,200)
# create a list of legend elemntes
## average line
legend_elements = [Line2D([0], [0], color='black', lw=0.5, linestyle=' ',label='Average')]
## markers / records