TRƯỜNG ĐẠI HỌC ĐIỆN LỰCKHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN KHAI PHÁ DỮ LIỆU ĐỀ TI: ÁP DỤNG THUẬT TOÁN KMEANS ĐỂ PHÂN LOẠI HỌC SINH NOTE : Cố gắng học thuộc thuật toán
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
KHAI PHÁ DỮ LIỆU
ĐỀ TI:
ÁP DỤNG THUẬT TOÁN KMEANS
ĐỂ PHÂN LOẠI HỌC SINH NOTE : Cố gắng học thuộc thuật toán khả năng cao lấy điểm
Giảng viên hướng
Hà Nội, tháng 5 năm 2023
Trang 2PHIẾU CHẤM ĐIỂM
Giảng viên chấm 1:
Trang 3MỤC LỤC
LỜI NÓI ĐẦU 1
CHƯƠNG 1: TỔNG QUAN VỀ BÀI TOÁN PHÂN CỤM DỮ LIỆU 2
1 PHÁT BIỂU BI TOÁN PHÂN CỤM DỮ LIỆU 2
a) Khái niệm khai phá dữ liệu: 2
b) Phân loại dữ liệu (classification) 2
c) Phân cụm dữ liệu: 2
CHƯƠNG 2: THUẬT TOÁN KMEANS 4
1 Ý TƯỞNG CỦA THUẬT TOÁN KMEANS: 4
a) Giới thiệu thuật toán Kmean: 4
b) Đặc điểm của thuật toán Kmeans 5
c) Nhân xét, đánh giá thuật toán 6
CHƯƠNG 3: CÀI ĐẶT THỬ NGHIỆM THUẬT TOÁN 7
Trang 4LỜI NÓI ĐẦU
Nhịp độ phát triển của Công Nghệ Thông Tin đang là một vấn đề rất được các ngành Khoa Học, Kinh Tế,Giáo Dục… quan tâm Nó hiện hữu với một tầm vóc hết sức mạnh mẽ, to lớn và ngày một lớn mạnh thêm
Việc ứng dụng Công Nghệ Thông Tin vào các lĩnh vực làm sao để đạt được một cách có hiệu quả, sự lựa chọn và vận dụng những phần mềm sao cho phù hợp và đạt được kết quả tốt vẫn đang là một dấu hỏi lớn cho những người nghiên cứu trong lĩnh vực này Ngày nay, các phần mềm ứng dụng công nghệ thông tin không còn xa lạ với các trường học, doanh nghiệp, công ty, cửa hàng… Các phần mềm này giúp người sử dụng rút ngắn thời gian lao động, tính toán, thuận tiện cho việc thống kê và quản lý Thế nhưng yêu cầu của người sử dụng phần mềm ngày càng đa dạng và nhiều tính năng hơn Do đó yêu cầu người làm phần mềm phải đáp ứng được yêu cầu của phía người sử dụng
Để kết thúc môn Khai phá dữ liệu, em lựa chọn đề tài “Áp dụng thuật
toán Kmeans để phân loại học sinh” Trong quá trình học tập, nhờ có sự
được đề tài này Từ đó em có thể nắm vững được cách thức thiết kế một đề tài
cụ thể
Trong quá trình làm đề tài dù đã cố gắng tìm hiểu nhưng vẫn không tránh khỏi sai sót Tuy nhiên về cơ bản các chức năng chính của một hệ thống đã được em hoàn thiện một cách tốt nhất Em mong rằng sẽ nhận được sự đóng góp ý kiến của các thầy cô để phần mềm cũng như kiến thức của em được hoàn thiện hơn
Trang 5CHƯƠNG 1: TỔNG QUAN VỀ BI TOÁN PHÂN CỤM DỮ LIỆU
1 PHÁT BIỂU BI TOÁN PHÂN CỤM DỮ LIỆU
Khoảng hơn một thập kỷ trở lại đây, lượng thông tin được lưu trữ trên các thiết bị điện tử không nhừng tăng lên Sự tích lũy dữ liệu này xảy ra với một tốc độ bùng nổ Câu hỏi đặt ra là chúng ta có thể khai thác gì từ
“núi” dữ liệu khổng lồ ấy? Và từ đó khái niệm “khai phá dữ liệu” đã ra đời Khai phá dữ liệu được dùng để mô tả quá trình phát hiện ra tri thức trong CSDL Quá trình này kết xuất ra các tri thức tiềm ẩn từ dữ liệu giúp cho việc dự báo trong kinh doanh, các hoạt động sản xuất, Khai phá
dữ liệu làm giảm chi phí về thời gian so với phương pháp truyền thống trước kia Vậy “khai phá dữ liệu là gì”? Khai phá dữ liệu là quá trình trợ giúp quyết định, trong đó chúng ta khám phá các mẫu thông tin có ích, chưa biết và bất ngờ trong CSDL lớn Khai phá dữ liệu là một bước chính quan trọng và mang tính quyết định
Phân loại dữ liệu là dạng phân tích dữ liệu nhằm rút trích các mô hình
mô tả các lớp dữ liệu hoặc dự đoán xu hướng dữ liệu
Quá trình này gồm 2 bước đó là:
Bước học (giai đoạn huấn luyện): xây dựng bộ phân loại (classifier) bằng việc phân tích/học tập huấn luyện
Bước phân loại (classification): phân loại dữ liệu/đối tượng mới nếu độ chính xác của bộ phân loại được đánh giá là có thể chấp nhận được (acceptable)
Phân cụm dữ liệu là quá trình gom nhóm/cụm dữ liệu / đối tượng vào các nhóm, các lớp/ cụm
Các đối tượng có cùng chung 1 cụm tương tự nhau hơn so với đối tượng
ở cụm khác
Trang 74
CHƯƠNG 2: THUẬT TOÁN KMEANS
1 Ý TƯỞNG CỦA THUẬT TOÁN KMEANS:
a) Giới thiệu thuật toán Kmean:
Thuật toán K-means clustering (phân cụm K-means) nó thuộc lớp phương pháp Học không giám sát (Unsupervised Learning) Mục đích của phân cụm là tìm ra bản chất bên trong các nhóm của dữ liệu Các thuật toán phân cụm (Clustering Algorithms) đều sinh ra các cụm (clusters) Tuy nhiên, không có tiêu chí nào là được xem là tốt nhất để đánh giá hiệu quả của của phân tích phân cụm, điều này phụ thuộc vào mục đích của phân cụm như: data reduction, “natural clusters”, “useful” clusters, outlier detection K-Means là thuật toán rất quan trọng và được
sử dụng phổ biến trong kỹ thuật phân cụm Tư tưởng chính của thuật toán K-Means là tìm cách phân nhóm các đối tượng (objects) đã cho vào
K cụm (K là số các cụm được xác đinh trước, K nguyên dương) sao cho tổng bình phương khoảng cách giữa các đối tượng đến tâm nhóm (centroid) là nhỏ nhất
Thuật toán K-Means thực hiện qua các bước chính sau:
o Chọn ngẫu nhiên K tâm (centroid) cho K cụm (cluster) Mỗi cụm được đại diện bằng các tâm của cụm
o Tính khoảng cách giữa các đối tượng (objects) đến K tâm (thường dùng khoảng cách Euclidean)
d(i,j) = √(|𝑥𝑗1 − 𝑥𝑖1| + + |⋯ 𝑥𝑗𝑛 − | )𝑥𝑖𝑛
o Nhóm các đối tượng vào nhóm gần nhất
o Xác định lại tâm mới cho các nhóm
o Thực hiện lại bước 2 cho đến khi không có sự thay đổi nhóm nào của các đối tượng
Trang 8b) Đặc điểm của thuật toán Kmeans
Bài toán tối ưu hóa: Cực trị cục bộ
Mỗi cụm được đặc trưng hóa bởi trung tâm của cụm (i.e đối tượng trung bình (mean))
Không thể xác định được đối tượng trung bình???
Số cụm k nên là bao nhiêu?
Độ phức tạp: O(nkt)
n là số đối tượng, k là số cụm, t là số lần lặp
Trang 9sizes)
c) Nhân xét, đánh giá thuật toán:
Ưu điểm
o Sau đây là một số ưu điểm của thuật toán phân cụm K-Means:
o Nó rất dễ hiểu và dễ thực hiện
o Nếu chúng ta có số lượng biến lớn thì K-mean sẽ nhanh hơn so với phân cụm phân cấp
o Khi tính toán lại các centroid, một thể hiện có thể thay đổi cụm
o Các cụm chặt chẽ hơn được hình thành với K-means so với phân cụm theo thứ bậc
Nhược điểm
o Sau đây là một số nhược điểm của thuật toán phân cụm K-Means:
o Có một chút khó khăn để dự đoán số lượng cụm tức là giá trị của k
o Đầu ra bị tác động mạnh bởi các đầu vào ban đầu như số cụm (giá trị của k)
o Thứ tự của dữ liệu sẽ có tác động mạnh mẽ đến kết quả cuối cùng
o Nó rất nhạy cảm với việc thay đổi tỷ lệ Nếu chúng tôi bán lại dữ liệu của mình bằng phương pháp chuẩn hóa hoặc chuẩn hóa, thì đầu ra sẽ hoàn toàn thay đổi Đầu ra cuối cùng
o Sẽ không tốt khi thực hiện công việc phân cụm nếu các cụm có dạng hình học phức tạp
Trang 10CHƯƠNG 3: CI ĐẶT THỬ NGHIỆM THUẬT TOÁN
Về dữ liệu đầu vào ta có dữ liệu học tập của tập thể lớp dưới dạng file excel:
Trang 118
Trang 12Import các thư viện cần thiết:
Tiến hành đọc dữ liệu từ file excel và lưu vào dataframe:
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
from sklearn.preprocessing import LabelEncoder
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg , NavigationToolbar2Tk)
from tkinter import *
df = pd.read_excel( 'HS.csv' )
df.drop(df.columns[[ 1 2 , ]] , axis = 1, inplace = True )
Trang 13Tiến hành lưu dữ liệu dataframe vào không gian 2 chiều, sau đó sử dụng thuật toán Kmeans để phân loại dữ liệu theo số cụm mong muốn, tiến hành tìm các tâm cụm def Graph_2D ():
global output , fig
pca2 = PCA ( n_components = 2 )
pca2.fit(newdf)
x_pca2 = pca2.transform(newdf)
fig = plt.figure( figsize = ( 10 8 , ))
Classification = KMeans( n_clusters =n, random_state = ).fit(x_pca2) centers = Classification.cluster_centers_
pane2 = Frame(root)
pane1.pack( pady = 20, side = TOP)
pane2.pack( pady = 10, side = TOP)
L1 = Label(pane1 , text = "Nhập số cụm bạn muốn phân: " )
L1.pack( side = LEFT)
E1 = Entry(pane1, bd = 5 width = 20 )
E1.pack( padx = 20, side = LEFT)
B1 = Button( master =pane1,
text = "OK" )
B1.pack( side = RIGHT)
plot_button1 = Button( master =pane2,
text = "2 chiều" ) plot_button2 = Button( master =pane2,
text = "3 chiều" ) del_button = Button( master =pane2,
text = "Xóa" ) plot_button1.pack( padx = 10, pady = 0 side = LEFT, expand = True )
plot_button2.pack( padx = 10, pady = 0 side = LEFT, expand = True )
del_button.pack( padx = 10, pady = 0 side = LEFT, expand = True )
canvas.pack()
root.mainloop()
Trang 14Tiến hành tương tự với không gian 3 chiều
def Graph_3D ():
global output , fig
pca3 = PCA( n_components = ) 3
pca3.fit(newdf)
x_pca3 = pca3.transform(newdf)
Classification = KMeans( n_clusters =n, random_state = ).fit(x_pca3) 0 centers = Classification.cluster_centers_
fig = plt.figure( figsize =( 10 8 , ))
axis = fig.add_subplot(111, projection = '3d' )
axis.scatter(x_pca3[: , ] x_pca3[: , , ] x_pca3[: , , ] , =Classification.labels_.ast ype( float ) , s = 80 )
axis.scatter(centers[: , ] centers[: , , ] centers[: , , ] , = 'red' , marker = "X" ,
s 80 )
axis.set_xlabel( "Văn" , fontsize = 10)
axis.set_ylabel( "Toán" , fontsize = 10 )
axis.set_zlabel( "Anh" , fontsize = 10 )
output = FigureCanvasTkAgg(fig, master =canvas)
output.draw()
output.get_tk_widget().pack()
toolbar = NavigationToolbar2Tk(output, root)
toolbar.update()
output.get_tk_widget().pack()
Classification.labels_.astype( float ))
plt.scatter(centers[: , 0 ] , centers[: , 1 ] , marker = "X" , c = 'red' , label = "Tâm cụm" )
output = FigureCanvasTkAgg(fig, master =canvas)
output.draw()
output.get_tk_widget().pack()
toolbar = NavigationToolbar2Tk(output, root)
toolbar.update()
output.get_tk_widget().pack()