Trích chọn thuộc tính trong R
chuc1803@gmail.com
Trích chọn thuộc tính hay còn gọi là trích chọn đặc trưng (feature selection| feature extraction) là một bước tiền xử lý quan trọng trong khai phá dữ liệu, giúp đánh giá được mức độ tác động (quan trọng) của các thuộc tính để từ đó chọn ra được tập thuộc tính tốt nhất để xây dựng mô hình, giúp làm tăng hiệu suất và rút ngắn thời gian huấn luyện mô hình.
Bài viết này giới thiệu cách sử dụng package caret trong R để minh họa vấn đề trích chọn thuộc tính, cụ thể:
· Làm sao để loại bỏ các thuộc tính thừa trong dataset.
· Làm sao để xếp hạng (rank) các thuộc tính trong dataset theo mức độ quan trọng của chúng.
· Làm sao để chọn được các thuộc tính trong dataset sử dụng phương pháp Recursive Feature Elimination (RFE).
Dataset minh họa là dữ liệu về bệnh đái tháo đường của các phụ nữ mang thai, xem mô tả chi tiết về dataset Pima Indians Diabetes tại ĐÂY
1. Làm sao để loại bỏ các thuộc tính thừa trong dataset.
##Remove Redundant Features
# ensure the results are repeatable
set.seed(7)
#install package mlbench
install.packages("mlbench")
# load the library
library(mlbench)
library(caret)
# load the data
data(PimaIndiansDiabetes)
fix(PimaIndiansDiabetes)
# calculate correlation matrix
correlationMatrix <- cor(PimaIndiansDiabetes[,1:8])
# summarize the correlation matrix
print(correlationMatrix)
library(psych)
pairs.panels(PimaIndiansDiabetes)
# find attributes that are highly corrected (ideally >0.75)
highlyCorrelated <- findCorrelation(correlationMatrix, cutoff=0.5)
# print indexes of highly correlated attributes
print(highlyCorrelated)
Theo kết quả trên thì thuộc tính thứ 8 (Age) bị loại vì có tương quan cao
với thuộc tính pregnant (hệ số tương quan =0.54434123 lớn hơn cutoff=0.5)
2. Làm sao để xếp hạng (rank) các thuộc tính trong dataset theo mức độ quan trọng của chúng.
Mức độ quan trọng của thuộc tính trong dataset được ước lượng từ việc xây dựng mô hình. Một số phương pháp thường dùng để đánh giá mực độ quan trọng của các thuộc tính như sử dụng ROC curve hoặc LVQ(Learning Vector Quantization)
Trong ví dụ này sử dụng LVQ để đánh giá mực độ quan trong của các thuộc tính.
##Rank Features By Importance
# ensure results are repeatable
set.seed(7)
# load the library
library(mlbench)
library(caret)
install.packages("e1071")
library(e1071)
# load the dataset
data(PimaIndiansDiabetes)
# prepare training scheme
control <- trainControl(method="repeatedcv", number=10, repeats=3)
# train the model
model <- train(diabetes~., data=PimaIndiansDiabetes, method="lvq", preProcess="scale", trControl=control)
# estimate variable importance
importance <- varImp(model, scale=FALSE)
# summarize importance
print(importance)
# plot importance
plot(importance)
Kết quả đánh giá chỉ ra rằng 3 thuộc tính quan trọng nhất là glucose, mass và age và thuộc tính insulin là ít quan trọng nhất.
3. Làm sao để chọn được các thuộc tính trong dataset sử dụng phương pháp Recursive Feature Elimination.
Một phương pháp trích chọn thuộc tính phổ biến được cung cấp trong gói caret của R có tên là Recursive Feature Elimination (RFE).
Sau đây minh họa việc sử dụng RFE để trích chọn thuộc tính trong dataset Pima Indians Diabetes. Thuật toán Random Forest được sử dụng trên mỗi vòng lặp để đánh giá model. Thuật toán được cấu hình để đánh giá trên tất cả các tập con có thể của tập thuộc tính trng dataset. Trong ví dụ này tất cả 8 thuộc tính đều được chọn, mặc dù trong đồ thị ta có thể thấy rằng chỉ có 4 thuộc tính cho kết quả có thể so sánh được. (Xem hình)
##Feature Selection
# ensure the results are repeatable
set.seed(7)
# load the library
library(mlbench)
library(caret)
# load the data
data(PimaIndiansDiabetes)
# define the control using a random forest selection function
control <- rfeControl(functions=rfFuncs, method="cv", number=10)
# run the RFE algorithm
results <- rfe(PimaIndiansDiabetes[,1:8], PimaIndiansDiabetes[,9], sizes=c(1:8), rfeControl=control)
# summarize the results
print(results)
# list the chosen features
predictors(results)
# plot the results
plot(results, type=c("g", "o"))