Những loại máy học để lựa chọn, nói chung? [đóng cửa]


207

Giả sử tôi đang làm việc trên một số vấn đề phân loại. (Phát hiện gian lận và nhận xét spam là hai vấn đề tôi đang xử lý ngay bây giờ, nhưng tôi tò mò về bất kỳ nhiệm vụ phân loại nào nói chung.)

Làm thế nào để tôi biết nên sử dụng phân loại nào?

  1. Cây quyết định
  2. SVM
  3. Bayes
  4. Mạng lưới thần kinh
  5. Hàng xóm K-gần nhất
  6. Học hỏi
  7. Thuật toán di truyền
  8. Quy trình quyết định của Markov
  9. Mạng lưới thần kinh chuyển đổi
  10. Hồi quy tuyến tính hoặc hồi quy logistic
  11. Tăng cường, đóng bao, đóng gói
  12. Leo đồi ngẫu nhiên hoặc ủ mô phỏng
  13. ...

Trong trường hợp nào là một trong những lựa chọn đầu tiên "tự nhiên" này, và các nguyên tắc để chọn cái đó là gì?

Ví dụ về loại câu trả lời tôi đang tìm kiếm (từ cuốn Giới thiệu về cuốn sách truy xuất thông tin của Manning và cộng sự ):

a. Nếu dữ liệu của bạn được gắn nhãn, nhưng bạn chỉ có một số lượng giới hạn, bạn nên sử dụng một bộ phân loại có độ lệch cao (ví dụ: Naive Bayes) .

Tôi đoán điều này là do một bộ phân loại thiên vị cao hơn sẽ có phương sai thấp hơn, điều này tốt vì lượng dữ liệu nhỏ.

b. Nếu bạn có rất nhiều dữ liệu, thì trình phân loại không thực sự quan trọng lắm, vì vậy có lẽ bạn chỉ nên chọn một trình phân loại có khả năng mở rộng tốt.

  1. Hướng dẫn khác là gì? Ngay cả những câu trả lời như "nếu bạn sẽ phải giải thích mô hình của mình cho một số người quản lý cấp trên, thì có lẽ bạn nên sử dụng cây quyết định, vì các quy tắc quyết định khá minh bạch" là tốt. Tôi quan tâm ít hơn về các vấn đề thực hiện / thư viện, mặc dù.

  2. Ngoài ra, đối với một câu hỏi hơi riêng biệt, bên cạnh các trình phân loại Bayes tiêu chuẩn, có "các phương pháp tiên tiến nhất" để phát hiện spam nhận xét (trái ngược với spam email) không?


7
Để trả lời "nơi tốt nhất để đặt câu hỏi này", bạn cũng có thể muốn thử thống kê.stackexchange.com
jxramos

Câu trả lời:


94

nhập mô tả hình ảnh ở đây

Trước hết, bạn cần xác định vấn đề của bạn. Nó phụ thuộc vào loại dữ liệu bạn có và nhiệm vụ mong muốn của bạn là gì.

Nếu bạn là Predicting Category:

  • Bạn có Labeled Data
    • Bạn cần phải làm theo Classification Approachvà các thuật toán của nó
  • Bạn không có Labeled Data
    • Bạn cần phải đi cho Clustering Approach

Nếu bạn là Predicting Quantity:

  • Bạn cần phải đi cho Regression Approach

Nếu không thì

  • Bạn có thể đi cho Dimensionality Reduction Approach

Có các thuật toán khác nhau trong mỗi phương pháp được đề cập ở trên. Sự lựa chọn của một thuật toán cụ thể phụ thuộc vào kích thước của tập dữ liệu.

Nguồn: http://scikit-learn.org/urdy/tutorial/machine_learning_map/


60

Lựa chọn mô hình bằng cách sử dụng xác nhận chéo có thể là những gì bạn cần.

Xác nhận chéo

