Trong bài viết trước, tôi đã đề cập một cách tổng quát về trích chọn thuộc tính. Tuy nhiên, việc sử dụng chúng ra sao để tiền xử lý dữ liệu lại là vấn đề hoàn toàn khác. Chính vì thế, trong bài viết này, tôi sẽ thực hành trích chọn thuộc tính một tập dữ liệu trong môi trường Weka.
Lựa chọn tập dữ liệu
Như đã đề cập ở trên, tôi sẽ sử dụng trực tiếp bộ dataset mà weka đã cung cấp sẵn. Nếu chưa biết về weka, độc giả có thể tìm hiểu thêm tại đây.
Đầu tiên, vào mục explorer trong weka.
Sau khi vào mục explorer, giao diện explorer hiện lên. Trong tab Preprocess, chọn open file
Trỏ đường dẫn (path) tới thư mục weka, chọn thư mục data nằm trong weka. Thư mục data chứ các tập dataset mẫu mà weka cung cấp sẵn để người dùng thuận tiện hơn trong việc tìm hiểu các mô hình trong weka.
Trong thư mục data, chọn tập dữ liệu weather.numeric.arff. Đây là tập dữ liệu về thời tiết đã được đo tại một khu vực, chi tiết tập dữ liệu này, độc giả xem tiếp phần sau. Định dạng của các tập dữ liệu này là định dạng arff. Đây là định dạng mà weka có thể đọc được dữ liệu, ngoài ra, còn có một số định dạng khác mà weka có thể hiểu được, chẳng hạn như định dạng .csv
Nhấn open để hoàn tất quá trình. Lúc này, chúng ta có thể sử dụng tập dataset này để xây dựng các mô hình máy học, hoặc dùng chúng cho những mục đích khác nhau trong khai phá dữ liệu.
Mô tả tập dữ liệu
Tập dữ liệu mà chúng ta tiến hành khảo sát sẽ là tập dữ liệu weather.numeric. Tập dữ liệu này có 14 thực thể (instance) tương đương với 14 ngày, mỗi thực thể là một ngày và được mô tả thông qua 5 thuộc tính, bao gồm: outlook, temperature, humidity, windy và play.
Trong 5 thuộc tính này, có 2 thuộc tính có kiểu dữ liệu numeric là temperature và humidity, 2 thuộc tính còn lại là outlook và windy là có kiểu dữ liệu norminal, thuộc tính cuối cùng là thuộc tính phân lớp (class attribute). Thuộc tính này dùng để dự đoán xem ngày đó ta có thể chơi các môn thể thao được hay không. Nếu thời tiết xấu, tức là 4 thuộc tính đầu mang các giá trị xấu, khả năng ngày hôm đó ta sẽ không thể chơi được, lúc này giá trị của thuộc tính play trong thực thể đó sẽ là No; và ngược lại, nếu thời tiết đẹp, khả năng ngày đó ta có thể đi chơi, và giá trị của thuộc tính play tại thực thể đó sẽ là yes.
Trích chọn thuộc tính
Để thực hiện việc trích chọn thuộc tính, ta vào tab select attribute. Chọn mục choose
Có nhiều loại attribute selection để chúng ta chọn lựa. Ở đây, tôi sẽ chọn WrapperSubsetEval. Sau đó, click vào khoảng trống kế bên nút choose trong mục attribute evaluator, chọn giải thuật tương ứng mà ta muốn trích chọn thuộc tính.
Tùy thuộc vào giải thuật chúng ta dự định chọn để sử dụng cho quá trình phân loại sau này, mà ta sẽ chọn giải thuật tương ứng để trích chọn thuộc tính. Tôi sẽ chọn giải thuật NaiveBayes để khảo sát xem, với giải thuật này, tôi sẽ có thể tìm ra được thuộc tính nào tốt nhất cho quá trình phân loại (classify) sau này
Có ba phương pháp tìm kiếm mà ta có thể sử dụng là BestFirst, GreedyStepwise và Ranker. Trong đó, nếu sử dụng ranker thì chúng ta sẽ chuyển attribute evalutor lại thành infoGainAttributeEval. Chúng ta chọn GreedyStepwise
Để hiển thị ra các thuộc tính nào được chọn sau khi chạy giải thuật, ta cần chỉnh searchBackwards thành true. Trong trường hợp ta sử dụng cross-validation thay vì full training set, lúc này, mục generateRanking cũng sẽ được thiết lập là true.
Cross validation là phương pháp kiểm tra độ chính xác của máy học dựa trên tập dữ liệu được cung cấp trước, và nó sử dụng toàn bộ dữ liệu để tạo ra mô hình. Có 3 phương pháp cross-validation phổ biến là: k-fold và leave-one-out
K-fold: tập dữ liệu được chia thành k tập con. Trong mỗi lần chạy giải thuật, một tập con dùng để làm tập kiểm tra và k-1 tập còn lại dùng làm tập huấn luyện.
Leave-one-out: tương tự như k-fold nhưng tối đa hóa số tập con (k = kích thước tập dữ liệu)
Sau khi quá trình hoàn tất, bảng output sẽ xuất hiện các thuộc tính được chọn. Ở đây, ta thấy có hai thuộc tính được chọn, đó là outlook và humidity
Trong trường hợp sử dụng cross-validation với folds là 10, lúc này kết quả sẽ như sau:
Thuộc tính outlook sử dụng 10 lần cho quá trình trích chọn thuộc tính, tương tự cho thuộc tính humidity là 7 lần. Tuy nhiên, thuộc tính temperature không sử dụng lần nào, vì thế, ta có thể loại bỏ thuộc tính này khỏi tập dữ liệu khi phân loại (classify) bằng giải thuật naiveBayes.
Tổng kết
Tóm lại, khi sử dụng tập dữ liệu lớn để xây dựng mô hình máy học, ta cần tiến hành trích chọn thuộc tính để tìm ra được những thuộc tính nào cần thiết ứng với từng giải thuật sử dụng. Từ đó, có thể tiết kiệm được không gian và thời gian cho quá trình xây dựng mô hình sau này.