paint-brush
Hướng dẫn dành cho người mới bắt đầu về Kỹ thuật tính năngtừ tác giả@dotslashbit
747 lượt đọc
747 lượt đọc

Hướng dẫn dành cho người mới bắt đầu về Kỹ thuật tính năng

từ tác giả Sahil9m2023/08/21
Read on Terminal Reader

dài quá đọc không nổi

Trong lĩnh vực máy học và khoa học dữ liệu, kỹ thuật tính năng được coi là nền tảng để cải thiện hiệu suất mô hình. Mặc dù các thuật toán và mô hình thường thu hút sự chú ý, nhưng chính các tính năng được chế tạo cẩn thận mới là nền tảng cho khả năng dự đoán. Hãy tưởng tượng bạn đang cố gắng xây dựng một ngôi nhà trên nền móng yếu – không có các tính năng mạnh mẽ, ngay cả những thuật toán tiên tiến nhất cũng có thể sụp đổ khi đối mặt với các bộ dữ liệu phức tạp.
featured image - Hướng dẫn dành cho người mới bắt đầu về Kỹ thuật tính năng
Sahil HackerNoon profile picture
0-item


Trong lĩnh vực máy học và khoa học dữ liệu, kỹ thuật tính năng được coi là nền tảng để cải thiện hiệu suất mô hình. Mặc dù các thuật toán và mô hình thường thu hút sự chú ý, nhưng chính các tính năng được chế tạo cẩn thận mới là nền tảng cho khả năng dự đoán. Hãy tưởng tượng bạn đang cố gắng xây dựng một ngôi nhà trên nền móng yếu – không có các tính năng mạnh mẽ, ngay cả những thuật toán tiên tiến nhất cũng có thể sụp đổ khi đối mặt với các bộ dữ liệu phức tạp.

Hiểu về kỹ thuật tính năng

Kỹ thuật tính năng là quá trình sáng tạo và chiến lược để lựa chọn, chuyển đổi và tạo các tính năng (biến đầu vào) từ dữ liệu thô để tối đa hóa hiệu suất của mô hình. Đó là nghệ thuật chuyển đổi dữ liệu thành thông tin chi tiết có thể hành động, cung cấp cho máy móc sự hiểu biết theo ngữ cảnh mà chúng cần để đưa ra dự đoán chính xác. Cho dù đó là dự đoán giá nhà, phân loại sở thích của khách hàng hay chẩn đoán tình trạng y tế, kỹ thuật tính năng nắm giữ chìa khóa để mở khóa tiềm năng ẩn trong dữ liệu của bạn.

Tầm quan trọng của sự khéo léo cẩn thận

Hãy tưởng tượng bạn được giao nhiệm vụ dự đoán giá nhà dựa trên nhiều yếu tố. Ban đầu, bạn có thể bị thu hút bởi những đặc điểm rõ ràng như diện tích, số phòng ngủ và vị trí. Tuy nhiên, điều kỳ diệu của kỹ thuật tính năng nằm ở chỗ khám phá ra những khía cạnh tinh vi hơn ảnh hưởng đến biến mục tiêu. Tỷ lệ phòng tắm so với phòng ngủ có ảnh hưởng đến giá không? Còn về sự hiện diện của lò sưởi hoặc tuổi của mái nhà thì sao?


Kỹ thuật tính năng không chỉ đơn thuần là tạo ra nhiều tính năng hơn; đó là về việc nhận ra khía cạnh nào của dữ liệu thực sự quan trọng. Quá trình này thường đòi hỏi kiến thức về lĩnh vực, sự sáng tạo và hiểu biết sâu sắc về vấn đề mà bạn đang giải quyết. Bằng cách tinh chỉnh các tính năng hiện có và tạo các tính năng mới, về cơ bản, bạn đang dạy mô hình của mình hiểu dữ liệu như một chuyên gia.

Tại sao bạn nên quan tâm đến kỹ thuật tính năng?

Câu trả lời nằm ở hiệu suất mô hình. Các tính năng được thiết kế tốt có thể dẫn đến sự hội tụ nhanh hơn trong quá trình đào tạo, giảm tình trạng thừa và cuối cùng là dự đoán chính xác hơn. Một mô hình máy học chỉ tốt bằng dữ liệu mà nó cung cấp và các tính năng được thiết kế tốt sẽ cung cấp sự thể hiện phong phú hơn, nhiều sắc thái hơn cho dữ liệu đó.


