Tăng số lượng tính năng dẫn đến giảm độ chính xác nhưng tăng / thu hồi trước


15

Tôi chưa quen với Machine Learning. Hiện tại tôi đang sử dụng trình phân loại Naive Bayes (NB) để phân loại các văn bản nhỏ trong 3 lớp là dương, âm hoặc trung tính, sử dụng NLTK và python.

Sau khi tiến hành một số thử nghiệm, với bộ dữ liệu gồm 300.000 trường hợp (16.924 dương tính 7.477 âm và 275.599 trung tính) Tôi thấy rằng khi tôi tăng số lượng tính năng, độ chính xác sẽ giảm nhưng độ chính xác / thu hồi đối với các lớp dương và âm tăng lên. Đây có phải là một hành vi bình thường cho một bộ phân loại NB? Chúng ta có thể nói rằng sẽ tốt hơn nếu sử dụng nhiều tính năng hơn không?

Một số dữ liệu:

Features: 50    
Accuracy: 0.88199
F_Measure Class Neutral 0.938299
F_Measure Class Positive 0.195742
F_Measure Class Negative 0.065596

Features: 500   
Accuracy: 0.822573
F_Measure Class Neutral 0.904684
F_Measure Class Positive 0.223353
F_Measure Class Negative 0.134942

Cảm ơn trước...

Chỉnh sửa 2011/11/26

Tôi đã thử nghiệm 3 chiến lược lựa chọn tính năng khác nhau (MAXFREQ, FREQENT, MAXINFOGAIN) với trình phân loại Naive Bayes. Đầu tiên ở đây là Độ chính xác và Các biện pháp F1 cho mỗi lớp:

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

Sau đó, tôi đã vạch ra lỗi tàu và lỗi kiểm tra với tập huấn luyện tăng dần, khi sử dụng MAXINFOGAIN với 100 tính năng hàng đầu và 1000 tính năng hàng đầu:

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

Vì vậy, đối với tôi, mặc dù độ chính xác cao nhất đạt được với FREQENT, nhưng trình phân loại tốt nhất là sử dụng MAXINFOGAIN, điều này có đúng không? Khi sử dụng 100 tính năng hàng đầu, chúng tôi có sai lệch (lỗi kiểm tra gần với lỗi đào tạo) và việc thêm nhiều ví dụ đào tạo sẽ không giúp ích gì. Để cải thiện điều này, chúng tôi sẽ cần nhiều tính năng hơn. Với 1000 tính năng, độ lệch sẽ giảm nhưng lỗi tăng ... Điều này có ổn không? Tôi có cần thêm nhiều tính năng không? Tôi thực sự không biết làm thế nào để giải thích điều này ...

Cảm ơn một lần nữa ...


1
Nó phụ thuộc vào ý của bạn với "trình phân loại tốt nhất", nếu nhiệm vụ của bạn là xây dựng một trình phân loại với độ chính xác tổng thể tốt, tôi sẽ chọn FREQENT. Mặt khác, nếu, giống như trong hầu hết các nhiệm vụ phân loại lớp hiếm, bạn muốn phân loại tốt hơn lớp hiếm (có thể là lớp "phủ định" hoặc "tích cực") tôi sẽ chọn MAXINFOGAIN. Tôi nghĩ rằng việc giải thích đường cong học tập của bạn là chính xác: với 100 tính năng bạn có thành kiến ​​và bạn có thể thêm chúng, với 1000 bạn có phương sai và bạn có thể loại bỏ chúng. Có lẽ bạn có thể thử đánh đổi giữa 100 và 1000 tính năng để có kết quả tốt hơn.
Simone

Cảm ơn sự giúp đỡ của bạn, Simone! Tôi đã hiểu tất cả mọi thứ trừ phần cuối cùng ... Bạn có thể vui lòng cho tôi biết cách bạn nhìn thấy sự chênh lệch cao với 1000 tính năng không? Vì sự khác biệt giữa các lỗi kiểm tra và huấn luyện dường như không nhiều đến nỗi nó vẫn có vẻ thiên vị đối với tôi ...
kanzen_master

