Có thể trộn dữ liệu phân loại và liên tục cho SVM (Support Vector Machines) không?


14

Tôi có một bộ dữ liệu như

+--------+------+-------------------+
| income | year |        use        |
+--------+------+-------------------+
|  46328 | 1989 | COMMERCIAL EXEMPT |
|  75469 | 1998 | CONDOMINIUM       |
|  49250 | 1950 | SINGLE FAMILY     |
|  82354 | 2001 | SINGLE FAMILY     |
|  88281 | 1985 | SHOP & HOUSE      |
+--------+------+-------------------+

Tôi nhúng nó vào một không gian vectơ định dạng LIBSVM

+1 1:46328 2:1989 3:1
-1 1:75469 2:1998 4:1
+1 1:49250 2:1950 5:1
-1 1:82354 2:2001 5:1
+1 1:88281 2:1985 6:1

Chỉ số tính năng:

  • 1 là "thu nhập"
  • 2 là "năm"
  • 3 là "sử dụng / EXEMPT THƯƠNG MẠI"
  • 4 là "sử dụng / CONDOMINIUM"
  • 5 là "sử dụng / MỘT GIA ĐÌNH"
  • 6 là "sử dụng / CỬA HÀNG & NHÀ"

Có thể đào tạo một máy vectơ hỗ trợ (SVM) với sự kết hợp của dữ liệu liên tục (năm, thu nhập) và phân loại (sử dụng) như thế này không?


3
Bạn nên đánh vần "SVM", ít nhất một lần.
Peter Flom - Tái lập Monica

1
Hãy chắc chắn rằng bạn chia tỷ lệ dữ liệu đó!
Patrick Caldon

Câu trả lời:


7

Đúng! Nhưng có lẽ không phải theo cách bạn muốn nói. Trong nghiên cứu của mình, tôi thường xuyên tạo ra các tính năng phân loại từ các tính năng có giá trị liên tục bằng thuật toán như phân vùng đệ quy . Tôi thường sử dụng cách tiếp cận này với việc triển khai SVMLight của các máy vectơ hỗ trợ, nhưng tôi cũng đã sử dụng nó với LibSVM. Bạn sẽ cần chắc chắn rằng bạn chỉ định các tính năng phân loại được phân vùng của mình cho một vị trí cụ thể trong vectơ tính năng của bạn trong quá trình đào tạo và phân loại, nếu không mô hình của bạn sẽ kết thúc một cách ngớ ngẩn.

Chỉnh sửa: Có nghĩa là, khi tôi thực hiện điều này, tôi gán n phần tử đầu tiên của vectơ cho các giá trị nhị phân được liên kết với đầu ra của phân vùng đệ quy. Trong mô hình tính năng nhị phân, bạn chỉ có một vectơ khổng lồ là 0 và 1, vì vậy mọi thứ trông giống với mô hình, trừ khi bạn chỉ ra rõ ràng các tính năng khác nhau ở đâu. Điều này có lẽ quá cụ thể, vì tôi tưởng tượng hầu hết các triển khai SVM sẽ tự làm điều này, nhưng, nếu bạn muốn tự lập trình, nó có thể là điều đáng suy nghĩ!


1
cảm ơn Kyle, bạn có thể cụ thể hơn một chút không? Bạn có ý nghĩa gì "gán các tính năng phân loại được phân vùng của bạn cho một địa điểm cụ thể"?
Seamus abshere

@SeamusAbshere Không có vấn đề! Tôi chỉnh sửa câu trả lời của tôi để giải quyết điều này!
Kyle.

Tôi cảm thấy như tôi đã nghe rằng libsvm thực hiện những gì bạn đang nói về tự động - bạn có suy nghĩ gì không?
Seamus abshere

@SeamusAbshere Tôi tưởng tượng bạn đúng, nhưng tôi không biết chắc chắn. Bây giờ tôi nghĩ về nó, tôi không chắc nó có thể hoạt động theo cách nào khác.
Kyle.

Được khuyến khích bởi câu trả lời của @ Kyle, tôi đã viết một thư viện Ruby ( VectorEmbed ) tự động chuyển đổi (nhúng) này, cho cả phân loại (sử dụng băm Murmur32) và dữ liệu liên tục. Nó xuất ra các tập tin định dạng libsvm.
Seamus abshere
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.