Web888.vn
  • Khám phá
  • Kiến thức công nghệ
    • Học lập trình
      • Lập trình C/C++
      • Lập trình HTML
      • Lập trình Javascript
        • ReactJS framework
        • AngularJS framework
      • Cơ sở dữ liệu
        • Micrsoft SQL Server
      • Lập trình PHP
        • Lập trình PHP cơ bản
        • Laravel Framework
    • WORDPRESS
      • WordPress cơ bản
      • WordPress nâng cao
      • Chia sẻ WordPress
    • Machine Learning
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
  • Kinh doanh online – MMO
    • Tiếp thị liên kết
    • Drop shipping
    • Google Adsense
    • Kiếm tiền youtube
    • Tiền điện tử
    • Thương mại điện tử
  • Chia sẻ IT
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
  • Kỹ năng sống
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • Machine Learning
Phương pháp lựa chọn feature trong Machine Learning.

Phương pháp lựa chọn feature trong Machine Learning.

  • 10-10-2021
  • Dương Sơn
  • 0 Comments

Trên thực tế thì không phải data nào cũng clear, các feature đều có ích cho model. Chẳng hạn như khi ta muốn dự đoán giá một căn nhà thì feature chủ nhà là trai hay gái không quan trọng lắm. Do vậy, việc lựa chọn những features có ích với model là khá quan trọng, giúp giảm số chiều dữ liệu đầu vào.

Cơ bản thì chúng ta sẽ xử dụng xác suất để tính toán mối quan hệ giữa mỗi feature và trường mục tiêu cần dự đoán. Nhưng ý tưởng là vậy còn xử dụng công thức, thước đo nào để xác định feature đó không tốt thì còn là một thánh thức lớn. Trong bài viết này tôi và bạn cùng tìm hiểu qua một số công thức và cách tính nha!

Mục lục

  • Phương pháp lựa chọn feature
  • Filter
    • Giới thiệu về Constant, quasi-constant, duplicated features.
  • Độ tương quan (Correlation)
  • Phương pháp thống kê (Statistical measures)
  • Univariate ROC-AUC/RMSE
  • Tổng kết:

Phương pháp lựa chọn feature

Feature selection algorithm có thể được chia làm 3 loại: filter methods, wrapper methods, embedded methods.

Filter

Thằng này thì có một số đặc điểm sau:

  • Phụ thuộc vào đặc điểm của dữ liệu (feature characteristics)
  • Sẽ cho hiệu suất thấp hơn so với wrapper methods hoặc embedded methods.
  • Phương thức: Variance, Correlation, Univariate selection, Multivariate selection.

Giới thiệu về Constant, quasi-constant, duplicated features.

Constant features: chỉ hiển thị một giá trị cho tất cả observations trong dataset.

Phương pháp đơn giản nhất để xử lý constant features. Ta sẽ đặt ra một ngưỡng (threshold) cho phương sai, features nào không đáp ứng ngưỡng đó thì sẽ bị loại bỏ. (Có thể sử dụng sklearn để xử lý)

 from sklearn.feature_selection import VarianceThreshold
 sel = VarianceThreshold(threshold=0)
 # fit finds the features with zero variance.
 sel.fit(X_train) 
 # get_support() method returns which features are retained.
 retained_features = sel.get_support()

Nó sẽ trả ra một dãy bool, ta chỉ cần quan sát vào đó sẽ biết những feature nào không thỏa mãn điều kiện.

Quasi-constant features: Tương tự như constant features ở bên trên thôi, chỉ là ta có thể điều chỉnh ngưỡng threshold để điều kiện xét nghiêm ngặt hơn (ví dụ: threshold = 0.01 thì feature đó sẽ bị drop khi có 99% giá trị giống nhau).

Duplicated features: Là những feature tương đương nhau, ví dụ là một feature gốc và có một feature khác là label encoder của feature gốc, thì hai feature đó là tương đương nhau, ta có thể drop một feature đi. Hay là nhiều hàng giống nhau.

Phương pháp:

  • Với small dataset: Trong pandas có chức năng đánh giá xem một dataframe có chứa hàng duplicated không. Còn để kiểm tra các cột ta vẫn sử dụng hàm duplicated() chỉ cần transpose matrix là được.
  • Với big dataset: Nếu dùng transpose với dữ liệu lớn chắc chắn là rất tốn bộ nhớ và không khả thi. Do vậy chúng ta có thể sử dụng vòng lặp để tìm duplicated columns hoặc sử dụng thử viện numpy.
for_, idx = np.unique(df.to_numpy(), axis=1, return_index=True)
df_uniq = df.iloc[:, np.sort(idx)]

Độ tương quan (Correlation)

Sử dụng độ tương quan giữa 2 hay nhiều biến cũng là một cách hay để loại bỏ những feature có độ tương quan thấp. Việc loại bỏ các feature có độ tương quan cao với nhau giúp mô hình linear hoạt động tốt hơn, tránh bias giữa các features.

  • Có thể kiểm tra feature với target xác định độ tương quan thấp chúng ta có thể drop feature.
  • Hay kiểm tra tương quan giữa feature và feature nếu 2 feature có độ tương quan cao với nhau thì có thể hai feature đó có cùng thông tin và ta có thể drop 1 feature giúp giảm số chiều của dữ liệu đầu vào.

Cách xác định hệ số tương quan.