Tôi đặt một số ví dụ trên trả lời của tôi. Khi các đường cong không quá gần, vấn đề được phân loại là có phương sai cao . Trong trường hợp của bạn, có thể tôi đã nói với bạn rằng vì với ít tính năng hơn, bạn sẽ có hiệu suất tốt hơn và vì vậy với 1000 tính năng có thể là vấn đề của phương sai cao. Thay vì vẽ kết quả của các thuật toán lựa chọn tính năng bằng các biện pháp được tính toán trên tập huấn luyện, hãy thử phân tách dữ liệu của bạn trong đào tạo (2/3 trong số chúng) và xác thực, sau đó thực hiện lựa chọn các tính năng trên tập huấn luyện và đánh giá nó trên tập kiểm tra . Bạn nên tìm một mức tối đa ở giữa cốt truyện.
Simone

Cảm ơn đã trả lời. Ví dụ thứ 3 về bài đăng được cập nhật của bạn (kết quả tốt, đào tạo, kiểm tra các đường cong lỗi không quá gần cũng không quá xa) trông giống như đường cong học tập mà tôi đã vẽ bằng 1000 tính năng, vì vậy tôi nghĩ rằng sử dụng khoảng 1000 tính năng sẽ là "kết quả tốt". Tuy nhiên, trong trường hợp này lỗi cao hơn, không tốt. Nhưng, chỉ cần nhìn vào khoảng cách giữa các đường cong, tôi không thể thấy phương sai cao với 1000 tính năng ... (Nhân tiện, tôi đã chia dữ liệu thành 2/3 dưới dạng tập huấn luyện, 1/3 là tập kiểm tra, tính năng thực hiện lựa chọn trên tập huấn luyện và đánh giá trên tập kiểm tra ...)
kanzen_master

1
ĐỒNG Ý. Tôi còn khá mới mẻ khi học các đường cong và các ví dụ của bạn thực sự thú vị và khiến tôi hiểu rõ hơn về chúng. Vì vậy, cảm ơn D T. Có, có thể có sự thiên vị trong cả hai trường hợp. Theo tôi, bạn có một bộ dữ liệu rất sai lệch và thay vì kiểm tra độ chính xác, điều quan trọng là phải xem xét đến F-đo. Nhìn vào cốt truyện của bạn, có vẻ như bạn càng có nhiều tính năng thì nó càng tốt; trong thực tế, F-biện pháp cải thiện. Tôi nghe nói rằng trong phân loại văn bản, nếu các tính năng của bạn là tần số từ trong văn bản của bạn, thì thông thường sử dụng nhiều tính năng; btw Tôi không quen với nó và tôi không thể nói với bạn nhiều hơn.
Simone

Câu trả lời:


18

Độ chính xác so với F-đo

Trước hết, khi bạn sử dụng một số liệu, bạn nên biết cách chơi nó. Độ chính xác đo lường tỷ lệ của các trường hợp được phân loại chính xác trên tất cả các lớp. Điều đó có nghĩa là, nếu một lớp xảy ra thường xuyên hơn một lớp khác, thì độ chính xác kết quả bị chi phối rõ ràng bởi độ chính xác của lớp thống trị. Trong trường hợp của bạn nếu một người xây dựng Mô hình M chỉ dự đoán "trung tính" cho mọi trường hợp, thì độ chính xác sẽ là

mộtcc= =nebạntrmộttôi(nebạntrmộttôi+poSTôitTôive+negmộttTôive)= =0,988

Tốt, nhưng vô dụng.

Vì vậy, việc bổ sung các tính năng rõ ràng đã cải thiện sức mạnh của NB để phân biệt các lớp, nhưng bằng cách dự đoán "tích cực" và "tiêu cực", người ta sẽ phân loại sai các trung tính và do đó độ chính xác đi xuống (nói đại khái). Hành vi này độc lập với NB.

Nhiều hay ít tính năng?

Nói chung, tốt hơn là sử dụng nhiều tính năng hơn, nhưng sử dụng các tính năng phù hợp. Nhiều tính năng hơn là tốt hơn khi thuật toán lựa chọn tính năng có nhiều lựa chọn hơn để tìm tập hợp con tối ưu (tôi đề nghị khám phá: lựa chọn tính năng của crossvalidated ). Khi nói đến NB, một cách tiếp cận nhanh và chắc chắn (nhưng ít hơn tối ưu) là sử dụng InformationGain (Tỷ lệ) để sắp xếp các tính năng theo thứ tự giảm dần và chọn k hàng đầu.

Một lần nữa, lời khuyên này (trừ InformationGain) không phụ thuộc vào thuật toán phân loại.

EDIT 27.11.11