Những gì bạn làm chỉ đơn giản là chia dữ liệu của bạn thành k tập hợp con không chồng chéo (nếp gấp), huấn luyện một mô hình bằng cách sử dụng các nếp gấp k-1 và dự đoán hiệu suất của nó bằng cách sử dụng nếp gấp mà bạn để lại. Điều này bạn làm cho mỗi sự kết hợp có thể của các nếp gấp (đầu tiên để lại lần đầu tiên ra sau đó, sau đó lần thứ 2, ..., sau đó là lần thứ hai và đào tạo với các nếp gấp còn lại). Sau khi kết thúc, bạn ước tính hiệu suất trung bình của tất cả các nếp gấp (cũng có thể là độ lệch / độ lệch chuẩn của hiệu suất).

Cách chọn tham số k phụ thuộc vào thời gian bạn có. Giá trị thông thường cho k là 3, 5, 10 hoặc thậm chí N, trong đó N là kích thước của dữ liệu của bạn (tương tự như xác thực chéo một lần ). Tôi thích 5 hoặc 10.

Lựa chọn mô hình

Giả sử bạn có 5 phương thức (ANN, SVM, KNN, v.v.) và 10 kết hợp tham số cho mỗi phương thức (tùy thuộc vào phương thức). Bạn chỉ cần chạy xác thực chéo cho từng kết hợp phương thức và tham số (5 * 10 = 50) và chọn mô hình, phương thức và tham số tốt nhất. Sau đó, bạn đào tạo lại với phương pháp và tham số tốt nhất trên tất cả dữ liệu của bạn và bạn có mô hình cuối cùng.

Có một số điều nữa để nói. Ví dụ, nếu bạn sử dụng nhiều phương thức và kết hợp tham số cho từng phương thức , rất có thể bạn sẽ phù hợp hơn. Trong những trường hợp như thế này, bạn phải sử dụng xác nhận chéo lồng nhau .

Xác nhận chéo lồng nhau

Trong xác thực chéo lồng nhau , bạn thực hiện xác nhận chéo trên thuật toán chọn mô hình.

Một lần nữa, trước tiên bạn chia dữ liệu của bạn thành k lần. Sau mỗi bước, bạn chọn k-1 làm dữ liệu đào tạo và phần còn lại làm dữ liệu thử nghiệm của bạn. Sau đó, bạn chạy lựa chọn mô hình (quy trình tôi đã giải thích ở trên) cho mỗi kết hợp có thể của các nếp gấp k đó. Sau khi hoàn thành điều này, bạn sẽ có k mô hình, một mô hình cho mỗi kết hợp các nếp gấp. Sau đó, bạn kiểm tra từng mô hình với dữ liệu thử nghiệm còn lại và chọn mô hình tốt nhất. Một lần nữa, sau khi có mô hình cuối cùng, bạn huấn luyện một mô hình mới với cùng phương thức và tham số trên tất cả dữ liệu bạn có. Đó là mô hình cuối cùng của bạn.

Tất nhiên, có nhiều biến thể của các phương pháp này và những thứ khác tôi không đề cập đến. Nếu bạn cần thêm thông tin về những điều này hãy tìm một số ấn phẩm về những chủ đề này.


5
Đúng, tôi biết về xác thực chéo - Tôi đã tự hỏi thêm về lý do tiên nghiệm để chọn một trình phân loại nhất định (và sau đó tôi có thể sử dụng xác thực chéo để điều chỉnh một số tham số hoặc để chọn giữa một số bộ phân loại nhỏ hơn). Cảm ơn, mặc dù!
LM.

45

Cuốn sách " OpenCV " có hai trang tuyệt vời về điều này trên các trang 462-463 . Tìm kiếm bản xem trước của Amazon cho từ "phân biệt đối xử" (có thể cả sách google nữa) sẽ cho phép bạn xem các trang được đề cập. Hai trang này là viên ngọc lớn nhất mà tôi đã tìm thấy trong cuốn sách này.

Nói ngắn gọn:

  • Tăng cường - thường hiệu quả khi có sẵn một lượng lớn dữ liệu đào tạo .

  • Cây ngẫu nhiên - thường rất hiệu quả và cũng có thể thực hiện hồi quy .

  • Hàng xóm gần nhất của K - điều đơn giản nhất bạn có thể làm, thường hiệu quả nhưng chậm và đòi hỏi nhiều bộ nhớ .

  • Mạng lưới thần kinh - Chậm đào tạo nhưng chạy rất nhanh , vẫn hoạt động tối ưu để nhận dạng chữ cái .

  • SVM - Trong số tốt nhất với dữ liệu hạn chế , nhưng chỉ thua các cây tăng hoặc ngẫu nhiên khi có sẵn bộ dữ liệu lớn .


