Tạo một điểm số chắc chắn của người Hồi giáo từ phiếu bầu trong các khu rừng ngẫu nhiên?


36

Tôi đang tìm cách đào tạo một bộ phân loại sẽ phân biệt giữa Type AType Bcác đối tượng với một tập huấn hợp lý lớn với khoảng 10.000 đối tượng, khoảng một nửa trong số đó Type Avà một nửa trong số đó là Type B. Bộ dữ liệu bao gồm 100 tính năng liên tục chi tiết các thuộc tính vật lý của các ô (kích thước, bán kính trung bình, v.v.). Hình dung dữ liệu trong các biểu đồ phân tán theo cặp và mật độ cho chúng ta biết rằng có sự chồng chéo đáng kể trong sự phân bố của các tế bào ung thư và bình thường trong nhiều tính năng.

Tôi hiện đang khám phá các khu rừng ngẫu nhiên như một phương pháp phân loại cho bộ dữ liệu này và tôi đã thấy một số kết quả tốt. Sử dụng R, các khu rừng ngẫu nhiên có thể phân loại chính xác khoảng 90% các đối tượng.

Một trong những điều chúng tôi muốn thử và làm là tạo ra một loại "điểm chắc chắn" sẽ định lượng mức độ tin cậy của chúng tôi đối với việc phân loại các đối tượng. Chúng tôi biết rằng trình phân loại của chúng tôi sẽ không bao giờ chính xác 100% và ngay cả khi đạt được độ chính xác cao trong dự đoán, chúng tôi sẽ muốn các kỹ thuật viên được đào tạo xác định đối tượng nào thực sự Type AType B. Vì vậy, thay vì cung cấp các dự đoán không thỏa hiệp về Type Ahoặc Type B, chúng tôi muốn trình bày một số điểm cho từng đối tượng sẽ mô tả cách thức Ahoặc Bmột đối tượng. Ví dụ: nếu chúng tôi nghĩ ra một điểm nằm trong khoảng từ 0 đến 10, thì điểm 0 có thể cho thấy một đối tượng rất giống với Type Acác đối tượng, trong khi điểm 10 sẽ cho thấy một đối tượng rất giống Type B.

Tôi đã nghĩ rằng tôi có thể sử dụng phiếu bầu trong các khu rừng ngẫu nhiên để đưa ra số điểm như vậy. Do việc phân loại trong các khu rừng ngẫu nhiên được thực hiện bằng cách bỏ phiếu đa số trong rừng cây được tạo ra, tôi cho rằng các đối tượng được bầu chọn bởi 100% số cây Type Asẽ khác với các đối tượng được bầu chọn bởi, ví dụ, 51% số cây được Type A.

Hiện tại, tôi đã thử đặt ngưỡng tùy ý cho tỷ lệ phiếu bầu mà một đối tượng phải nhận được để được phân loại là Type Ahoặc Type B, và nếu ngưỡng đó không được thông qua, nó sẽ được phân loại là Uncertain. Ví dụ, nếu tôi buộc điều kiện là 80% số cây trở lên phải đồng ý với quyết định phân loại, tôi thấy rằng 99% dự đoán của lớp là đúng, nhưng khoảng 40% các đối tượng được đánh dấu là Uncertain.

Sau đó, nó sẽ có ý nghĩa để tận dụng thông tin bỏ phiếu để ghi điểm chắc chắn của các dự đoán? Hay tôi đang đi sai hướng với suy nghĩ của mình?


Hãy chắc chắn rằng bạn có bộ dữ liệu đào tạo và thử nghiệm riêng biệt. Hãy chắc chắn rằng bạn sử dụng bộ thử nghiệm của mình càng ít càng tốt (lý tưởng chỉ một lần).
Boris Gorelik

@bgbg Tôi đang sử dụng chương trình đào tạo / xác nhận / kiểm tra, trong phân chia 70/20/10. Tôi đang đào tạo một mô hình với 70% dữ liệu và điều chỉnh các tham số dựa trên kết quả trên bộ xác nhận là 20%. Sau khi tôi điều chỉnh các tham số trên hai bộ này, tôi đánh giá mô hình trên bộ kiểm tra 10%. Mặc dù Breiman tuyên bố rằng tỷ lệ lỗi OOB tích hợp khiến việc thử nghiệm riêng biệt trở nên dư thừa, tôi cảnh giác với tuyên bố của mình.
ialm

Câu trả lời:


19

Điều này có ý nghĩa hoàn hảo và tất cả các triển khai của các khu rừng ngẫu nhiên mà tôi đã làm việc (như MATLAB) cung cấp các kết quả xác suất cũng như để làm điều đó.

Tôi đã không làm việc với triển khai R, nhưng tôi sẽ bị sốc nếu không có cách đơn giản nào để có được kết quả đầu ra mềm từ phiếu bầu cũng như quyết định cứng.

Chỉnh sửa: Chỉ cần liếc qua R và dự đoán.randomForest cũng có xác suất đầu ra.