Đã có rất nhiều nhầm lẫn về sai lệch và phương sai để chọn đúng số lượng tính năng. Do đó, tôi khuyên bạn nên đọc những trang đầu tiên của hướng dẫn này: Sự đánh đổi Bias-Variance . Bản chất chính là:

  • Xu hướng cao có nghĩa là, mô hình ít hơn tối ưu, nghĩa là lỗi kiểm tra cao (thiếu, như Simone đưa ra)
  • Phương sai cao có nghĩa là, mô hình rất nhạy cảm với mẫu được sử dụng để xây dựng mô hình . Điều đó có nghĩa là, lỗi phụ thuộc rất nhiều vào tập huấn luyện được sử dụng và do đó phương sai của lỗi (được đánh giá qua các nếp gấp chéo khác nhau) sẽ cực kỳ khác nhau. (quá mức)

Các đường cong học tập được vẽ thực sự chỉ ra Bias, vì lỗi được vẽ. Tuy nhiên, thứ bạn không thể nhìn thấy là Phương sai, vì khoảng tin cậy của lỗi không được vẽ ở tất cả.

Ví dụ: Khi thực hiện Crossvalidation 3 lần 6 lần (có, nên lặp lại với phân vùng dữ liệu khác nhau, Kohavi gợi ý 6 lần lặp lại), bạn nhận được 18 giá trị. Bây giờ tôi mong đợi rằng ...

  • Với một số lượng nhỏ các tính năng, sai số trung bình (độ lệch) sẽ thấp hơn, tuy nhiên, phương sai của lỗi (trong số 18 giá trị) sẽ cao hơn.
  • với số lượng tính năng cao, sai số trung bình (độ lệch) sẽ cao hơn, nhưng phương sai của lỗi (trong số 18 giá trị) thấp hơn.

Hành vi của lỗi / sai lệch này chính xác là những gì chúng ta thấy trong các ô của bạn. Chúng ta không thể đưa ra tuyên bố về phương sai. Các đường cong gần nhau có thể là một dấu hiệu cho thấy tập kiểm tra đủ lớn để thể hiện các đặc điểm giống như tập huấn luyện và do đó sai số đo có thể đáng tin cậy, nhưng điều này (ít nhất là theo như tôi hiểu nó) không đủ để đưa ra tuyên bố về phương sai (của lỗi!).

Khi thêm ngày càng nhiều ví dụ đào tạo (giữ cố định kích thước của tập kiểm tra), tôi sẽ hy vọng rằng phương sai của cả hai phương pháp (số lượng nhỏ và số lượng lớn các tính năng) sẽ giảm.

Ồ, và đừng quên tính toán thông tin để lựa chọn tính năng chỉ sử dụng dữ liệu trong mẫu đào tạo! Một người được khuyến khích sử dụng dữ liệu hoàn chỉnh để lựa chọn tính năng và sau đó thực hiện phân vùng dữ liệu và áp dụng giá trị chéo, nhưng điều này sẽ dẫn đến việc thừa. Tôi không biết bạn đã làm gì, đây chỉ là một lời cảnh báo không bao giờ nên quên.


1
Cảm ơn bạn rất nhiều vì đã trả lời, giải thích rất rõ ràng. Tôi đang sử dụng mức tăng thông tin tối đa làm chiến lược lựa chọn tính năng của mình và thử nghiệm bằng xác thực chéo 5 lần. Tôi đoán rằng để biết tôi nên sử dụng các tính năng k hàng đầu nào, tôi cần phải kiểm tra lặp lại thuật toán tăng số lượng tính năng mỗi lần và lấy k mang lại f_score cao nhất. Tuy nhiên, tôi đoán rằng "top k" có thể thay đổi tùy thuộc vào tập dữ liệu ... phải không?
kanzen_master

1
Chính xác. Nhưng nếu tập dữ liệu mới tương tự như tập dữ liệu cũ (cùng tính năng có cùng bản phân phối) thì k vẫn giữ nguyên. Bạn có thể thêm một thuật toán di truyền để tìm kiếm không gian của các giải pháp khả thi nhanh hơn hoặc (thậm chí tốt hơn) sử dụng thuật toán di truyền để tìm tập hợp tính năng tối ưu độc lập với InformationGain ... rất nhiều cách để đi.
steffen

