Tiền xử lý dữ liệu (Horse Colic dataset)

Trong bài viết này, ta sẽ áp dụng những kiến thức liên quan đến lấy và làm sạch dữ liệu (gọi chung là tiền xử lý dữ liệu) trên tập dữ liệu Horse Colic (chứng đau bụng ở ngựa). Để dễ tiếp cận, các thao tác được thực hiện với Weka.

Horse Colic

Horse Colic

Tập dữ liệu: horse-colic
Địa chỉ: http://archive.ics.uci.edu/ml/machine-learning-databases/horse-colic/horse-colic.data
Mô tả: http://archive.ics.uci.edu/ml/machine-learning-databases/horse-colic/horse-colic.names
Github: https://github.com/ongxuanhong/Preprocessing-with-horse-colic-dataset

Chuyển đổi định dạng file

Tập dữ liệu ban đầu chỉ chứa các giá trị của các thuộc tính.

2 1 530101 38.50 66 28 3 3 ? 2 5 4 4 ? ? ? 3 5 45.00 8.40 ? ? 2 2 11300 00000 00000 2
1 1 534817 39.2 88 20 ? ? 4 1 3 4 2 ? ? ? 4 2 50 85 2 2 3 2 02208 00000 00000 2
2 1 530334 38.30 40 24 1 1 3 1 3 3 1 ? ? ? 1 1 33.00 6.70 ? ? 1 2 00000 00000 00000 1
1 9 5290409 39.10 164 84 4 1 6 2 2 4 4 1 2 5.00 3 ? 48.00 7.20 3 5.30 2 1 02208 00000 00000 1
2 1 530255 37.30 104 35 ? ? 6 2 ? ? ? ? ? ? ? ? 74.00 7.40 ? ? 2 2 04300 00000 00000 2
2 1 528355 ? ? ? 2 1 3 1 2 3 2 2 1 ? 3 3 ? ? ? ? 1 2 00000 00000 00000 2
1 1 526802 37.90 48 16 1 1 1 1 3 3 3 1 1 ? 3 5 37.00 7.00 ? ? 1 1 03124 00000 00000 2
1 1 529607 ? 60 ? 3 ? ? 1 ? 4 2 2 1 ? 3 4 44.00 8.30 ? ? 2 1 02208 00000 00000 2
2 1 530051 ? 80 36 3 4 3 1 4 4 4 2 1 ? 3 5 38.00 6.20 ? ? 3 1 03205 00000 00000 2
2 9 5299629 38.30 90 ? 1 ? 1 1 5 3 1 2 1 ? 3 ? 40.00 6.20 1 2.20 1 2 00000 00000 00000 1

Ta tiến hành chuyển dữ liệu từ tập tin horse-colic.data sang bảng tính Excel. Sau đó, dựa vào mô tả dữ liệu để đặt tên cho các thuộc tính (tức là dòng đầu tiên của sheet).


1. TItle: Horse Colic database

2. Source Information
-- Creators: Mary McLeish & Matt Cecile
Department of Computer Science
University of Guelph
Guelph, Ontario, Canada N1G 2W1
mdmcleish@water.waterloo.edu
-- Donor: Will Taylor (taylor@pluto.arc.nasa.gov)
-- Date: 8/6/89

3. Past Usage:
-- Unknown

4. Relevant Information:

-- 2 data files
-- horse-colic.data: 300 training instances
-- horse-colic.test: 68 test instances
-- Possible class attributes: 24 (whether lesion is surgical)
-- others include: 23, 25, 26, and 27
-- Many Data types: (continuous, discrete, and nominal)

5. Number of Instances: 368 (300 for training, 68 for testing)

Cuối cùng, lưu lại theo định dạng csv với tên horse-colic.csv (Weka có thể mở được định dạng csv).

horse-colic.csv

horse-colic.csv

Quan sát tập dữ liệu

Đầu tiên, ta dùng Weka để nạp dữ liệu horse-colic.csv vào chương trình như hình dưới. Ở tab Preprocessing, ta click vào nút Open files. Sau đó, tìm đến nơi lưu file horse-colic.csv ban nãy và click Open (lưu ý: Files of Type ta chọn CSV data file (*.csv)).

Open horse-colic file

Open horse-colic file

Trong tập dữ liệu huấn luyện (training set) tải về, ta quan sát thấy có 300 mẫu dữ liệu, 28 thuộc tính, và 30% dữ liệu bị thiếu giá trị. Thông tin các thuộc tính được tổng hợp trong file attribute.csv. Gồm các thông tin như tên thuộc tính, loại thuộc tính, giá trị trung bình, giá trị độ lệch chuẩn, số mẫu bị thiếu giá trị trên thuộc tính này.

Weka first look data

