ML với Python - Lựa chọn tính năng dữ liệu
Trong chương trước, chúng ta đã xem chi tiết cách xử lý trước và chuẩn bị dữ liệu cho học máy. Trong chương này, chúng ta hãy hiểu chi tiết lựa chọn tính năng dữ liệu và các khía cạnh khác nhau liên quan đến nó.
Tầm quan trọng của việc lựa chọn tính năng dữ liệu
Hiệu suất của mô hình học máy tỷ lệ thuận với các tính năng dữ liệu được sử dụng để đào tạo nó. Hiệu suất của mô hình ML sẽ bị ảnh hưởng tiêu cực nếu các tính năng dữ liệu được cung cấp cho nó không liên quan. Mặt khác, việc sử dụng các tính năng dữ liệu có liên quan có thể làm tăng độ chính xác của mô hình ML của bạn, đặc biệt là hồi quy tuyến tính và logistic.
Bây giờ câu hỏi nảy sinh rằng lựa chọn tính năng tự động là gì? Nó có thể được định nghĩa là quá trình với sự trợ giúp của chúng tôi chọn các tính năng đó trong dữ liệu của chúng tôi có liên quan nhất đến đầu ra hoặc biến dự đoán mà chúng tôi quan tâm. Nó còn được gọi là lựa chọn thuộc tính.
Sau đây là một số lợi ích của việc lựa chọn tính năng tự động trước khi lập mô hình dữ liệu:
Thực hiện lựa chọn tính năng trước khi lập mô hình dữ liệu sẽ làm giảm sự trang bị quá mức.
Thực hiện lựa chọn tính năng trước khi lập mô hình dữ liệu sẽ làm tăng độ chính xác của mô hình ML.
Thực hiện lựa chọn tính năng trước khi lập mô hình dữ liệu sẽ giảm thời gian đào tạo
Kỹ thuật lựa chọn tính năng
Sau đây là các kỹ thuật chọn tính năng tự động mà chúng ta có thể sử dụng để lập mô hình dữ liệu ML bằng Python:
Lựa chọn đơn biến
Kỹ thuật lựa chọn tính năng này rất hữu ích trong việc lựa chọn các tính năng đó, với sự trợ giúp của kiểm tra thống kê, có mối quan hệ chặt chẽ nhất với các biến dự đoán. Chúng ta có thể triển khai kỹ thuật lựa chọn tính năng đơn biến với sự trợ giúp của SelectKBest0class của thư viện Python scikit-learning.
Example
Trong ví dụ này, chúng tôi sẽ sử dụng tập dữ liệu bệnh tiểu đường của người da đỏ Pima để chọn 4 thuộc tính có các tính năng tốt nhất với sự trợ giúp của kiểm tra thống kê chi-bình phương.
from pandas import read_csv
from numpy import set_printoptions
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values
Tiếp theo, chúng ta sẽ tách mảng thành các thành phần đầu vào và đầu ra -
X = array[:,0:8]
Y = array[:,8]
Các dòng mã sau sẽ chọn các tính năng tốt nhất từ tập dữ liệu -
test = SelectKBest(score_func=chi2, k=4)
fit = test.fit(X,Y)
Chúng tôi cũng có thể tóm tắt dữ liệu cho đầu ra theo lựa chọn của chúng tôi. Ở đây, chúng tôi đang đặt độ chính xác thành 2 và hiển thị 4 thuộc tính dữ liệu với các tính năng tốt nhất cùng với điểm tốt nhất của từng thuộc tính -
set_printoptions(precision=2)
print(fit.scores_)
featured_data = fit.transform(X)
print ("\nFeatured data:\n", featured_data[0:4])
Output
[ 111.52 1411.89 17.61 53.11 2175.57 127.67 5.39 181.3 ]
Featured data:
[
[148. 0. 33.6 50. ]
[ 85. 0. 26.6 31. ]
[183. 0. 23.3 32. ]
[ 89. 94. 28.1 21. ]
]
Loại bỏ tính năng đệ quy
Như tên cho thấy, kỹ thuật lựa chọn tính năng RFE (Loại bỏ tính năng đệ quy) loại bỏ các thuộc tính một cách đệ quy và xây dựng mô hình với các thuộc tính còn lại. Chúng ta có thể triển khai kỹ thuật lựa chọn tính năng RFE với sự trợ giúp của lớp RFE của thư viện Python scikit-learning.
Thí dụ
Trong ví dụ này, chúng tôi sẽ sử dụng RFE với thuật toán hồi quy logistic để chọn 3 thuộc tính tốt nhất có các tính năng tốt nhất từ tập dữ liệu Bệnh tiểu đường người da đỏ Pima.
from pandas import read_csv
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values
Tiếp theo, chúng ta sẽ tách mảng thành các thành phần đầu vào và đầu ra của nó -
X = array[:,0:8]
Y = array[:,8]
Các dòng mã sau sẽ chọn các tính năng tốt nhất từ tập dữ liệu -
model = LogisticRegression()
rfe = RFE(model, 3)
fit = rfe.fit(X, Y)
print("Number of Features: %d")
print("Selected Features: %s")
print("Feature Ranking: %s")
Đầu ra
Number of Features: 3
Selected Features: [ True False False False False True True False]
Feature Ranking: [1 2 3 5 6 1 1 4]
Chúng ta có thể thấy ở đầu ra trên, RFE chọn preg, mass và pedi là 3 tính năng tốt nhất đầu tiên. Chúng được đánh dấu là 1 trong đầu ra.
Phân tích thành phần chính (PCA)
PCA, thường được gọi là kỹ thuật giảm dữ liệu, là kỹ thuật lựa chọn tính năng rất hữu ích vì nó sử dụng đại số tuyến tính để chuyển đổi tập dữ liệu thành dạng nén. Chúng ta có thể triển khai kỹ thuật lựa chọn tính năng PCA với sự trợ giúp của lớp PCA của thư viện Python scikit-learning. Chúng ta có thể chọn số lượng các thành phần chính trong đầu ra.
Thí dụ
Trong ví dụ này, chúng tôi sẽ sử dụng PCA để chọn 3 thành phần chính tốt nhất từ bộ dữ liệu bệnh tiểu đường của người da đỏ Pima.
from pandas import read_csv
from sklearn.decomposition import PCA
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values
Tiếp theo, chúng ta sẽ tách mảng thành các thành phần đầu vào và đầu ra -
X = array[:,0:8]
Y = array[:,8]
Các dòng mã sau sẽ trích xuất các tính năng từ tập dữ liệu:
pca = PCA(n_components=3)
fit = pca.fit(X)
print("Explained Variance: %s") % fit.explained_variance_ratio_
print(fit.components_)
Đầu ra
Explained Variance: [ 0.88854663 0.06159078 0.02579012]
[
[
-2.02176587e-03 9.78115765e-02 1.60930503e-02 6.07566861e-02
9.93110844e-01 1.40108085e-02 5.37167919e-04 -3.56474430e-03
]
[
2.26488861e-02 9.72210040e-01 1.41909330e-01 -5.78614699e-02
-9.46266913e-02 4.69729766e-02 8.16804621e-04 1.40168181e-01
]
[
-2.24649003e-02 1.43428710e-01 -9.22467192e-01 -3.07013055e-01
2.09773019e-02 -1.32444542e-01 -6.39983017e-04 -1.25454310e-01
]
]
Chúng ta có thể quan sát từ đầu ra ở trên rằng 3 Thành phần chính có chút tương đồng với dữ liệu nguồn.
Tầm quan trọng của tính năng
Như tên cho thấy, kỹ thuật quan trọng của đối tượng địa lý được sử dụng để chọn các đối tượng địa lý quan trọng. Về cơ bản, nó sử dụng bộ phân loại có giám sát được đào tạo để chọn các tính năng. Chúng ta có thể thực hiện kỹ thuật lựa chọn tính năng này với sự trợ giúp của lớp ExtraTreeClassifier của thư viện Python scikit-learning.
Thí dụ
Trong ví dụ này, chúng tôi sẽ sử dụng ExtraTreeClassifier để chọn các tính năng từ tập dữ liệu bệnh tiểu đường của người da đỏ Pima.
from pandas import read_csv
from sklearn.ensemble import ExtraTreesClassifier
path = r'C:\Desktop\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(data, names=names)
array = dataframe.values
Tiếp theo, chúng ta sẽ tách mảng thành các thành phần đầu vào và đầu ra -
X = array[:,0:8]
Y = array[:,8]
Các dòng mã sau sẽ trích xuất các tính năng từ tập dữ liệu:
model = ExtraTreesClassifier()
model.fit(X, Y)
print(model.feature_importances_)
Đầu ra
[ 0.11070069 0.2213717 0.08824115 0.08068703 0.07281761 0.14548537 0.12654214 0.15415431]
Từ kết quả đầu ra, chúng ta có thể quan sát rằng có điểm số cho mỗi thuộc tính. Điểm càng cao thì mức độ quan trọng của thuộc tính đó càng cao.