Trong bài viết này, chúng ta sẽ đi sâu vào thế giới của kỹ thuật tính năng bằng cách sử dụng bộ dữ liệu dự đoán giá nhà nâng cao từ Kaggle. Bằng cách làm theo, bạn sẽ hiểu rõ hơn về các kỹ thuật khác nhau có thể chuyển đổi dữ liệu thô thành các yếu tố dự đoán có giá trị và bạn sẽ thấy kết quả mô hình của mình được cải thiện như thế nào bằng cách áp dụng các phương pháp kỹ thuật tính năng khác nhau.


Vì vậy, để không lãng phí bất cứ lúc nào, hãy bắt đầu tìm hiểu về các phương pháp kỹ thuật tính năng khác nhau.

phương pháp

Bây giờ chúng ta đã thiết lập giai đoạn, đã đến lúc đi sâu vào thế giới thú vị của các kỹ thuật kỹ thuật tính năng tiên tiến. Trong phần này, tôi sẽ hướng dẫn bạn thực hiện từng bước bốn phương pháp hiệu quả có thể tăng cường hiệu quả cho các mô hình dự đoán của bạn. Mỗi phương pháp phục vụ một mục đích duy nhất, cung cấp thông tin chi tiết và cải tiến có thể tạo ra sự khác biệt đáng kể trong hiệu suất mô hình của bạn.

Phương pháp 1: Thông tin lẫn nhau - Trích xuất thông tin từ các mối quan hệ

Hãy tưởng tượng bạn có thể chọn các tính năng có ảnh hưởng nhất cho mô hình của mình với độ chính xác phẫu thuật. Thông tin lẫn nhau cho phép bạn đạt được điều đó. Bằng cách định lượng mối quan hệ giữa từng tính năng và biến mục tiêu, bạn có thể xác định các yếu tố chính ảnh hưởng đến dự đoán của mình. Chúng tôi sẽ hướng dẫn bạn mã và cung cấp giải thích chi tiết về từng bước, giúp bạn nắm vững kỹ thuật sâu sắc này.

Phương pháp 2: Phân cụm - Khám phá các mẫu thông qua phân nhóm

Các cụm thường ẩn các mẫu có giá trị trong dữ liệu của bạn. Với phân cụm, bạn có thể khám phá những viên ngọc ẩn này và tận dụng chúng để nâng cao hiểu biết về mô hình của bạn. Tôi sẽ hướng dẫn bạn quy trình áp dụng phân cụm KMeans để nhóm các phiên bản tương tự lại với nhau. Bạn sẽ tìm hiểu cách tạo các tính năng mới dựa trên các cụm này và quan sát tác động của chúng đối với hiệu suất của mô hình.

Phương pháp 3: Giảm kích thước PCA - Độ phức tạp ngưng tụ

Dữ liệu chiều cao có thể quá tải, nhưng Phân tích thành phần chính (PCA) đưa ra một giải pháp. Bằng cách xác định các kích thước có ảnh hưởng nhất, bạn có thể giảm độ phức tạp mà không phải hy sinh khả năng dự đoán. Hướng dẫn này sẽ hướng dẫn bạn chuyển đổi dữ liệu của mình bằng PCA, cung cấp thông tin chi tiết về cách kỹ thuật này có thể hợp lý hóa mô hình của bạn trong khi vẫn giữ được độ chính xác của nó.


Ngoài những phương pháp này, tôi cũng sẽ giới thiệu cho bạn Phép biến đổi toán học —một kỹ thuật thường bị bỏ qua nhưng có thể mang lại những kết quả mạnh mẽ. Bằng cách áp dụng các phép toán cho các cột đã chọn, bạn có thể định hình dữ liệu của mình để phù hợp hơn với các giả định của mô hình. Bạn sẽ khám phá các phép biến đổi logarit, căn bậc hai và nghịch đảo, minh họa cách chúng có thể khám phá các mối quan hệ ẩn và tăng độ chính xác cho mô hình của bạn.


Trong suốt phần này, tôi sẽ đưa ra các giải thích toàn diện để đảm bảo rằng bạn không chỉ nắm bắt được các khía cạnh kỹ thuật mà còn hiểu được lý do đằng sau ứng dụng của từng phương pháp. Cuối cùng, bạn sẽ có được một bộ công cụ có giá trị gồm các kỹ thuật kỹ thuật tính năng nâng cao có thể được áp dụng một cách tự tin để nâng cao các mô hình dự đoán của bạn trong các tình huống khác nhau.


