Khai phá dữ liệu (data mining) là quá trình tính toán để tìm ra các mẫu trong các bộ dữ liệu lớn liên quan đến các phương pháp tại giao điểm của máy học, thống kê và các hệ thống cơ sở dữ liệu. Đây là một lĩnh vực liên ngành của khoa học máy tính. Mục tiêu tổng thể của quá trình khai thác dữ liệu là trích xuất thông tin từ một bộ dữ liệu và chuyển nó thành một cấu trúc dễ hiểu để sử dụng tiếp. Ngoài bước phân tích thô, nó còn liên quan tới cơ sở dữ liệu và các khía cạnh quản lý dữ liệu, xử lý dữ liệu trước, suy xét mô hình và suy luận thống kê, các thước đo thú vị, các cân nhắc phức tạp, xuất kết quả về các cấu trúc được phát hiện, hiện hình hóa và cập nhật trực tuyến. Khai thác dữ liệu là bước phân tích của quá trình khám phá kiến thức trong cơ sở dữ liệu.
Trang 1MÔN HỌC: DATA MINING KHAI PHÁ DỮ LIỆU
ĐỒ ÁN CUỐI KỲ
Nội dung: Lý thuyết và thực nghiệm trong khai phá dữ liệu trong phân lớp
bằng dữ liệu nước ngoài và của Việt Nam
Trang 2MỤC LỤC
Table of Contents
DANH MỤC HÌNH ẢNH VÀ BẢNG BIỂU 1
LỜI MỞ ĐẦU 2
Phần 1 TỔNG QUAN VỀ CLASSIFICATION 3
1 Khái niệm 3
Phần 2 THỰC NGHIỆM 4
2.1 Dữ liệu nước ngoài 4
2.1.1 Mô tả dữ liệu 4
2.1.2 Phân tích dữ liệu 4
2.1.3 Mô hình áp dụng 5
2.1.3 Kết quả 7
2.2 Dữ liệu Việt Nam 9
2.2.1 Mô tả dữ liệu 9
2.2.2 Áp dụng mô hình 9
2.2.3 Kết quả 10
KẾT LUẬN 10
DANH MỤC TÀI LIỆU THAM KHẢO 11
Trang 3LỜI MỞ ĐẦU
Khai phá dữ liệu (data mining) là quá trình tính toán để tìm ra các mẫu trong các bộ dữ liệu lớn liên quan đến các phương pháp tại giao điểm của máy học, thống kê và các hệ thống cơ sở dữ liệu Đây là một lĩnh vực liên ngành của khoa học máy tính Mục tiêu tổng thể của quá trình khai thác dữ liệu là trích xuất thông tin từ một bộ dữ liệu và chuyển nó thành một cấu trúc dễ hiểu để sử dụng tiếp Ngoài bước phân tích thô, nó còn liên quan tới cơ sở dữ liệu và các khía cạnh quản lý dữ liệu, xử lý dữ liệu trước, suy xét
mô hình và suy luận thống kê, các thước đo thú vị, các cân nhắc phức tạp, xuất kết quả về các cấu trúc được phát hiện, hiện hình hóa và cập nhật trực tuyến Khai thác dữ liệu là bước phân tích của quá trình "khám phá kiến thức trong cơ sở dữ liệu"
Trong Data mining có nhiều phương pháp khai phá dữ liệu khác nhau, nhưng chúng hiện thời có các nhóm chính sau:
Phân loại (Classification): Là phương pháp dự báo, cho phép phân loại một đối tượng vào một hoặc một số lớp cho trước
Hồi qui (Regression): Khám phá chức năng học dự đoán, ánh xạ một mục dữ liệu thành biến dự đoán giá trị thực
Phân nhóm (Clustering): Một nhiệm vụ mô tả phổ biến trong đó người ta tìm cách xác định một tập hợp hữu hạn các cụm để mô tả dữ liệu
Tổng hợp (Summarization): Một nhiệm vụ mô tả bổ sung liên quan đến phương pháp cho việc tìm kiếm một mô tả nhỏ gọn cho một bộ (hoặc tập hợp con) của dữ liệu
Mô hình ràng buộc (Dependency modeling): Tìm mô hình cục bộ mô tả các phụ thuộc đáng kể giữa các biến hoặc giữa các giá trị của một tính năng trong tập dữ liệu hoặc trong một phần của tập dữ liệu
Dò tìm biến đổi và độ lệch (Change and Deviation Dectection): Khám phá những thay đổi quan trọng nhất trong bộ dữ liệu
Trong các phương pháp trên, phương pháp Phân loại khá là phổ biến trong điều kiện thực
tế Vì vậy học viên chọn phương pháp Phân loại để thực hiện đồ án cuối kỳ cho môn học Khai phá dữ liệu Trong đồ án này, học viên áp dụng phương pháp Phân loại cho 2 tập dữ liệu: Dữ liệu nước ngoài và dữ liệu Việt Nam Đồ án này bao gồm 3 phần chính
Phần 1: Tổng quan về phương pháp Phân loại (Classification)
Phần 2: Thực hiện phương pháp Classification
Phần 3: Kết luận
Trang 4Phần 1 TỔNG QUAN VỀ CLASSIFICATION
1 Khái niệm
Ngày nay phân lớp dữ liệu (classification) là một trong những hướng nghiên cứu chính của khai phá dữ liệu Thực tế đặt ra nhu cầu là từ một cơ sở dữ liệu với nhiều thông tin ẩn con người có thể trích rút ra các quyết định nghiệp vụ thông minh Phân lớp và dự đoán là hai dạng của phân tích dữ liệu nhằm trích rút ra một mô hình mô tả các lớp dữ liệu quan trọng hay dự đoán xu hướng dữ liệu tương lai Phân lớp dự đoán giá trị của những nhãn xác định (categorical label) hay những giá trị rời rạc (discrete value), có nghĩa là phân lớp thao tác với những đối tượng dữ liệu mà có bộ giá trị là biết trước Trong khi đó, dự đoán lại xây dựng mô hình với các hàm nhận giá trị liên tục Ví dụ mô hình phân lớp dự báo thời tiết có thể cho biết thời tiết ngày mai là mưa, hay nắng dựa vào những thông số về độ ẩm, sức gió, nhiệt độ,… của ngày hôm nay và các ngày trước đó Hay nhờ các luật về xu hướng mua hàng của khách hàng trong siêu thị, các nhân viên kinh doanh có thể ra những quyết sách đúng đắn về lượng mặt hàng cũng như chủng loại bày bán… Một mô hình dự đoán có thể dự đoán được lượng tiền tiêu dùng của các khách hàng tiềm năng dựa trên những thông tin về thu nhập và nghề nghiệp của khách hàng Trong những năm qua, phân lớp dữ liệu đã thu hút sự quan tâm các nhà nghiên cứu trong nhiều lĩnh vực khác nhau như học máy (machine learning), hệ chuyên gia (expert system), thống kê (statistics) Công nghệ này cũng ứng dụng trong nhiều lĩnh vực khác nhau như: thương mại, nhà băng, maketing, nghiên cứu thị trường, bảo hiểm, y tế, giáo dục Phần lớn các thuật toán ra đời trước đều sử dụng cơ chế dữ liệu cư trú trong bộ nhớ (memory resident), thường thao tác với lượng dữ liệu nhỏ Một số thuật toán ra đời sau này đã sử dụng kỹ thuật cư trú trên đĩa cải thiện đáng kể khả năng mở rộng của thuật toán với những tập dữ liệu lớn lên tới hàng tỉ bản ghi
Trang 5Phần 2 THỰC NGHIỆM 2.1 Dữ liệu nước ngoài
Dữ liệu nước ngoài học viên lấy từ trang Vincentare Bundock [4]
Package: Ecdat
Item: PSID
Title: Panel Survey of Income Dynamics
Rows: 4856
Cols: 8
2.1.1 Mô tả dữ liệu
Một khảo sát vào năm 1993
Số lượng quan sát: 4856
Quan sát: cá nhân
Quốc gia: Hoa Kỳ
Định dạng: Một dataframe chứa các thuộc tính bên dưới như sau:
intnum: Số phỏng vấn năm 1968
persnum: Số thứ tự người phỏng vấn
age: Tuổi
educatn: Chỉ số giáo dục hoàn tất cao nhất
earnings: Tổng thu nhập
hours: Số giờ làm việc trong năm
kids: Số trẻ em phụ thuộc
married: Tình trạng hôn nhân
Nguồn: Panel Survey of Income Dynamics
2.1.2 Phân tích dữ liệu
Để phân tích dữ liệu trên, học viên dùng ngôn ngữ R để có thể trực quan hóa, nhằm tìm
mô hình thích hợp cho dữ liệu
Tóm tắt dữ liệu:
> dulieu
=read.csv("/Volumes/DATA/HOC_TAP/CAO_HOC/KhaiPhaDuLieu/Thi/DuLieu/PSID.c
sv")
> summary(dulieu)
Trang 6 Age: thấp nhất 30 tuổi, nhiều nhất 50 tuổi
Trình độ học vấn thấp nhất: 0, cao nhất 99
Thu nhập thấp nhất: 0, cao nhất 240,000
Số giờ làm việc thấp nhất trong năm: 0 giờ, nhiều nhất 5160 giờ
Số trẻ em thấp nhất: 0, nhiều nhất 99
Tiền xử lý
Học viên nhân thấy dữ liệu:
educatn có 1 missing value
married có 7 tình trạng hôn nhân: divorced, married, NA/DF, never married, no histories, separated, widowed
hours có dữ liệu cao nhất là 5160 tức là số giờ trong 1 năm
intnum và persnum không quan trọng trong việc phân lớp dữ liệu vì nó là số liệu
để đánh thứ tự
Chúng ta cần phải qua một bước tiền xử lý dữ liệu để có thể sử dụng được bộ dữ liệu này
Missing value:
Có thểtập dữ liệu của bạn không đầy đủ và khi không có thông tin, chúng ta gọi đó là giá trị thiếu - missing value Trong R các giá trị còn thiếu được mã hóa bằng ký hiệu <NA>
Để xác định các missing value trong tập dữ liệu của bạn, hàm là is.na()
Bây giờ sẽ thấy các lỗi trong bộ dữ liệu:
> is.na(dulieu$low_wind)
Trong bộ dữ liệu chúng ta có 4856 dòng, 1 dòng missing value Missing value nằm ở trường educatn, chúng ta có thể bỏ qua dòng thông tin này vì nó quá nhỏ
Bộ dữ liệu sau khi tiền xử lý có summary như hình minh họa bên dưới
Vì vậy dữ liệu để tính toán phân nhãn bao gồm 5 các thông số sau:
1 age
Trang 72 educatn
3 earnings
4 hours
5 kids
2.1.3 Các mô hình áp dụng và huấn luyện
Với dữ liệu như trên, có các nhãn về tình trạng hôn nhân đã được gán nhãn, học viên nhận thấy chúng ta hoàn toàn có thể dự đoán được về tình trạng hôn nhân khi có các thông tin liên quan Đây là dữ liệu có thể khai thác học có giám sát Mô hình áp dụng có các phương pháp cụ thể sau:
Cây quyết định - Chúng được tổ chức dưới dạng các bộ câu hỏi và câu trả lời trong cấu trúc cây
Phân loại Naive Bayes - Một mô hình máy học xác suất được sử dụng để phân loại
Phân loại K-NN - Dựa trên các biện pháp tương tự như khoảng cách, nó phân loại các trường hợp mới
Support Vector Machines - Đây là một bộ phân loại tuyến tính nhị phân không có xác suất, xây dựng một mô hình để phân loại một trường hợp thành một trong hai loại
Học viên chọn Phân loại K-NN
Phân loại K-NN - phần này sơ lược về thuật toán mà mình sẽ làm
1 Hàng xóm gần nhất mà chúng ta muốn kiểm tra sẽ được gọi là giá trị "k" Nếu k bằng 5 sau đó bạn kiểm tra 5 hàng xóm gần nhất để xác định lớp Nếu phần lớn hàng xóm thuộc về một loại nhất định trong số năm hàng xóm gần nhất đó, thì đó
sẽ được chọn làm danh mục của đối tượng sắp tới
2 Các biến khác nhau có các đơn vị tỷ lệ khác nhau, như trọng lượng tính bằng kg và chiều cao tính bằng cm
3 Thuật toán knn hoạt động tốt với các biến số, điều này không có nghĩa là nó không thể hoạt động với các biến phân loại, nhưng nó chỉ là khi bạn kết hợp cả hai biến phân loại và biến số như các yếu tố dự đoán thì nó đòi hỏi một chút cách tiếp cận khác nhau Nhưng nếu tất cả các dự đoán là số, thì knn là tốt nhất bởi vì chúng ta đang xử lý khoảng cách và vì thế chúng ta cần số cứng
4 Khi chúng ta chia dữ liệu của chúng tôi thành các tập huấn luyện và kiểm tra, dữ liệu đã được chuẩn hóa
5 Thuật toán knn không hoạt động với các yếu tố có thứ tự trong R mà là với các yếu tố
6 Thuật toán trung bình k khác với thuật toán lân cận K-NN K-mean được sử dụng
để phân cụm và là một thuật toán học tập không giám sát trong khi Knn là thuật toán nghiêng được giám sát hoạt động trên các vấn đề phân loại
Bên dưới là mã huấn luyện mô hình k-NN trong R :
#Bắt đầu demo k-NN
Trang 8#load dữ liệu vào PSID
read.csv("/Volumes/DATA/HOC_TAP/CAO_HOC/KhaiPhaDuLieu/Thi/PSIDv2.csv")
#Lấy mẫu
ran = sample(1:nrow(PSID), 0.8 * nrow(PSID))
#normalize
nor =function(x) { (x -min(x))/(max(x)-min(x)) }
#PSID Normalize
PSID_norm = as.data.frame(lapply(PSID[,c(1,2,3,4,5)], nor))
#Xem tổng quát dữ liệu
summary(PSID_norm)
#Chia tập train và tập test
PSID_train = PSID_norm[ran,]
PSID_test = PSID_norm[-ran,]
#Tạo nhãn cho tập train và tập test
PSID_target_category = PSID[ran,6]
PSID_test_category = PSID[-ran,6]
#Load thư viện class vào
library(class)
#Train dư liệu với k=7
pr = knn(PSID_train,PSID_test,cl=PSID_target_category,k=7)
#Kiểm tra lại với tập test
tab = table(pr,PSID_test_category)
#Tính độ chính xác của thuật toán
accuracy = function(x){sum(diag(x)/(sum(rowSums(x)))) * 100}
accuracy(tab)
#Kết thúc Demo k-NN
read.csv("/Volumes/DATA/HOC_TAP/CAO_HOC/KhaiPhaDuLieu/Thi/PSIDv2.csv")
Ở dòng này, chúng ta tải dữ liểu PSID.csv vào biến PSID với hàm read.csv.
Sau khi đọc được PSID thì tiếp theo chúng ta lấy mẫu để huấn luyện đưa vào biến ran
ran = sample(1:nrow(PSID), 0.8 * nrow(PSID))
Trang 9Hàm nor =function(x) { (x -min(x))/(max(x)-min(x)) }được áp dụng vào toàn bộ dữ liệu
PSID và gán vào biến PSID_norm
PSID_norm = as.data.frame(lapply(PSID[,c(1,2,3,4,5)], nor)) Chúng ta áp dụng hàm nor đấy vào dữ liệu PSID với các cột 1, 2, 3, 4, 5 cho ra dữ liệu PSID_norm
PSID_train = PSID_norm[ran,]
PSID_test = PSID_norm[-ran,]
Chia tập train là các phần tử thuộc PSID_norm với các bộ mẫu của ran
Tập test là các phần tử còn lại của PSID_norm khác với các bộ mẫu của ran
library(class)
Load thư viện class vào R
pr = knn(PSID_train,PSID_test,cl=PSID_target_category,k=7)
hàm knn như sau: knn(tap_train, tap_test, cl=các nhãn được phân lớp, k)
tab = table(pr,PSID_test_category)
Kiểm thử lại mô hình pr với tập test
Hàm tính phần trăm độ chính xác của thuật toán k-NN
accuracy = function(x){sum(diag(x)/(sum(rowSums(x)))) * 100}
accuracy(tab)
Áp dụng hàm accuracy cho tab
2.1.3 Kết quả
Kết quả thuật toán k-NN tương đối an toàn với62.51287%
Trang 10STT k Kết quả dự đoán
Việc thay đổi giá trị k từ 1->9 ta thấy giá trị tăng dần tương đối cao khi k=1 => k=7 Khi nâng số k lên nữa thì xác suất tăng lên không đáng kể Vì vậy số k ở đây nên bằng với số nhãn
2.2 Dữ liệu Việt Nam
Học viên sử dụng dữ liệu đa dạng sinh học của Hệ Thống Cơ Sở Dữ Liệu Quốc Gia Về
Đa Dạng Sinh Học Việt Nam: http://nbds.howizbiz.com/search/taxon bộ dữ liệu Vietnam Red list 2007 trang 1 và 2
2.2.1 Mô tả dữ liệu
Dữ liệu đề cập 100 loài
Bảng dữ liệu gồm 6 thông số sau:
• Tên khoa học
• Giới
• Nghành
• Lớp
• Bộ
• Tài nguyên bộ dữ liệu: thông số này là tên bộ dữ liệu nên không xét đến
2.2.2 Áp dụng mô hình
Trang 11REDLISTSVN =
read.csv("/Volumes/DATA/HOC_TAP/CAO_HOC/KhaiPhaDuLieu/Thi/DuLieu/REDLIS TSVN.csv")
library(magrittr)
str (col2)
str (col3)
str (col4)
str (col5)
#Lấy mẫu
ran = sample(1:nrow(REDLISTSVN), 0.8 * nrow(REDLISTSVN))
#normalize
nor =function(x) { (x -min(x))/(max(x)-min(x)) }
# REDLISTSVN Normalize
REDLISTSVN_norm = as.data.frame(lapply(REDLISTSVN [,c(2,3,4,5)], nor))
#Xem tổng quát dữ liệu
summary(REDLISTSVN_norm)
#Chia tập train và tập test
REDLISTSVN_train = REDLISTSVN_norm[ran,]
REDLISTSVN_test = REDLISTSVN_norm[-ran,]
#Tạo nhãn cho tập train và tập test
REDLISTSVN_target_category = REDLISTSVN [ran,2]
REDLISTSVN_test_category = REDLISTSVN [-ran,2]
#Load thư viện class vào
library(class)
#Train dữ liệu với k=5
pr = knn(REDLISTSVN_train, REDLISTSVN_test, cl =
REDLISTSVN_target_category,k=5)
#Kiểm tra lại với tập test
tab = table(pr, REDLISTSVN_test_category)
#Tính độ chính xác của thuật toán
accuracy = function(x){sum(diag(x)/(sum(rowSums(x)))) * 100}
accuracy(tab)
Trang 12KẾT LUẬN
Việc khai phá dữ liệu còn hơn việc chạy một số truy vấn phức tạp trên dữ liệu mà bạn đã lưu trong cơ sở dữ liệu của mình Bạn phải làm việc với dữ liệu của mình, định dạng lại nó hoặc cấu trúc lại nó, bất kể bạn có đang sử dụng SQL, cơ sở dữ liệu dựa trên tài liệu như Hadoop hoặc các tệp phẳng đơn giản hay không Việc nhận ra định dạng thông tin mà bạn cần được dựa trên kỹ thuật và việc phân tích mà bạn muốn làm Sau khi bạn có thông tin theo định dạng mà bạn cần, bạn có thể áp dụng các kỹ thuật khác (riêng
lẻ hay kết hợp lại với nhau) không phân biệt cấu trúc dữ liệu cơ bản hay tập hợp dữ liệu cần thiết
Kết quả của thuật toán phân lớp trong bài toán trên được thực hiện khá thành công tuy nhiên đối với bài toán khác chưa chắc nó đã chính xác, tùy theo bài toán cụ thể mà ta
sẽ sử dụng các phương pháp, thuật toán phù hợp
Trang 13DANH MỤC TÀI LIỆU THAM KHẢO
1 Introduction to Data Mining - by Pang-Ning Tan, Michael Steinbach, and Vipin Kumar, Pearson Education,1st Edition 2006
2 Trang web http://phamtthuytien.blogspot.com/2015/07/tk8-thong-ke-mo-ta-bieu-o-hop-box-plot.html
3 https://vi.wikipedia.org/wiki/Khai_phá_dữ_liệu
4 https://vincentarelbundock.github.io/Rdatasets/datasets.html
5 http://rpubs.com/Nitika/kNN_Iris