Pearson’s correlation coefficient

 sum((x1 -x1.mean) * (x2 - x2.mean) * (xn - xn.mean)) / var(x1) * var(x2) * var(xn)
  • Pearson’s coefficient có giá trị trong khoảng [-1,1]
  • Ý tưởng là sẽ tính toán độ tương quan giữa các feature với nhau, nếu 2 feature có độ tương quan lớn hơn threshold mà mình đặt ra thì sẽ drop một trong 2 feature đó.
corrmat = X_train.corr()
# plot
fig, ax = plt.subplots()
fig.set_size_inches(11,11)
sns.heatmap(corrmat)

def correlation(df, threshold):
 col_corr = set()
 corrmat = df.corr()
 for i in range(len(corrmat.columns)):
   for j in range(i):
   # interested in abs coefficient values
     if abs(corrmat.iloc[i, j]) > threshold:
 	col_corr.add(corrmat.columns[i]) 
 return col_corr

corr_feats = correlation(X_train, 0.8)
X_train.drop(labels=corr_feats, axis=1, inplace=True)

Phương pháp thống kê (Statistical measures)

Có một vài phương pháp và tiêu chí để lựa chọn feature theo phương pháp thống kê như sau:

  • Thông tin tương hỗ (Information Gain )
  • Univariate ROC-AUC/RMSE

Với mỗi cách trên cơ bản thì sẽ có 2 bước như sau:

  • Đánh giá features theo một tiêu chí nhất định: Mỗi một feature sẽ có một đánh giá độc lập với những feature khác khi xét mối quan hệ với target.
  • Lựa chọn fetures có ranking cao: Chúng ta có thể áp dụng classification hay regression models để đánh giá một feature có ranking cao hay không?. Và đương nhiên mức nào để biết ranking là cao hay thấp thì còn phụ thuộc vào mình.

Một vài lưu ý: chúng ta có thể áp dụng duplicated hay corelated features trước khi thực hiện bước này. Và phương pháp này còn có một nhược điểm lớn là có thể có 2 feature kết hợp với nhau thì sẽ ảnh hướng tới target và nếu ta chỉ áp dụng phương pháp này với mỗi feature xét với tagert thì có thể dẫn tới sai lầm. Do vần cần áp dụng thêm nhiều phương pháp để đánh giá giữa các feature với target.

Mutual information (information Gain)

Phương pháp này so sánh xác suất x và y xảy ra đồng thời qua phân phối và kết hợp với trường hợp khi 2 phân phối này độc lập.

 mutual information = sum{i,y} P(xi, yj) * log(P(xi,yj)/P(xi)*P(yj))

Nếu x và y là độc lập thì mutual information sẽ bằng 0.

Ta có thể sử dụng thư viện của python để chọn features:

  • Sử dụng sklearn.feature_selection.mutual_info_regression trên model regression.
  • Và mutual_info_classif để chọn với model classification.

Tiến hành tính toán mutual information giữa các biến và mục tiêu. Trả về mutual information của mỗi feature. Nếu giá trị càng nhỏ thì thông tin của feature đó với target càng thấp. (Nên preprocessing trước khi áp dụng phương pháp này).

Univariate ROC-AUC/RMSE

Ý tưởng là sẽ tính ROC-AUC của mỗi feature từ đó dùng model machine learning để dự dự đoán target. Ở đây chúng ta có thể sử dụng decision tree và đánh giá theo ROC-AUC hoặc RMSE. Từ đó sẽ lựa chọn features có metrics cao.

# use bnp-paribas dataset
 roc_vals = []
 for feat in X_train.columns:
 	clf = DecisionTreeClassifier()
 	clf.fit(X_train[feat].fillna(0).to_frame(), y_train)
 	y_scored = clf.predict_proba(X_test[feat].fillna(0).to_frame())
 	roc_vals.append(roc_auc_score(y_test, y_scored[:,1]))
 rocvals = pd.Series(roc_vals)
 rocvals.index = X_train.columns
 rocvals.sort_values(ascending=False)
 # number of features shows a roc-auc value higher than random.
 len(rocvals[rocvals>0.5])

Tổng kết:

Qua bài tìm hiểu này tôi và các bạn đã tìm hiểu một số phương pháp lựa chọn feature, làm giảm số chiều đầu vào giúp cho việc training model dễ dàng hơn.

Bài viết liên quan:

Gradient Descent và Cost
Ứng dụng CNN trong xử lý hình ảnh.
Sử dụng K-fold validation đánh giá model hiệu quả hơn.
GDA và Naive Bayes trong machine learing
Pipeline trong machine learning
Xử lý các giá trị ngoại lai.
Mô hình Linear regression
Phân loại machine
Phân loại các thuật toán trong Machine Learning
Tiền xử lý dữ liệu trong Machine Learning, ví dụ cụ thể.
main banner
Mở đầu về Machine Learning

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

FUNCTION (hàm) trong SQL Server

Vòng lặp và kiểm soát luồng chương trình trong PHP

Biểu thức chính quy (Regular Expression) trong PHP

Biến (Variable) trong PHP

Các kiểu dữ liệu trong PHP

Giới thiệu

web888.vn là chuyên trang chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với web888

© web888.vn - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.

Your personal data will be used to support your experience throughout this website, to manage access to your account, and for other purposes described in our privacy policy.

Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×