나는 encog 프레임 워크 내부의 SVM에서 예상 확률을 감추는 방법을 발견했다. 이 방법은 libSVM에 대해 -b 옵션과 동일한 기능을 사용합니다 (http://www.csie.ntu.edu.tw/~cjlin/libsvm/index.html 참조)
이렇게하려면 encog에서 SVM 클래스를 무시하십시오. 생성자는 smv_parameter 객체 (아래 참조)를 통해 확률 추정을 활성화합니다. 그런 다음 계산을 수행 할 때 아래와 같이 svm_predict_probability 메소드를 호출하십시오.
경고 : 아래 코드는 단편입니다. 유용하게 사용하려면 다른 생성자를 작성하고 결과 확률을 아래 메소드에서 제외해야 할 수 있습니다. 이 조각은 encog 버전 3.3.0을 기반으로합니다.
public class MySVMProbability extends SVM {
public MySVMProbability(SVM method) {
super(method.getInputCount(), method.getSVMType(), method.getKernelType());
// Enable probability estimates
getParams().probability = 1;
}
@Override
public int classify(final MLData input) {
svm_model model = getModel();
if (model == null) {
throw new EncogError(
"Can't use the SVM yet, it has not been trained, "
+ "and no model exists.");
}
final svm_node[] formattedInput = makeSparse(input);
final double probs[] = new double[svm.svm_get_nr_class(getModel())];
final double d = svm.svm_predict_probability(model, formattedInput, probs);
/* probabilities for each class are in probs[] */
return (int) d;
}
@Override
public MLData compute(MLData input) {
svm_model model = getModel();
if (model == null) {
throw new EncogError(
"Can't use the SVM yet, it has not been trained, "
+ "and no model exists.");
}
final MLData result = new BasicMLData(1);
final svm_node[] formattedInput = makeSparse(input);
final double probs[] = new double[svm.svm_get_nr_class(getModel())];
final double d = svm.svm_predict_probability(model, formattedInput, probs);
/* probabilities for each class are in probs[] */
result.setData(0, d);
return result;
}
}
특정 질문이 필요합니다. 너는 전혀 묻지 않는 것 같아! –