1
Theo các bài giảng của Stanford, nếu bạn thấy các đường cong đào tạo và kiểm tra tách biệt khác nhau, # các ví dụ đào tạo thực sự có nghĩa là có sự khác biệt. Tất nhiên một cách tiếp cận tốt hơn sẽ là ước tính khoảng tin cậy.
Simone

1
@DT 1. Tôi không biết bài giảng, do đó tôi không thể kết nối lời giải thích của Andrewg với tôi, xin lỗi. 2. Không. Số lượng tính năng nhỏ => quá mức => độ lệch thấp, phương sai cao. Số lượng tính năng cao => thiếu sáng => độ lệch cao, phương sai thấp. Tôi thực sự đề nghị vẽ sơ đồ phương sai của các lần gập cv cho số lượng tính năng và ví dụ đào tạo khác nhau.
steffen

2
1. steffen, bài giảng có sẵn ở đây: ml- class.org/cference/video/preview_list (Phần X, Phần "Đường cong học tập") 2. Tôi thấy. Tôi đã nghĩ rằng khi rất nhiều tính năng học được trong quá trình đào tạo => mô hình trở nên phức tạp và trang phục cho bộ huấn luyện => Phương sai ...
kanzen_master

5

Để biết có hữu ích không khi sử dụng nhiều tính năng hơn, tôi sẽ vẽ các đường cong học tập. Tôi nghĩ rằng điều này được giải thích rõ ràng trong Đơn vị thứ 10 của lớp Machine Learning của Stanford, được đặt tên là "Lời khuyên cho việc áp dụng học máy", mà bạn có thể tìm thấy ở đây: http : //www.ml- class.org/cference/video/preview_list .

Vẽ các đường cong học tập bạn có thể hiểu nếu vấn đề của bạn là sai lệch cao hoặc phương sai cao. Miễn là bạn tăng số lượng ví dụ đào tạo, bạn nên vẽ lỗi đào tạolỗi kiểm tra (tức là độ chính xác 1), lỗi sau là lỗi phân loại của bạn được ước tính trên một tập dữ liệu khác. Nếu các đường cong này gần nhau, bạn có vấn đề sai lệch cao và có thể có ích khi chèn thêm các tính năng. Mặt khác, nếu các đường cong của bạn khá tách biệt miễn là bạn tăng số lượng ví dụ đào tạo, bạn có vấn đề về phương sai cao. Trong trường hợp này, bạn nên giảm số lượng tính năng bạn đang sử dụng.

Biên tập

λ

λ

Phương sai cao

λ

Độ lệch cao

λ= =1

Kết quả tốt


Tuyệt quá! Cảm ơn rât nhiều! Vì cả hai câu trả lời đều rất hữu ích nhưng tôi không thể đánh dấu cả hai câu trả lời, tôi sẽ đánh dấu câu trả lời đầu tiên là câu trả lời. Nhưng đây chắc chắn là cách tốt nhất để kiểm tra, tôi nghĩ vậy.
kanzen_master

Nhân tiện, tôi đang cố gắng vạch ra đường cong học tập của một bộ phân loại sử dụng 100 tính năng hàng đầu với điểm số Thông tin tối đa đạt được. Trong khi tăng kích thước tập dữ liệu huấn luyện, tôi muốn vẽ lỗi đào tạo và lỗi kiểm tra. Giá trị nào cho tập dữ liệu tàu ban đầu (sẽ tăng dần) và cho tập dữ liệu thử nghiệm (tĩnh cho tất cả các thử nghiệm)? Cảm ơn một lần nữa ...
kanzen_master

2
Chia tập dữ liệu của bạn trong tập huấn luyện và tập kiểm tra. Bắt đầu từ rất ít hồ sơ đào tạo và sau đó tiếp tục thêm hồ sơ. Đối với mỗi lần lặp tính toán lỗi tập huấn luyện với các bản ghi bạn đã sử dụng để huấn luyện trình phân loại của mình và sau đó tính toán lỗi tập kiểm tra luôn với tất cả các bản ghi kiểm tra. Tôi biết đây là một phương pháp tiêu chuẩn được sử dụng trong thực tế phổ biến. Sẽ rất thú vị khi xem kết quả của bạn! Chúc mừng, Simone.
Simone

1
Simone, tôi đã cập nhật bài đăng đầu tiên với một số kết quả về độ chính xác, các biện pháp F1 và các đường cong học tập, và diễn giải của tôi ở phía dưới, bạn có thể vui lòng kiểm tra không? Cảm ơn ...
kanzen_master
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.