2016-08-16 6 views
0

저는 scikit SVM을 사용하고 있습니다. sample_weights을 사용하여 SVM을 테스트하고 싶습니다. 그리고 각 샘플에 대해 sample_weights이 기본값 1 인 일반 구현으로 분류 자로 전달되었습니다. (sample_weight) 사용자가 일부 샘플을 다른 모델보다 더 큰 영향을 줄 수 있습니다. 워크 플로는 표준이므로 각 모델을 교육 하위 집합에 맞추고 각 모델을 보류 된 개발 세트에서 테스트하여 가중치를 사용해야하는지 여부를 확인하십시오. 내 코드는 이것이다 : 나는 clf를 재정 의하여 분류를 다시 초기화해야 사용할 커널을 테스트했다Python Scikit 분류 자`.fit` 메서드를 호출하면 반복적으로 아무 효과가 있습니까?

clf = svm.SVC(kernel = 'rbf', gamma = .001) ## initialize the model- i only do this once! 

clf.fit(X_train, y_train) ## fit the model/do the optimization 
accuracy[name + "_no_weights"] = clf.score(X_test, y_test) ## store results 

clf.fit(X_train, y_train, sample_weight = sample_weight_test) ## fit the model/do the optimization w/ different regularization 
accuracy[name + "_w_weights"] = clf.score(X_test, y_test) ## store results 

공지합니다. 요점은, 위의 두 경우 모두 동일한 분류자를 훈련 중이지만 분류자를 다시 초기화하지 않는다는 것입니다. 따라서 두 번째로 .fit이라는 매개 변수가 이미 초기화되어있을 수 있습니다 (무작위로, 그러나 이전의 훈련에서). 이것은 두 번째 두 번째 결과가 불공 평한 이점을 가질 수 있음을 의미합니다. 최적화를위한 출발점은 좋은 결정 경계에 매우 가깝습니다.

누구나 어떻게 작동하는지 또는 제안 사항이 있습니까?

답변

1

SVM은 항상 전역 최소값으로 수렴되므로이 값은 중요하지 않습니다. "좋은 해결책"을 시작하지는 않습니다. SVM은 신경망이 아닙니다. 좋은 초기화가 필요하지 않습니다. 즉, 원하는 횟수만큼 전화를 걸 수 있으며 분류자를 다시 초기화 할 필요가 없습니다. sklearn의 경우에는 .fit 메소드가 현재의 lagrange 승수를 통과하지 못하기 때문에 SVM 솔버의 외부 저수준 구현을 호출하기 때문에 더욱 분명합니다.

+0

아 ... 이차 최적화 문제에는 고유 한 글로벌 분이 있습니까? 그 진술을 증명 한거야? 또한 훌륭한 대답입니다. 당신은 우리가 항상 최선의 시나리오에있는 것은 논점이라고 말했습니다. – travelingbones

+0

@travelingbones svm-problem의 해결책은 반드시 고유하지는 않지만 여기서는 중요하지 않습니다. 볼록 최적화 문제라는 사실은 전체 최소값을 근사화하는 많은 알고리즘을 생성합니다. 그러나 이는 일부 알고리즘 (기성품 QP-solver, Coordinate-descent, SMO 등)에만 해당됩니다. 현재 널리 사용되는 SGD 기반 방법 (대용량 데이터에 자주 사용됨)은 일부 메타 매개 변수 (가장 간단 함 : 반복/에포크 및 학습률이 충분하지 않음)에 따라 실패 할 수 있습니다. – sascha

+1

@travelingbones이 책은 수치 해석을 위해 모든 책에서 찾을 수 있습니다. 볼록 함수는 고유 한 (값의 관점에서) 최소값을 갖습니다 (좌표의 관점에서 볼 때 고유 한 볼록 값). sascha가 제안한 것과는 반대로 - 이것은 svm 문제에도 적용됩니다. 이것은 고유 한 해결책을 가지고 있습니다. 그러나 수치 적 근사 및 정밀도 부족으로 인해 실용적인 구현은 실제 글로벌 솔루션에 수렴하지 않고 간단히 "충분히 근접"합니다 (이는 반복적 인 최적화의 경우에도 마찬가지입니다). – lejlot