Đại diện: Kỹ thuật tính năng

Trong lập trình truyền thống, trọng tâm là mã. Trong các dự án học máy, trọng tâm sẽ chuyển sang tính đại diện. Điều đó có nghĩa là nhà phát triển có thể tập trung vào một mô hình bằng cách thêm và cải thiện các tính năng của mô hình đó.

Liên kết dữ liệu thô với các đối tượng

Phần bên trái của Hình 1 minh hoạ dữ liệu thô từ một nguồn dữ liệu đầu vào; phần bên phải minh hoạ một vectơ tính năng, là tập hợp các giá trị dấu phẩy động bao gồm các ví dụ trong tập dữ liệu của bạn. Kỹ thuật tính năng có nghĩa là biến đổi dữ liệu thô thành một vectơ đối tượng. Bạn có thể sẽ dành nhiều thời gian cho việc thiết kế tính năng.

Nhiều mô hình học máy phải biểu thị các tính năng dưới dạng vectơ được số thực vì các giá trị tính năng phải được nhân với trọng số của mô hình.

Dữ liệu thô được ánh xạ tới vectơ đối tượng thông qua một quá trình được gọi là kỹ thuật đối tượng.

Hình 1. Kỹ thuật tính năng ánh xạ dữ liệu thô với các tính năng học máy.

Ánh xạ các giá trị số

Dữ liệu số nguyên và dữ liệu dấu phẩy động không cần phương thức mã hoá đặc biệt vì chúng có thể được nhân với trọng số dạng số. Như đề xuất trong Hình 2, việc chuyển đổi giá trị số nguyên thô 6 thành giá trị tính năng 6.0 là không đơn giản:

Ví dụ về một tính năng có thể được sao chép trực tiếp từ dữ liệu thô

Hình 2. Liên kết giá trị số nguyên với giá trị dấu phẩy động.

Liên kết các giá trị phân loại

Các tính năng đặc biệt có một tập hợp các giá trị có thể riêng biệt. Ví dụ: có thể có một tính năng tên là street_name với các tuỳ chọn bao gồm:

{'Charleston Road', 'North Shoreline Boulevard', 'Shorebird Way', 'Rengstorff Avenue'}

Vì các mô hình không thể nhân chuỗi với trọng số đã học, nên chúng tôi sử dụng kỹ thuật tính năng để chuyển đổi chuỗi thành giá trị số.

Chúng ta có thể thực hiện việc này bằng cách xác định liên kết từ các giá trị tính năng, mà chúng ta gọi là từ vựng của các giá trị có thể có đến số nguyên. Vì không phải mọi đường phố trên thế giới đều sẽ xuất hiện trong tập dữ liệu của chúng tôi, nên chúng tôi có thể nhóm tất cả các đường phố khác vào một danh mục "khác" chung, được gọi là nhóm OOV (không có từ vựng).

Khi sử dụng phương pháp này, dưới đây là cách chúng ta có thể ánh xạ tên đường phố của mình thành các số:

  • bản đồ Đường Charleston đến 0
  • bản đồ Đại lộ North Sealine tới 1
  • lập bản đồ Đường đến Seabird đến số 2
  • lập bản đồ Đại lộ Rengstorff đến số 3
  • ánh xạ mọi thứ khác (OOV) đến 4

Tuy nhiên, nếu chúng ta trực tiếp kết hợp các số chỉ mục này vào mô hình của mình, thì điều đó sẽ áp dụng một số hạn chế có thể gây vấn đề:

  • Chúng ta sẽ học một trọng số duy nhất áp dụng cho mọi đường phố. Ví dụ: nếu biết trọng số là 6 cho street_name, chúng tôi sẽ nhân trọng số đó với 0 cho Đường Charleston, với 1 cho Đại lộ North Sealine, 2 cho Đường Seabird, v.v. Hãy xem xét một mô hình dự đoán giá nhà bằng cách sử dụng street_name làm tính năng. Ít có khả năng sẽ có sự điều chỉnh giá tuyến tính dựa trên tên đường phố và hơn nữa cũng giả định rằng bạn đã đặt hàng các con phố dựa trên giá nhà trung bình của chúng. Mô hình của chúng tôi cần sự linh hoạt khi tìm hiểu các trọng số khác nhau cho từng con phố sẽ được thêm vào giá ước tính bằng các tính năng khác.

  • Chúng tôi không tính đến các trường hợp street_name có thể nhận nhiều giá trị. Ví dụ: nhiều ngôi nhà nằm ở góc của hai con phố và không có cách nào để mã hoá thông tin đó trong giá trị street_name nếu giá trị đó chứa một chỉ mục duy nhất.

Để loại bỏ cả hai điều kiện ràng buộc này, chúng ta có thể tạo một vectơ nhị phân cho từng đối tượng phân loại trong mô hình biểu thị các giá trị như sau:

  • Đối với các giá trị áp dụng cho ví dụ này, hãy đặt các phần tử vectơ tương ứng thành 1.
  • Đặt tất cả các phần tử khác thành 0.

Độ dài của vectơ này bằng số phần tử trong từ vựng. Cách biểu diễn này được gọi là mã hoá một lần nóng khi giá trị duy nhất là 1 và mã hoá nhiều nóng khi nhiều giá trị là 1.

Hình 3 minh hoạ phương thức mã hoá một lần nóng của một đường phố cụ thể: Đường Seabird. Phần tử trong vectơ nhị phân của Waybird Way có giá trị 1, trong khi các phần tử của mọi đường phố khác có giá trị 0.

Ánh xạ giá trị chuỗi (

Hình 3. Liên kết địa chỉ đường phố qua phương thức mã hoá một lần nóng.

Phương pháp này giúp tạo một biến Boolean một cách hiệu quả cho mọi giá trị đối tượng (ví dụ: tên đường phố). Ở đây, nếu một ngôi nhà nằm trên Waybird Way, thì giá trị nhị phân sẽ chỉ là 1 đối với Waybird Way. Do đó, mô hình chỉ sử dụng trọng số cho Waybird Way.

Tương tự, nếu một ngôi nhà nằm ở góc của hai con phố, thì 2 giá trị nhị phân sẽ được đặt thành 1 và mô hình sẽ sử dụng cả hai trọng số tương ứng.

Nội dung trình bày thưa

Giả sử bạn có 1.000.000 tên đường phố khác nhau trong tập dữ liệu mà bạn muốn đưa vào làm giá trị cho street_name. Việc tạo rõ ràng một vectơ nhị phân gồm 1.000.000 phần tử trong đó chỉ có 1 hoặc 2 phần tử là đúng là cách biểu diễn rất không hiệu quả về cả thời gian lưu trữ và tính toán khi xử lý các vectơ này. Trong trường hợp này, phương pháp phổ biến là sử dụng cách biểu diễn thưa thớt, trong đó chỉ lưu trữ các giá trị khác 0. Trong các lần trình bày thưa, trọng số của mô hình độc lập vẫn được tìm hiểu cho từng giá trị tính năng như mô tả ở trên.