Tiện ích của kỹ thuật tính năng: Tại sao tạo các tính năng mới dựa trên các tính năng hiện có?


30

Tôi thường thấy mọi người tạo ra các tính năng mới dựa trên các tính năng hiện có trên một vấn đề máy học. Ví dụ: tại đây: https://trigininequality.wordpress.com/2013/09/08/basic-feature-engineering-with-the-titanic-data/ mọi người đã coi quy mô của gia đình một người là một tính năng mới, dựa trên về số lượng anh chị em và cha mẹ, đó là những tính năng hiện có.

Nhưng những gì của điểm này? Tôi không hiểu tại sao việc tạo các tính năng mới tương quan lại hữu ích. Đó không phải là công việc của thuật toán để tự làm điều đó sao?


Câu trả lời:


30

Ví dụ đơn giản nhất được sử dụng để minh họa điều này, là vấn đề XOR (xem hình ảnh bên dưới). Hãy tưởng tượng rằng bạn được cung cấp dữ liệu chứa y phối hợp và lớp nhị phân để dự đoán. Bạn có thể mong đợi thuật toán học máy của mình tự tìm ra ranh giới quyết định chính xác, nhưng nếu bạn tạo thêm tính năng z = x y , thì vấn đề sẽ trở nên tầm thường vì z > 0 cung cấp cho bạn tiêu chí quyết định gần như hoàn hảo để phân loại và bạn chỉ sử dụng đơn giản số học!xyz= =xyz>0

Vấn đề XOR

Vì vậy, trong nhiều trường hợp bạn có thể mong đợi từ thuật toán để tìm giải pháp, thay vào đó, bằng kỹ thuật tính năng, bạn có thể đơn giản hóa vấn đề. Các vấn đề đơn giản dễ dàng hơn và nhanh hơn để giải quyết, và cần các thuật toán ít phức tạp hơn. Các thuật toán đơn giản thường mạnh mẽ hơn, kết quả thường dễ hiểu hơn, chúng có khả năng mở rộng hơn (tài nguyên tính toán ít hơn, thời gian đào tạo, v.v.) và di động. Bạn có thể tìm thấy nhiều ví dụ và giải thích trong bài nói chuyện tuyệt vời của Vincent D. Warmerdam, được đưa ra từ hội nghị PyData ở London .

Hơn nữa, đừng tin tất cả mọi thứ mà các nhà tiếp thị học máy nói với bạn. Trong hầu hết các trường hợp, các thuật toán sẽ không "tự học". Bạn thường có giới hạn thời gian, tài nguyên, sức mạnh tính toán và dữ liệu thường có kích thước hạn chế và không gây ồn ào.

Đưa điều này đến mức cực đoan, bạn có thể cung cấp dữ liệu của mình dưới dạng hình ảnh ghi chú viết tay về kết quả thử nghiệm và chuyển chúng đến mạng lưới thần kinh phức tạp. Đầu tiên nó sẽ học cách nhận ra dữ liệu trên hình ảnh, sau đó học cách hiểu nó và đưa ra dự đoán. Để làm như vậy, bạn sẽ cần một máy tính mạnh mẽ và nhiều thời gian để đào tạo và điều chỉnh mô hình và cần một lượng dữ liệu khổng lồ vì sử dụng mạng thần kinh phức tạp. Cung cấp dữ liệu ở định dạng có thể đọc được trên máy tính (dưới dạng bảng số), đơn giản hóa vấn đề rất nhiều, vì bạn không cần tất cả nhận dạng ký tự. Bạn có thể nghĩ về kỹ thuật tính năng như một bước tiếp theo, nơi bạn chuyển đổi dữ liệu theo cách như vậy để tạo ra ý nghĩacác tính năng, do đó thuật toán của bạn thậm chí còn ít hơn để tự mình tìm ra. Để đưa ra một sự tương tự, nó giống như bạn muốn đọc một cuốn sách bằng tiếng nước ngoài, do đó bạn cần phải học ngôn ngữ trước, so với việc đọc nó được dịch bằng ngôn ngữ mà bạn hiểu.

Trong ví dụ về dữ liệu Titanic, thuật toán của bạn sẽ cần phải hiểu rằng việc tóm tắt các thành viên trong gia đình có ý nghĩa, để có được tính năng "quy mô gia đình" (vâng, tôi đang cá nhân hóa nó ở đây). Đây là một tính năng rõ ràng đối với con người, nhưng không rõ ràng nếu bạn xem dữ liệu chỉ là một số cột của các con số. Nếu bạn không biết cột nào có ý nghĩa khi được xem xét cùng với các cột khác, thuật toán có thể tìm ra nó bằng cách thử từng kết hợp có thể của các cột đó. Chắc chắn, chúng ta có những cách thông minh để làm điều này, nhưng vẫn, sẽ dễ dàng hơn nhiều nếu thông tin được cung cấp cho thuật toán ngay lập tức.


Cảm ơn bạn, nó được giải thích rất tốt và rất thú vị!
Matthieu Veron

Tôi thấy câu trả lời của bạn rất tốt nhưng tôi nghĩ rằng tốt hơn là đủ điều kiện một chút. Cụ thể, tôi nghĩ rằng kỹ thuật tính năng về các thuật ngữ tương tác không đơn giản hóa những thứ nhiều cho các thuật toán như RF (mặc dù nó vẫn có thể giúp) vì các RF tự nắm bắt các thuật ngữ tương tác ở một mức độ nhất định. Hãy cho tôi biết nếu tôi đang thiếu một cái gì đó quan trọng. Nhưng có trong kỹ thuật tính năng nói chung đơn giản hóa và giúp mọi thứ khá nhiều.
Poete Maudit