Bạn đã sẵn sàng khám phá những điểm phức tạp của từng phương pháp, khám phá tiềm năng của chúng và trang bị cho mình kiến thức chuyên môn để thiết kế các tính năng chuyển thành các mô hình dự đoán mạnh mẽ và chính xác hơn chưa? Hãy bắt đầu cuộc hành trình giác ngộ này!

Mã số

Nhập gói

Trước tiên hãy nhập tất cả các gói mà bạn cần.

 import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error from sklearn.feature_selection import SelectKBest, mutual_info_regression from sklearn.cluster import KMeans from sklearn.decomposition import PCA from sklearn.preprocessing import LabelEncoder, StandardScaler import numpy as np

Lấy dữ liệu

Bây giờ, hãy lấy tập dữ liệu từ kaggle và xử lý trước.

 # Load the dataset data = pd.read_csv('train.csv') # Data preprocessing def preprocess_data(df): # Handle missing values df = df.fillna(df.median()) # Handle categorical variables df = pd.get_dummies(df, drop_first=True) return df data = preprocess_data(data) # Prepare the data X = data.drop('SalePrice', axis=1) y = data['SalePrice'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)


Để bắt đầu, hãy chạy một mô hình cơ sở mà không có bất kỳ tính năng kỹ thuật nào và đánh giá độ chính xác của nó. Sau đó, chúng tôi sẽ áp dụng riêng lẻ từng phương pháp trong số bốn phương pháp kỹ thuật tính năng (thông tin chung, phân cụm, giảm kích thước PCA và mã hóa nhãn) và so sánh tác động của chúng đối với hiệu suất của mô hình.

Mô hình đường cơ sở

Trước khi áp dụng bất kỳ kỹ thuật tính năng nào, chúng ta sẽ bắt đầu với một mô hình cơ bản. Ở đây, chúng ta sẽ sử dụng mô hình hồi quy tuyến tính đơn giản để dự đoán giá nhà bằng tập dữ liệu gốc.

 baseline_model = LinearRegression() baseline_model.fit(X_train, y_train) baseline_predictions = baseline_model.predict(X_test) baseline_rmse = mean_squared_error(y_test, baseline_predictions, squared=False) print(f"Baseline RMSE: {baseline_rmse}") # ------------------ OUTPUT ---------------- # Baseline RMSE: 49204.92

Trong mô hình cơ sở, bạn đang bắt đầu với một mô hình hồi quy tuyến tính đơn giản sử dụng các tính năng ban đầu như hiện tại. Bạn đang đào tạo mô hình bằng cách sử dụng dữ liệu đào tạo, đưa ra dự đoán trên dữ liệu thử nghiệm và tính toán sai số bình phương trung bình gốc (RMSE) để đo mức độ hiệu quả của mô hình trên dữ liệu không nhìn thấy.

Mô hình thông tin lẫn nhau

 # Method 1: Mutual Information mi_selector = SelectKBest(score_func=mutual_info_regression, k=10) X_train_mi = mi_selector.fit_transform(X_train, y_train) X_test_mi = mi_selector.transform(X_test) mi_model = LinearRegression() mi_model.fit(X_train_mi, y_train) mi_predictions = mi_model.predict(X_test_mi) mi_rmse = mean_squared_error(y_test, mi_predictions, squared=False) print(f"Mutual Information RMSE: {mi_rmse}") # ------------------ OUTPUT ----------------- # Mutual Information RMSE: 39410.99

Tại đây, bạn đang khám phá thông tin mà mỗi tính năng cung cấp về biến mục tiêu. Bạn chọn 10 tính năng hàng đầu có điểm số thông tin chung cao nhất với mục tiêu. Sau đó, bạn đào tạo một mô hình hồi quy tuyến tính mới chỉ sử dụng các tính năng đã chọn này. Điều này giúp đảm bảo rằng mô hình của bạn tập trung vào các tính năng có nhiều thông tin nhất và bạn tính toán RMSE để xem các dự đoán của mô hình này so với đường cơ sở như thế nào.

