Vấn đề tiền xử lý dữ liệu trong Data Mining
(Data Preprocessing in Data Mining)
Nguyễn Văn Chức – chuc1803@gmail.com
1. Giới thiệu về tiền xử lý dữ liệu (Data Preprocessing)
Trong qui trình khai phá dữ liệu, công việc xử lý dữ liệu trước khi đưa vào các mô hình là rất cần thiết, bước này làm cho dữ liệu có được ban đầu qua thu thập dữ liệu (gọi là dữ liệu gốc original data) có thể áp dụng được (thích hợp) với các mô hình khai phá dữ liệu (data mining model) cụ thể. Các công việc cụ thể của tiền xử lý dữ liệu bao gồm những công việc như:
Filtering Attributes: Chọn các thuộc tính phù hợp với mô hình
Filtering samples: Lọc các mẫu (instances, patterns) dữ liệu cho mô hình
Clean data: Làm sạch dữ liệu như xóa bỏ các dữ liệu bất thường (Outlier) Transformation: Chuyển đổi dữ liệu cho phù hợp với các mô hình như chuyển đổi dữ liệu từ numeric qua nomial hay ordinal
Discretization (rời rạc hóa dữ liệu): Nếu bạn có dữ liệu liên tục nhưng một vài mô hình chỉ áp dụng cho các dữ liệu rời rạc (như luật kết hợp chẳn hạn) thì bạn phải thực hiện việc rời rạc hóa dữ liệu.
Bài viết này mô tả một số công việc cơ bản của quá trình tiền xử lý dữ liệu qua ví dụ cụ thể trên phần mềm Weka nhằm giúp bạn hiểu hơn về Data Preprocessing trong Data mining.
2. Tiền xử lý dữ liệu với Weka (Data Preprocessing with Weka)
Dữ liệu được dùng trong minh họa này là dữ liệu về khách hàng ngân hàng ( file comma-separated format tên bank-data.csv ). Gồm 12 thuộc tính và 600 khách hàng (samples, instances, patterns). Cấu trúc file bank-data.csv như sau: (Download file dữ liệu bank-data.csv tại đây)
Vấn đề đặt ra là để thực hiện mô hình khai phá luật kết hợp (Association Rule Mining) trên file bank-data.csv ta cần phải làm các việc sau :
- Loại bỏ thuộc tính id vì thuộc tính này không dùng trong mô hình. Quá trình này gọi là lọc thuộc tính (Filtering Attribute)
- Rời rạc hóa giá trị của các trường liên tục là “children”,” age” và “income” vì mô hình khai phá luật kết hợp không làm việc với các kiểu dữ liệu liên tục. Quá trình này goi là rời rạc hóa dữ liệu (Discretization)
Nạp dữ liệu (Loading the Data)
Thông thường, định dạng chuẩn file dữ liệu của Weka la file ARFF (Attribute Relation File Format), tuy nhiên rất nhiều DBMS và Spreadsheet cho phép tổ chức file dữ liệu dưới dạng file .csv (comma-separated values) và một điều thuận lợi là Weka cho phép đọc dữ liệu từ file .csv.
Nạp file dữ liệu data-bank.csv: Chọn tab “Preprocess” > Open file
Sau khi dữ liệu được nạp lên, panel bên trái thể hiện các thuộc tính của file dữ liệu, panel bên phải thể hiện các thống kê tương ứng với thuộc tính bên trái (xem hình sau)
2.1. Lọc thuộc tính (Filtering Attributes)
Trong file dữ liệu bank-data.csv, mỗi khách hàng được xác định duy nhất bởi thuộc tính id. Chúng ta cần loại bỏ thuộc tính này trước khi thực hiện các bước tiếp theo trong Association Rule Mining. Công việc này được thực hiện rất dễ dàng trong Weka như sau:
Trong panel Filter > Choose > filters >unsupervised > attribute > Remove
Bước tiếp theo là bấm vào textbox ngay bên phải nút “Choose” và gỏ vào 1 (đây là index của thuộc tính id trong file dữ liệu). Chú ý rằng tùy chọn "invertSelection" phải được thiết lập là false. (xem hình)
Bấm nút “Apply” sẽ tạo ra một liệu mới (working relation) với 11 thuộc tính sau khi đã loại bỏ thuộc tính id. (xem hình sau).
Bạn có thể thực hiện việc lọc nhiều thuộc tính khác nhau tùy theo ứng dụng của bạn theo cách trên.
Bây giờ ta lưu lại dữ liệu sau khi loại bỏ thuộc tính id dưới dạng file arff với tên là "bank-data-R1.arff" .Để thực hiện việc rời rạc hóa dữ liệu ở bước tiếp theo.
Chọn nút “save” và gỏ vào tên file "bank-data-R1.arff" (xem hình sau)
Nội dung file “bank-data-R1.arff như sau (in WordPad)
Chú ý rằng, khi thuộc tính “id” đã bị loại thì tất cả các giá trị của trường id trong các record cũng bị loại.
2.2. Rời rạc hóa dữ liệu (Discretization)
Trong Data Mining, một số kỹ thuật như khai phá luật kết hợp (association rule mining) chỉ có thể thực hiện trên các dữ liệu phân loại (categorical/ nominal data). Điều này yêu cầu phải thực hiện việc rời rạc hóa trên các thuộc tính có kiểu dữ liên tục (như kiểu numeric chẳn hạn) khi muốn áp dụng các kỹ thuật này. Trong file dữ liệu “bank-data-R1.arff” có 3 thuộc tính kiểu số, đó là "age", "income", và "children".
Đối với thuộc tính "children", vì phạm vi giá của nó chỉ có thể là 0,1,2 và 3 cho nên ta có thể giữ lại các giá trị của thuộc tính này. Việc rời rạc hóa cho thuộc tính “children” có thể thực hiện đơn giản bằng cách mở file “bank-data-R1.arff” bằng bất kỳ text editor nào (WordPad chẳn hạn) và thay từ khóa “numeric” bằng các giá trị rời rạc {0,1,2,3}. Sau đó lưu kết quả lại với tên file "bank-data2.arff". (Xem hình)
Bây giờ trên file “bank-data2.arff”, chúng ta sẽ thực hiện việc rời rạc hóa dữ liệu trên 2 thuộc tính là "age" và "income".
Trong ví dụ này, các dữ liệu liên tục trên 2 trường “age” và “income” sẽ được tự động chuyển vào 3 khoảng bins (intervals) như sau
Nạp file dữ liệu “bank-data2.arff”
Chú ý rằng thuộc tính “age” và “income” có kiểu dữ liệu là numeric. Và nếu ta chọn thuộc tính “children” ta sẽ thấy kiểu dữ liệu là nominal (xem hình)
Bây giờ mở lại hộp thoại Filter và chọn: filters.unsupervised.attribute.Discretize
Tiếp theo, bấm chuột vào text box ngay bên phải nút “Choose” và thiết lập các tham số để thực hiện việc rời rạc hóa.
Trong textbox attributeIndices nhập 1 tương ứng với index của thuộc tính “age”
Trong mục bins nhập 3 (tuổi được chia thành 3 khoảng – interval)
Click "Apply" để thực hiện. Kết quả sẽ được tạo ra trong một working relation mới, trong đó các giá trị liên tục trong thuộc tính “age” sẽ được tự động chia vào 3 khoảng có nhãn lần lượt là "(-inf-34.333333]", "(34.333333-50.666667]" “(50.666667- inf)” (xem hình).
Tương tự, ta thực hiện việc rời rạc hóa thuộc tính “income” như sau (xem hình)và sau đó lưu lại file dữ liệu với tên “bank-data3.arff”
Nếu bạn mở file dữ liệu “bank-data3.arff” bằng text editor như wordpad sẽ thấy như sau
Chú ý rằng, kiểu dữ liệu cũng như giá trị của 2 thuộc tính “age” và “income” đã chuyển sang Nominal với 3 khoảng (bin, interval). Kiểm tra thuộc tính “age” ta sẽ thấy rằng có 3 độ tuổi có thể gọi là nhỏ, trung niên, già tương ứng với 3 khoảng là "(-inf-34.333333]", "(34.333333-50.666667]" “(50.666667- inf)”
Chúng ta có thể thay đổi các nhãn mà Weka tự động tạo ra bằng các nhãn dễ hiểu hơn. Chẳn hạn ta thay nhãn "(-inf-34.333333]" bằng 0_34, nhãn "(34.333333-50.666667]" bằng 35_51 và nhãn “(50.666667- inf)” bằng 52-max ta chỉ cần mở file dữ liệu ra bằng text editor có hỗ trợ find and replace (như wordpad chạn hạn) và thực hiện việc tìm kiếm và thay thế như trên.
Đối với thuộc tính “income” ta thay thế các nhãn như sau:
(-inf-24386.173333] thay bằng 0_24386
(24386.173333-43758.136667] thay bằng 24387_43758
(43758.136667-inf)thay bằng 43759_max
Sau khi đã thực hiện và thay thế các nhãn của 2 thuộc tính “age” và “income” ta lưu lại file dữ liệu cuối cùng có tên “bank-data-final.arff”.
Bây giờ, với file dữ liệu đã qua quá trình lọc thuộc tính id và rời rạc hóa dữ liệu trên 3 thuộc tính là “children”, “age” và “income”, bạn có thể thực hiện các kỹ thuật mining chỉ làm việc trên dữ liệu nominal (như association rule mining). Sau đây là kết quả thực hiện thuật toán Apriori để phát hiện luật kết hợp trên file dữ liệu “bank-data-final.arff”. (Xem thêm về khai phá luật kết hợp ở bài Khai phá luật kết hợp với Weka tại http://bis.net.vn/forums/t/384.aspx.
PS. All comments please send to chucnv@ud.edu.vn. Thank you and Welcome !