@PoeteMaudit đúng là cây quyết định (và vì vậy RF) mô hình một tương tác lớn, nhưng đó là một loại tương tác nhất định, không phải mọi tương tác có thể. Hơn nữa, kỹ thuật tính năng không chỉ là về tương tác.
Tim

Chắc chắn tôi đồng ý với quan điểm của bạn. Thứ nhất, các RF đó mô hình hóa một loại tương tác nhất định (ý bạn là chủ yếu là x * y?). Thứ hai, kỹ thuật tính năng đó chắc chắn không chỉ về tương tác.
Poete Maudit

14

Chà, nếu bạn có kế hoạch sử dụng một trình phân loại tuyến tính đơn giản, sẽ rất hợp lý khi tạo ra các tính năng mới là chức năng phi tuyến tính của các tính năng hiện có, đặc biệt nếu kiến ​​thức miền của bạn cho biết tính năng kết quả sẽ có ý nghĩa và nhiều thông tin. Lưu ý rằng trình phân loại tuyến tính không thể xem xét các tính năng phức tạp đó trừ khi bạn cung cấp rõ ràng cho chúng.

Lý tưởng nhất, nếu bạn sử dụng thuật toán phân loại phi tuyến đủ mạnh, nó sẽ có thể tạo ra một ranh giới quyết định xem xét các phép biến đổi phi tuyến tính tùy ý của các tính năng đầu vào nếu chúng có thông tin để phân loại. Tuy nhiên, trong thực tế hầu hết các phân loại phi tuyến tính chỉ nhìn vào một số loại biến đổi. Ví dụ, một hạt nhân đa thức SVM sẽ xem xét các tương tác đa thức giữa các tính năng, nhưng có thể một tính năng thông tin hơn có thể được tạo bằng cách áp dụng các loại biến đổi khác ...

Nói tóm lại, nếu kiến ​​thức miền chỉ ra rằng sự kết hợp các tính năng phi tuyến tính thủ công có thể mang tính thông tin, thì việc thêm nó vào bộ tính năng hiện có là điều hợp lý.


Vâng tôi hiểu ! Nhưng làm thế nào tôi có thể biết nếu các tính năng tôi tạo ra có ý nghĩa và nhiều thông tin? Ý tôi là, các vấn đề có thể có giải thích phản trực giác. Theo những gì tôi hiểu, tạo các tính năng là một cách để điều khiển thuật toán theo một hướng, để tiết kiệm thời gian cho các dự đoán của nó. Vì vậy, theo một số cách, chúng tôi đang ảnh hưởng đến thuật toán. Làm thế nào để xác minh rằng chúng tôi ảnh hưởng chính xác?
Matthieu Veron

2
Vâng, đó là kiến ​​thức về miền. Ví dụ, nếu bạn đang thiết kế một hệ thống chẩn đoán y tế, bạn có thể nói chuyện với các bác sĩ và hỏi họ những thông tin nào họ sử dụng để chẩn đoán bệnh nhân. Chẳng hạn, nếu một bác sĩ nói "Nếu bệnh nhân bị sốt và đau đầu, thì có khả năng anh ta bị cúm". Câu đó có thể chỉ ra rằng bao gồm một tính năng cờ mới cho thấy sự hiện diện của cả sốt và đau đầu có thể là một ý tưởng tốt (đặc biệt nếu bạn sử dụng trình phân loại tuyến tính, không thể tự "nhìn thấy" các tính năng tương tác đa thức).
Daniel López

1
Tuy nhiên, đây là một nghệ thuật hơn là một khoa học. Cuối cùng, bạn cần xác thực tính hiệu quả của các tính năng thủ công của mình bằng cách thử nghiệm các mô hình của bạn trên bộ thử nghiệm với giao thức thử nghiệm không thiên vị ...
Daniel López

3

Đúng là một số mô hình học máy có khả năng xử lý phi tuyến tính và tương tác giữa các biến, tuy nhiên, tùy thuộc vào tình huống, tôi thấy có ba lý do cần thiết.

  1. Y= =1

Ranh giới vòng tròn

x1x2y= =x0+c1x1+c2x2y= =x0+c1x12+c2x22

  1. Nếu bạn biết trước một số tính năng (từ kiến ​​thức hoặc kinh nghiệm kinh doanh), nó có thể giúp tạo ra chúng để tăng tốc thời gian chạy của mô hình và giúp mô hình của bạn dễ dàng. Ví dụ, trong ví dụ về dữ liệu Titanic của bạn và nếu bạn đang sử dụng mô hình phân loại cây quyết định. Nếu bạn biết rằng phụ nữ lớn tuổi (tuổi & giới tính) có nhiều khả năng sống sót hơn, bằng cách tạo một tính năng duy nhất nắm bắt thông tin, cây của bạn có thể phân tách một biến trên biến mới thay vì chia hai biến trên hai biến. Nó có thể tăng tốc thời gian tính toán nếu bạn biết trước rằng tính năng này rất quan trọng.

  2. Trong thế giới thực, bạn sẽ không nhận được một tập dữ liệu duy nhất như Kaggle cung cấp. Thay vào đó, bạn nhận được thông tin từ khắp nơi. Ví dụ: nếu bạn muốn dự đoán mức độ mất khách hàng của một công ty bán lẻ trực tuyến như Amazon, bạn có thông tin về nhân khẩu học của khách hàng, thông tin giao dịch mua hàng. Bạn cần tạo rất nhiều tính năng từ các nguồn khác nhau, trong trường hợp này, Bạn sẽ tìm thấy rất nhiều tính năng hữu ích có thể thu được / tổng hợp từ cấp độ giao dịch. Như Andrew Ng nói: Thông thường, khả năng thực hiện kỹ thuật tính năng xác định sự thành công hay thất bại của một dự án máy học.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.