Mô hình phân cụm

 # Method 2: Clustering num_clusters = 5 kmeans = KMeans(n_clusters=num_clusters, random_state=42) X_clustered = X.copy() X_clustered['Cluster'] = kmeans.fit_predict(X) X_clustered = pd.get_dummies(X_clustered, columns=['Cluster'], prefix='Cluster') X_train_clustered, X_test_clustered, _, _ = train_test_split(X_clustered, y, test_size=0.2, random_state=42) cluster_model = LinearRegression() cluster_model.fit(X_train_clustered, y_train) cluster_predictions = cluster_model.predict(X_test_clustered) cluster_rmse = mean_squared_error(y_test, cluster_predictions, squared=False) print(f"Clustering RMSE: {cluster_rmse}") # ------------------- OUTPUT -------------- # Clustering RMSE: 47715.30

Bạn đang xem việc nhóm các trường hợp tương tự trong dữ liệu của mình bằng cách sử dụng phân cụm. Cụ thể, bạn sử dụng thuật toán KMeans để chia dữ liệu của mình thành các cụm. Mỗi phiên bản được gán cho một cụm và bạn thêm thông tin cụm này dưới dạng một tính năng phân loại mới. Bằng cách này, bạn đang cung cấp cho mô hình một cách để xem xét mối quan hệ giữa các trường hợp theo cụm của chúng. Sau khi đào tạo mô hình hồi quy tuyến tính trên dữ liệu được nhóm này, bạn tính toán RMSE để đánh giá hiệu suất của nó.

PCA - Mô hình giảm kích thước

 # Method 3: PCA Dimensionality Reduction scaler = StandardScaler() X_scaled = scaler.fit_transform(X_train) pca = PCA(n_components=10) X_train_pca = pca.fit_transform(X_scaled) X_test_pca = pca.transform(scaler.transform(X_test)) pca_model = LinearRegression() pca_model.fit(X_train_pca, y_train) pca_predictions = pca_model.predict(X_test_pca) pca_rmse = mean_squared_error(y_test, pca_predictions, squared=False) print(f"PCA RMSE: {pca_rmse}") # --------------- OUTPUT -------------- # PCA RMSE: 40055.78

PCA giúp bạn giảm độ phức tạp của dữ liệu bằng cách tóm tắt dữ liệu thành ít thứ nguyên hơn. Bạn chuẩn hóa dữ liệu của mình để đảm bảo tất cả các tính năng đều có cùng tỷ lệ. Sau đó, bạn sử dụng PCA để xác định các mẫu quan trọng nhất trong dữ liệu của mình và giảm số lượng tính năng xuống còn 10 thành phần chính. Đào tạo mô hình hồi quy tuyến tính trên các thành phần này, bạn có thể thu thập thông tin quan trọng nhất trong khi đơn giản hóa mô hình. RMSE giúp bạn đánh giá xem phương pháp này có hiệu quả hay không.

Mô hình phép biến đổi toán học

 # Method 5: Mathematical Transformations X_train_transformed = X_train.copy() X_test_transformed = X_test.copy() # Apply logarithmic transformation log_columns = ['GrLivArea', 'LotArea'] # Specify columns to apply log transformation X_train_transformed[log_columns] = np.log1p(X_train_transformed[log_columns]) X_test_transformed[log_columns] = np.log1p(X_test_transformed[log_columns]) # Apply square root transformation sqrt_columns = ['GarageArea', '1stFlrSF'] # Specify columns to apply square root transformation X_train_transformed[sqrt_columns] = np.sqrt(X_train_transformed[sqrt_columns]) X_test_transformed[sqrt_columns] = np.sqrt(X_test_transformed[sqrt_columns]) # Apply inverse transformation inv_columns = ['YearBuilt', 'OverallQual'] # Specify columns to apply inverse transformation X_train_transformed[inv_columns] = 1 / X_train_transformed[inv_columns] X_test_transformed[inv_columns] = 1 / X_test_transformed[inv_columns] math_transform_model = LinearRegression() math_transform_model.fit(X_train_transformed, y_train) math_transform_predictions = math_transform_model.predict(X_test_transformed) math_transform_rmse = mean_squared_error(y_test, math_transform_predictions, squared=False) print(f"Mathematical Transformations RMSE: {math_transform_rmse}") # ------------------ OUTPUT --------------- # Mathematical Transformations RMSE: 47143.21