39

Những điều bạn có thể cân nhắc trong việc lựa chọn sử dụng thuật toán nào sẽ bao gồm:

  1. Bạn có cần phải đào tạo tăng dần (trái ngược với đợt)?

    Nếu bạn cần cập nhật trình phân loại của mình với dữ liệu mới thường xuyên (hoặc bạn có hàng tấn dữ liệu), có lẽ bạn sẽ muốn sử dụng Bayesian. Mạng lưới thần kinh và SVM cần phải làm việc trên dữ liệu đào tạo trong một lần.

  2. Là dữ liệu của bạn bao gồm chỉ phân loại , hoặc chỉ số hoặc cả hai ?

    Tôi nghĩ Bayesian hoạt động tốt nhất với dữ liệu phân loại / nhị thức. Cây quyết định không thể dự đoán giá trị số.

  3. Bạn hoặc khán giả của bạn cần phải hiểu cách phân loại hoạt động?

    Sử dụng Bayesian hoặc cây quyết định, vì những điều này có thể dễ dàng giải thích cho hầu hết mọi người. Mạng thần kinh và SVM là "hộp đen" theo nghĩa bạn không thể thực sự thấy cách chúng phân loại dữ liệu.

  4. Bạn cần bao nhiêu tốc độ phân loại ?

    Các SVM rất nhanh khi phân loại vì họ chỉ cần xác định phía nào của "dòng" dữ liệu của bạn được bật. Cây quyết định có thể chậm đặc biệt là khi chúng phức tạp (ví dụ rất nhiều nhánh).

  5. Phức tạp .

    Mạng lưới thần kinh và SVM có thể xử lý phân loại phi tuyến tính phức tạp.


2
Chương sách này có thể cung cấp thêm thông tin về độ phức tạp nlp.stanford.edu/IR-book/html/htmledition/ Kẻ
siêu mẫu

31

Như Giáo sư Andrew Ng thường tuyên bố: luôn bắt đầu bằng cách thực hiện một thuật toán thô, bẩn, và sau đó lặp lại tinh chỉnh nó .

Để phân loại, Naive Bayes là một người khởi đầu tốt, vì nó có hiệu suất tốt, có khả năng mở rộng cao và có thể thích ứng với hầu hết mọi loại nhiệm vụ phân loại. Ngoài ra 1NN (Hàng xóm gần nhất chỉ có 1 hàng xóm) là thuật toán phù hợp nhất không rắc rối (vì dữ liệu sẽ là mô hình và do đó bạn không phải quan tâm đến sự phù hợp về chiều của ranh giới quyết định của mình), chỉ vấn đề là chi phí tính toán (bậc hai vì bạn cần tính toán ma trận khoảng cách, do đó nó có thể không phù hợp với dữ liệu chiều cao).

Một thuật toán khởi đầu tốt khác là Rừng ngẫu nhiên (bao gồm các cây quyết định), đây là khả năng mở rộng cao cho bất kỳ số lượng kích thước nào và thường có hiệu suất khá chấp nhận được. Cuối cùng, có các thuật toán di truyền , có tỷ lệ phù hợp với mọi chiều và mọi dữ liệu với kiến ​​thức tối thiểu về dữ liệu, với cách thực hiện tối thiểu và đơn giản nhất là thuật toán di truyền vi khuẩn (chỉ có một dòng mã C! Inman Harvey in 1996), và một trong những phức tạp nhất là CMA-ES và MOGA / e-MOEA.

Và hãy nhớ rằng, thông thường, bạn không thể thực sự biết cái gì sẽ hoạt động tốt nhất trên dữ liệu của mình trước khi bạn thử các thuật toán thực sự.