1
Cảm ơn bạn đã trả lời của bạn. Bạn nói đúng, tôi đã tạo ra một kịch bản sẽ xuất ra tỷ lệ phiếu bầu cho mỗi đối tượng nhận được. Tôi tự hỏi, mặc dù, những phiếu bầu này sẽ hữu ích như thế nào? Có bất kỳ bước tiếp theo mà bạn đề nghị? Tôi có nên xem xét sự thay đổi của tỷ lệ biểu quyết thông qua các lần chạy RF bổ sung không? Tôi hiểu rằng RF có một yếu tố ngẫu nhiên với nó. Có bất kỳ chẩn đoán mà tôi nên xem xét?
ialm

3
@Jonathan Bạn có thể thử xem một cốt truyện có phần nhỏ của đối tượng thực sự tạo thành một số lớp như là một hàm của một phần phiếu bầu cho lớp này từ rừng. Tôi đã làm việc với một vấn đề đòi hỏi điểm tự tin và hóa ra tôi đã xoay sở để có được một đường cong logistic rất đẹp.

@mbq Xin lỗi, bạn có thể nói rõ ý của bạn không? Tôi quan tâm đến đề xuất của bạn và sẽ theo dõi nó vào ngày mai!
ialm

1
Ngoài ra, tính biến thiên của RF xuất hiện trong giai đoạn đào tạo, do đó, việc chạy các mẫu thử nghiệm nhiều lần thông qua RF sẽ không thay đổi kết quả. Tôi sẽ xem xét AUC so với số lượng cây trong RF, để đảm bảo bạn có đủ cây, và sau đó tối ưu hóa tham số lá tối thiểu theo AUC.
benhamner

2
@Jonathan Tôi nghĩ rằng mbq đang đề cập đến một cái gì đó có tên hiệu chuẩn (mặc dù có thể có các tên khác). Xem ví dụ về câu hỏi này: Hiệu chỉnh bộ phân loại được tăng cường nhiều lớp , giá trị thực tế nào mà Cameron đề cập đến trong phân loại có giám sát?
steffen

17

Nếu bạn đang sử dụng R, gói caret sẽ giúp bạn không phải phát minh lại bánh xe. Ví dụ, đoạn mã sau sử dụng xác thực chéo để chọn tham số điều chỉnh cho mô hình rừng ngẫu nhiên, sau đó đưa ra độ chính xác trung bình và độ lệch chuẩn cho mỗi lần xác thực chéo. Cuối cùng, nó tính toán xác suất lớp cho mô hình.

library(caret)
library(PerformanceAnalytics)
data(iris)

#Make a yes/no dataset
Dataset <- iris
Dataset$Class <- ifelse(Dataset$Species=='versicolor','Yes','No')
Dataset$Class  <- as.factor(Dataset$Class)
Dataset$Species<- NULL
chart.Correlation(Dataset[-5], col= Dataset$Class)

#Fit an RF model
model <- train(Class~.,Dataset,
                method='rf',TuneLength=3,
                trControl=trainControl(
                    method='cv',number=10,
                    classProbs = TRUE))
model$results

#Predict class probabilities (i.e. 'certainty' scores)
pred <- predict(model,iris,"prob")
head(pred)

Điều hay ho về caret là nó giúp bạn dễ dàng so sánh các mô hình dự đoán khác nhau. Ví dụ: nếu bạn muốn thử một SVM, bạn có thể thay thế văn bản method='rf'bằng method='svmLinear'hoặc method='svmRadial'. Bạn cũng có thể chọn các tham số điều chỉnh của mình dựa trên AUC thay vì độ chính xác bằng cách thêm một dòng vào tham số trainControl : summaryFunction=twoClassSummary.

Cuối cùng, có một chút mã trong gói PerformanceAnalytics, chart.Correlation(Dataset[-5], col= Dataset$Class)không cần thiết để xây dựng mô hình, nhưng cung cấp một hình ảnh đẹp về bộ dữ liệu của bạn.


Bạn đang làm cho tôi một fan hâm mộ của gói caret. Tôi nghĩ rằng tôi sẽ giữ một luồng R thứ hai mở chỉ để thử các phương pháp phân loại khác nhau và tự mình điều chỉnh CV và tham số điều chỉnh và xem liệu tôi có nhận được kết quả so sánh nào không.
ialm

@Jonathan rất vui khi nghe nó! Đó là một gói tuyệt vời. Hãy thử modelLookup()lệnh cho một danh sách những gì có thể.
Zach

Các probloại predictcũng có sẵn bằng cách sử dụng randomForestđể đào tạo mô hình của bạn (có hoặc không có việc sử dụng các gói khác như carethay PerformanceAnalytics).
Hack-R

2

Các randomForest gói vào R là một gói phần mềm khá tốt để nhận vào chi tiết hơn về phân tích của bạn. Nó cung cấp cho bạn số phiếu (dưới dạng phân số hoặc số nguyên) và nó cung cấp khả năng điều chỉnh và xác thực chéo và thậm chí có thể cung cấp cho bạn thêm thông tin về các tính năng của bạn (nếu bạn muốn biết trong số 100 tính năng của mình là gì quan trọng nhất trong phân tích).

Nếu bạn đã sử dụng gói đó, thì có lẽ bạn muốn xem xét kỹ hơn và nếu bạn không thì có lẽ hãy kiểm tra nó.

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.