2013-02-22 22 views

Trả lời

12

Sử dụng clf.predict_proba ([fv]) để lấy danh sách có xác suất được dự đoán cho mỗi lớp. Tuy nhiên, chức năng này không có sẵn cho tất cả các phân loại.

Về nhận xét của bạn, hãy xem xét những điều sau đây:

>> prob = [ 0.01357713, 0.00662571, 0.00782155, 0.3841413, 0.07487401, 0.09861277, 0.00644468, 0.40790285] 
>> sum(prob) 
1.0 

Xác suất tổng hợp đến 1.0, do đó nhân với 100 để có được tỷ lệ phần trăm.

5

Khi tạo lớp SVC để tính dự toán xác xuất bằng cách thiết lập probability=True:

http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

Sau đó gọi fit như bình thường và sau đó predict_proba([fv]).

+0

Nó trả về: dự đoán giá trị mảng "[[0,01357713 0,00662571 0,00782155 0,3841413 0,07487401 0,09861277 0,00644468 0,40790285]]" không xác suất, như: lớp 8: 80%, lớp 4: 40% – postgres

+3

Đây chính là điều bạn đang tìm kiếm: 40% cho lớp 7 (giả sử lớp đầu tiên là "lớp 0"), 38% cho lớp 3, 10% cho lớp 5 và 7% cho lớp 4. – ogrisel

11

Chắc chắn đọc this section of the docs vì có một số sự tinh tế liên quan. Xem thêm Scikit-learn predict_proba gives wrong answers

Về cơ bản, nếu bạn gặp sự cố nhiều lớp với nhiều dự đoán dữ liệu_được đề xuất trước đó hoạt động tốt. Nếu không, bạn có thể phải làm gì với một lệnh không mang lại điểm xác suất từ ​​decision_function.

Dưới đây là một motif thoải mái cho việc sử dụng predict_proba để có được một cuốn từ điển hoặc danh sách các lớp vs xác suất:

model = svm.SVC(probability=True) 
model.fit(X, Y) 
results = model.predict_proba(test_data)[0] 

# gets a dictionary of {'class_name': probability} 
prob_per_class_dictionary = dict(zip(model.classes_, results)) 

# gets a list of ['most_probable_class', 'second_most_probable_class', ..., 'least_class'] 
results_ordered_by_probability = map(lambda x: x[0], sorted(zip(model.classes_, results), key=lambda x: x[1], reverse=True)) 
Các vấn đề liên quan