Weka first look data

Làm sạch dữ liệu

Trong tập dữ liệu horse-colic.csv có cả thuộc tính số (numeric) và thuộc tính rời rạc (nominal) tuy nhiên tất cả đều biểu diễn dưới dạng số. Yêu cầu đặt ra là phải rời rạc hóa các thuộc tính số để các thuộc tính được mô tả đúng như ý nghĩa của nó. Bên cạnh đó dữ liệu còn có giá trị thiếu, nảy sinh một yêu cầu nữa là phải điền giá trị cho các ô bị thiếu dữ liệu. Giải quyết 2 vấn đề trên ta sẽ sử dụng đến một số bộ lọc (filter) của Weka (nằm trong thư mục Unsupervised/Attribute).

Trước tiên, ta chuẩn hóa các thuộc tính số về đoạn [0, 1] bằng bộ lọc Normalize. Sau đó, dùng bộ lọc ReplaceMissingValue để thay thế tất cả các giá trị thiếu bằng giá trị trung bình của thuộc tính.

Tiếp đến, ta dùng bộ lọc Discretize: là bộ lọc dùng để rời rạc hóa các thuộc tính numeric thành nomial. Việc rời rạc đơn giản bằng cách chia giỏ (binning), sắp xếp và chia dữ liệu vào các giỏ có cùng độ rộng (equal-width). Chia vùng giá trị thành N khoảng cùng kích thước, Độ rộng của từng khoảng = (giá trị lớn nhất – giá trị nhỏ nhất)/N. Mặc định, Weka gán N=10.

Discretize

Discretize

Cuối cùng, ta dùng bộ lọc NumericToNominal: là bộ lọc dùng để chuyển các thuộc tính dạng numeric thành nomial. Không như discretization (rời rạc hóa), bộ lọc này gom các mẫu có cùng giá trị vào cùng một nhóm nomial.

NumericToNominal

NumericToNominal

Kết quả sau cùng được lưu thành file horse-colic.arff.

Rút gọn dữ liệu

Dữ liệu có thể quá lớn đối với 1 số chương trình khai thác dữ liệu: tốn nhiều thời gian. Ta rút gọn dữ liệu (kích thước) sao cho vẫn thu được cùng (hoặc gần như cùng) kết quả phân tích. Ta dùng phương pháp giảm số chiều dữ liệu bằng thuật toán cây quyết định.

Đầu tiên, ta xây dựng cây quyết định J48. Trong tab Classify, ta chọn Classifier J48 decision tree.

J48 decision tree

J48 decision tree

Tiếp theo, ta loại các thuộc tính không xuất hiện trên cây.

Attribute selection

Attribute selection

Select attributes

Selected attributes

Như vậy các thuộc tính được thu gọn chỉ còn 5 thuộc tính thay vì 28 thuộc tính như ban đầu.

Kết luận

Qua bài viết này, khi thao tác với tập dữ liệu Horse Colic, ta có thể thấy dữ liệu trong thực tế có chất lượng xấu (dữ liệu bị thiếu và không đầy đủ). Sau các bước làm sạch dữ liệu và rút gọn dữ liệu, ta có thể tiến hành khai thác dữ liệu ở những bước sau này.

Advertisements

11 thoughts on “Tiền xử lý dữ liệu (Horse Colic dataset)

  1. Chào anh, blog của anh rất hay, em đang là sinh viên và cũng đang tìm tòi về ML. Anh cho em hỏi ở project thực tế, ngoài Weka ra anh còn dùng những tool hay phương pháp nào khác để data preprocessing không ạ? Cám ơn anh nhiều.

    Số lượt thích

        • Giả sử em muốn xử lý loại bỏ missing data và data của em lên đến 10Gb. Nếu dùng Weka thì em sẽ phải ngồi đợi load hết data lên rồi mới áp dụng hàm xử lý như vậy sẽ rất lâu. Thay vì vậy, em có thể viết script xử lý từng dòng (không load hết dữ liệu), hay đơn giản sử dụng command line để lọc. Sau đó, lưu lại thành data mới processed-data để phục vụ cho nghiên cứu tiếp theo.
          Hoặc yêu cầu đòi hỏi em phải aggregate tất cả dữ liệu lại để thống kê theo giờ/ngày/tháng và hiển thị report để quan sát. Trong trường hợp này, rõ ràng Weka không hỗ trợ.

          Số lượt thích

          • Rất cảm ơn anh ạ, em chỉ mới làm ML trên 1 số data mẫu nhỏ như pima indian diabet hoặc iris nên không biết nhiều tình huống khác nhau trên thực tế cũng như khi kích thước của data trở nên lớn. Cám ơn anh đã trả lời chi tiết ạ.

            Số lượt thích

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s