Các phép biến đổi toán học liên quan đến việc thay đổi các giá trị đặc trưng bằng cách sử dụng các phép toán để đưa ra các mẫu cơ bản. Bạn áp dụng các phép biến đổi logarit, căn bậc hai và nghịch đảo cho các cột cụ thể. Ví dụ: phép biến đổi logarit giúp chuẩn hóa dữ liệu bị sai lệch, phép biến đổi căn bậc hai có thể giúp xử lý các giá trị ngoại lai và phép biến đổi nghịch đảo có thể nhấn mạnh mối quan hệ với các giá trị nhỏ. Bạn đào tạo một mô hình hồi quy tuyến tính bằng cách sử dụng các tính năng được chuyển đổi này và tính toán RMSE để đánh giá xem các phép biến đổi có cải thiện khả năng dự đoán của mô hình hay không.


Trong tất cả các phương pháp này, bạn đang thử nghiệm các kỹ thuật khác nhau để làm cho dữ liệu của mình phù hợp hơn cho việc lập mô hình. Mục tiêu là tìm phương pháp dẫn đến RMSE thấp nhất, cho biết dự đoán của mô hình của bạn gần với giá trị mục tiêu thực tế hơn và do đó chính xác hơn.

So sánh kết quả

  1. RMSE cơ sở: 49204,92 Đây là lỗi bình phương trung bình gốc (RMSE) của mô hình cơ sở, trong đó không có chuyển đổi hoặc kỹ thuật tính năng nào được áp dụng. Mô hình sử dụng các tính năng ban đầu như chúng vốn có. RMSE là 49204,92 cho biết lỗi dự đoán trung bình của mô hình cơ sở trên dữ liệu thử nghiệm.


  2. Thông tin lẫn nhau RMSE: 39410.99 RMSE này thể hiện hiệu suất của mô hình sau khi áp dụng phương pháp lựa chọn tính năng thông tin lẫn nhau. Nó thấp hơn đáng kể so với RMSE cơ sở, cho thấy rằng việc chọn k tính năng hàng đầu dựa trên điểm số thông tin chung của chúng đã dẫn đến hiệu suất mô hình được cải thiện.


  3. Phân cụm RMSE: 47715.30 RMSE ở đây tương ứng với hiệu suất của mô hình sau khi giới thiệu một tính năng phân loại mới dựa trên phân cụm. RMSE gần với RMSE cơ sở, cho thấy rằng việc giới thiệu phân cụm không dẫn đến cải thiện đáng kể trong trường hợp này.


  4. PCA RMSE: 40055.78 RMSE này phản ánh hiệu suất của mô hình sau khi áp dụng PCA để giảm kích thước. Nó cao hơn một chút so với RMSE thông tin chung nhưng thấp hơn RMSE cơ sở. Mô hình sử dụng các tính năng được chuyển đổi PCA dường như hoạt động khá tốt.


  5. Mã hóa nhãn RMSE: 49204.92 RMSE ở đây cho thấy hiệu suất của mô hình khi các biến phân loại được mã hóa nhãn. RMSE khớp với RMSE cơ sở, cho biết rằng việc sử dụng các tính năng được mã hóa nhãn không dẫn đến sự cải thiện đáng kể trong trường hợp này.


  6. Phép biến đổi toán học RMSE: 47143.21 RMSE này thể hiện hiệu suất của mô hình sau khi áp dụng các phép biến đổi toán học khác nhau cho các cột được chọn. RMSE thấp hơn RMSE cơ sở, cho thấy rằng những chuyển đổi này đã dẫn đến hiệu suất mô hình được cải thiện.


Tóm tắt:


  • Thông tin lẫn nhau dường như là phương pháp lựa chọn tính năng hiệu quả nhất trong số các phương pháp đã thử, vì nó làm giảm đáng kể RMSE.
  • PCABiến đổi toán học đều dẫn đến hiệu suất mô hình được cải thiện so với đường cơ sở.
  • Phân cụm không cho thấy sự cải thiện đáng kể trong trường hợp cụ thể này.


Hãy nhớ rằng các giá trị RMSE thực tế và cách giải thích của chúng phụ thuộc vào nhiều yếu tố khác nhau, chẳng hạn như tập dữ liệu, độ phức tạp của mô hình và bản chất của biến mục tiêu. Mục tiêu là thử nghiệm các phương pháp kỹ thuật tính năng khác nhau và chọn phương pháp mang lại hiệu suất tốt nhất trên dữ liệu không nhìn thấy.