Một lưu ý phụ, nếu bạn muốn một khung lý thuyết để kiểm tra giả thuyết và hiệu suất lý thuyết của bạn cho một vấn đề nhất định, bạn có thể sử dụng khung học tập PAC (Có lẽ gần đúng) (hãy cẩn thận: nó rất trừu tượng và phức tạp!), Nhưng để Tóm lại, ý chính của việc học PAC nói rằng bạn nên sử dụng thuật toán ít phức tạp hơn, nhưng đủ phức tạp (độ phức tạp là chiều tối đa mà thuật toán có thể phù hợp) có thể phù hợp với dữ liệu của bạn. Nói cách khác, sử dụng dao cạo của Occam.


11

Sam Roweis thường nói rằng bạn nên thử Bayes ngây thơ, hồi quy logistic, hàng xóm gần nhất và phân biệt đối xử tuyến tính của Fisher trước mọi thứ khác.


8

Tôi đồng ý rằng bạn luôn chạy các trình phân loại cơ bản trước để hiểu được dữ liệu của bạn. Thường xuyên hơn không (theo kinh nghiệm của tôi ít nhất) họ đã đủ tốt.

Vì vậy, nếu bạn có dữ liệu được giám sát, hãy huấn luyện bộ phân loại Naive Bayes. Nếu bạn có dữ liệu không được giám sát, bạn có thể thử phân cụm k-nghĩa.

Một tài nguyên khác là một trong những video bài giảng của loạt video Stanford Machine Learning , mà tôi đã xem một lúc trước. Trong video 4 hoặc 5, tôi nghĩ, giảng viên thảo luận về một số quy ước được chấp nhận chung khi đào tạo phân loại, lợi thế / đánh đổi, v.v.


1
Định lý Bữa trưa không có bữa trưa miễn phí Định lý cho biết rằng không có một mô hình nào hoạt động tốt nhất cho mọi vấn đề. Các giả định của một mô hình tuyệt vời cho một vấn đề có thể không đúng với một vấn đề khác, vì vậy, thông thường trong học máy để thử nhiều mô hình và tìm ra một mô hình phù hợp nhất cho một vấn đề cụ thể.
msarafzadeh

5

Bạn nên luôn luôn tính đến suy luận và đánh đổi dự đoán .

Nếu bạn muốn hiểu mối quan hệ phức tạp đang xảy ra trong dữ liệu của mình thì bạn nên sử dụng thuật toán suy luận phong phú (ví dụ: hồi quy tuyến tính hoặc lasso). Mặt khác, nếu bạn chỉ quan tâm đến kết quả, bạn có thể đi với các thuật toán có chiều cao và phức tạp hơn (nhưng ít diễn giải hơn), như các mạng thần kinh.


3

Lựa chọn thuật toán phụ thuộc vào kịch bản và loại và kích thước của tập dữ liệu. Có nhiều yếu tố khác.

Đây là một bảng cheat ngắn cho học máy cơ bản.

Tại đây bạn có thể xác thực kịch bản của mình bằng một bảng cheat đơn giản


-2

Trước hết, nó phụ thuộc vào loại vấn đề bạn đang xử lý cho dù đó là phân loại hay hồi quy. Sau đó chọn mô hình của bạn một cách khôn ngoan. Nó phụ thuộc vào một mô hình cụ thể một mô hình cụ thể tốt hơn các mô hình khác. Giả sử bạn đang làm việc trên Wine_dataset từ thư viện sklearn và trước tiên, bạn đã cố gắng đào tạo dữ liệu với kernel Svm theo tuyến tính và bạn nhận được một số độ chính xác và sau đó bạn nghĩ rằng nó không thỏa mãn nên bạn đã cố gắng đào tạo dữ liệu của mình bằng Quyết định () và sau đó bạn đã thử với RandomForestClassifier (). Sau đó, độ chính xác nào sẽ tốt hơn hoặc bạn có thể nói phù hợp với dữ liệu của mình, bạn có thể kết luận điều đó. Có một sự khác biệt nhỏ về cú pháp mà bạn sẽ tìm thấy trong khi tiếp tục thay đổi mô hình để thử nghiệm. Vì vậy, tất cả tốt nhất và hiểu vấn đề tốt.


1
Câu hỏi của OP (Áp phích gốc) là: Làm thế nào để tôi biết nên sử dụng trình phân loại nào? Kết luận rằng họ đang tìm kiếm một thuật toán phân loại . Xin vui lòng có một đọc qua câu hỏi trước khi trả lời.
Vetrivel PS
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.