ti-enxame.com

Como posso saber a probabilidade de classe prevista pela função predict () em Support Vector Machine?

Como posso saber a probabilidade da amostra pertencer a uma classe prevista pela função predict () do Scikit-Learn em Support Vector Machine?

>>>print clf.predict([fv])
[5]

Existe alguma função?

22
postgres

Use clf.predict_proba ([fv]) para obter uma lista com probabilidades previstas por classe. No entanto, essa função não está disponível para todos os classificadores.

Em relação ao seu comentário, considere o seguinte:

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

As probabilidades somam 1.0, então multiplique por 100 para obter porcentagem.

13
Bastiaan van den Berg

Definitivamente leia esta seção dos documentos há algumas sutilezas envolvidas. Veja também Scikit-learn predict_proba dá respostas erradas

Basicamente, se você tiver um problema de várias classes com muitos dados, o predict_proba, como sugerido anteriormente, funciona bem. Caso contrário, você pode ter que se contentar com uma ordenação que não produza pontuações de probabilidade de decision_function.

Aqui está um bom motivo para usar o predict_proba para obter um dicionário ou uma lista de probabilidade de classe vs:

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))
24
Alex

Ao criar a classe SVC para calcular as estimativas de probabilidade, definindo probability=True:

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

Em seguida, chame fit como de costume e, em seguida, predict_proba([fv]).

8
ogrisel

Para respostas mais claras, eu postei novamente as informações do scikit-learn para svm.

Escusado será dizer que a validação cruzada envolvida no escalonamento Platt é uma operação dispendiosa para grandes conjuntos de dados. Além disso, as estimativas de probabilidade podem ser inconsistentes com os escores, no sentido de que o “argmax” dos escores pode não ser o argmax das probabilidades. (Por exemplo, na classificação binária, uma amostra pode ser rotulada por prever como pertencente a uma classe que tem probabilidade <½ de acordo com o predict_proba.) O método de Platt também é conhecido por ter problemas teóricos. Se as pontuações de confiança são necessárias, mas estas não precisam ser probabilidades, então é aconselhável definir probabilidade = False e usar decision_function em vez de predict_proba.

Para outros classificadores como Random Forest, AdaBoost, Gradient Boosting, deve-se usar a função predict no scikit-learn.

0
beahacker