Lựa chọn đặc trưng dữ liệu trong phân tích và mô hình hóa toán học với Python

1. Tại sao cần xử lý đặc trưng dữ liệu?

Trong khai thác dữ liệu và phân tích, dữ liệu là nền tảng cho mọi vấn đề và ảnh hưởng trực tiếp đến tiến độ dự án. So với việc sử dụng các thuật toán phức tạp, xử lý dữ liệu linh hoạt thường mang lại hiệu quả bất ngờ. Điều này đòi hỏi phải áp dụng kỹ thuật đặc trưng (feature engineering). Vậy đặc trưng là gì?

Dữ liệu và đặc trưng quyết định giới hạn trên của mô hình học máy, trong khi thuật toán chỉ tiếp cận giới hạn đó. Do đó, mục tiêu của kỹ thuật đặc trưng là trích xuất tối đa các đặc trưng phù hợp từ dữ liệu thô để phục vụ thuật toán và mô hình. Thư viện Scikit-learn cung cấp các phương pháp xử lý đặc trưng khá hoàn chỉnh, bao gồm tiền xử lý dữ liệu, lựa chọn đặc trưng và giảm chiều dữ liệu.

2. Các phương pháp lựa chọn đặc trưng dữ liệu

  • Lựa chọn đặc trưng đơn biến
  • Loại bỏ đặc trưng đệ quy
  • Phân tích thành phần chính
  • Đánh giá mức độ quan trọng của đặc trưng

3. Lựa chọn đặc trưng là gì?

Lựa chọn đặc trưng là quy trình chọn ra các đặc trưng dữ liệu có khả năng cải thiện độ chính xác của dự đoán hoặc liên quan đến kết quả đầu ra cần quan tâm. Nếu dữ liệu chứa các thuộc tính không liên quan, độ chính xác của thuật toán sẽ giảm, đặc biệt với các thuật toán tuyến tính. Vì vậy, thực hiện lựa chọn đặc trưng giúp:

  • Giảm độ quá khớp (overfitting)
  • Tăng độ chính xác của thuật toán
  • Rút ngắn thời gian huấn luyện

4. Lựa chọn đặc trưng đơn biến

4.1 Phân tích thống kê

Phân tích thống kê có thể dùng để xác định các đặc trưng dữ liệu có tác động lớn nhất đến kết quả. Scikit-learn cung cấp lớp SelectKBest cho phép sử dụng nhiều phương pháp thống kê khác nhau để lựa chọn đặc trưng.

4.2 Kiểm định Chi-bình phương

Kiểm định Chi-bình phương kinh điển là phương pháp đánh giá mối tương quan giữa biến định tính độc lập và biến định tính phụ thuộc.

4.3 Ví dụ

from pandas import read_csv
from numpy import set_printoptions
from sklearn.feature_selection import SelectKBest, chi2

# Đọc dữ liệu
filename = 'pima.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names=names)
array = data.values
X = array[:, 0:8]
Y = array[:, 8]

# Lựa chọn đặc trưng với Chi-bình phương
selector = SelectKBest(score_func=chi2, k=4)
fit = selector.fit(X, Y)

# Hiển thị kết quả
set_printoptions(precision=3)
print("Điểm số các đặc trưng:", fit.scores_)
features = fit.transform(X)
print("Dữ liệu đặc trưng đã chọn:", features)

5. Loại bỏ đặc trưng đệ quy

5.1 Khái niệm

Loại bỏ đặc trưng đệ quy (RFE) sử dụng một mô hình cơ sở để huấn luyện qua nhiều vòng. Sau mỗi vòng, các đặc trưng có trọng số thấp sẽ bị loại bỏ, và mô hình tiếp tục huấn luyện trên tập đặc trưng mới. Quá trình này giúp tìm ra các đặc trưng quan trọng nhất dựa trên độ chính xác của mô hình cơ sở.

5.2 Ví dụ

Ví dụ dưới đây sử dụng hồi quy logistic làm mô hình cơ sở và RFE để chọn 3 đặc trưng quan trọng nhất:

from pandas import read_csv
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

# Đọc dữ liệu
filename = 'pima.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names=names)
array = data.values
X = array[:, 0:8]
Y = array[:, 8]

# Tạo mô hình và RFE
model = LogisticRegression()
rfe = RFE(estimator=model, n_features_to_select=3)
fit = rfe.fit(X, Y)

# Hiển thị kết quả
print("Số đặc trưng:", fit.n_features_)
print("Đặc trưng được chọn:", fit.support_)
print("Xếp hạng đặc trưng:", fit.ranking_)

6. Phân tích thành phần chính (PCA)

6.1 Khái niệm

Phân tích thành phần chính (PCA) sử dụng đại số tuyến tính để biến đổi và nén dữ liệu, thường được gọi là giảm chiều dữ liệu. Ngoài PCA, một phương pháp giảm chiều phổ biến khác là Phân tích phân biệt tuyến tính (LDA) – bản thân nó cũng là một thuật toán phân loại.

6.2 So sánh PCA và LDA

  • PCA ánh xạ dữ liệu gốc vào không gian có chiều thấp hơn, nhằm tối đa hóa độ phân tán của dữ liệu.
  • LDA hướng đến việc tối ưu khả năng phân loại.
  • PCA là phương pháp giảm chiều không giám sát.
  • LDA là phương pháp giảm chiều có giám sát.
  • Trong các thuật toán phân cụm, PCA thường được ưu tiên sử dụng.

6.3 Ví dụ

from pandas import read_csv
from sklearn.decomposition import PCA

# Đọc dữ liệu
filename = 'pima.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names=names)
array = data.values
X = array[:, 0:8]
Y = array[:, 8]

# Áp dụng PCA với 3 thành phần
pca = PCA(n_components=3)
fit = pca.fit(X)

# Hiển thị kết quả
print("Phương sai giải thích:", fit.explained_variance_ratio_)
print("Các thành phần chính:", fit.components_)

7. Đánh giá mức độ quan trọng của đặc trưng

7.1 Các thuật toán hỗ trợ

Các thuật toán như Bagging Decision Tree, Random Forest và Extra Trees đều có khả năng tính toán mức độ quan trọng của các đặc trưng dữ liệu.

7.2 Ví dụ

from pandas import read_csv
from sklearn.ensemble import ExtraTreesClassifier

# Đọc dữ liệu
filename = 'pima.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names=names)
array = data.values
X = array[:, 0:8]
Y = array[:, 8]

# Sử dụng Extra Trees để đánh giá
model = ExtraTreesClassifier()
fit = model.fit(X, Y)

# Hiển thị mức độ quan trọng
print("Mức độ quan trọng của các đặc trưng:", fit.feature_importances_)

Thẻ: python scikit-learn feature selection Chi-squared RFE

Đăng vào ngày 2 tháng 8 lúc 04:26