Spark 2.0.0을 사용하여 이진 분류 용으로 훈련 된 SVM 모델에 문제가 있습니다. 동일한 데이터 세트를 사용하여 scikit-learn과 MLlib를 사용하여 동일한 로직을 따라했습니다.scikit-learn 및 mllib 예측의 차이점
svc_model = SVC()
svc_model.fit(X_train, y_train)
print "supposed to be 1"
print svc_model.predict([15 ,15,0,15,15,4,12,8,0,7])
print svc_model.predict([15.0,15.0,15.0,7.0,7.0,15.0,15.0,0.0,12.0,15.0])
print svc_model.predict([15.0,15.0,7.0,0.0,7.0,0.0,15.0,15.0,15.0,15.0])
print svc_model.predict([7.0,0.0,15.0,15.0,15.0,15.0,7.0,7.0,15.0,15.0])
print "supposed to be 0"
print svc_model.predict([18.0, 15.0, 7.0, 7.0, 15.0, 0.0, 15.0, 15.0, 15.0, 15.0])
print svc_model.predict([ 11.0,13.0,7.0,10.0,7.0,13.0,7.0,19.0,7.0,7.0])
print svc_model.predict([ 15.0, 15.0, 18.0, 7.0, 15.0, 15.0, 15.0, 18.0, 7.0, 15.0])
print svc_model.predict([ 15.0, 15.0, 8.0, 0.0, 0.0, 8.0, 15.0, 15.0, 15.0, 7.0])
하고 반환 : 스파크
supposed to be 1
[0]
[1]
[1]
[1]
supposed to be 0
[0]
[0]
[0]
[0]
뭐하는 거지 : scikit를 들어 나는 다음과 같은 코드를 배울 반환
model_svm = SVMWithSGD.train(trainingData, iterations=100)
print "supposed to be 1"
print model_svm.predict(Vectors.dense(15.0,15.0,0.0,15.0,15.0,4.0,12.0,8.0,0.0,7.0))
print model_svm.predict(Vectors.dense(15.0,15.0,15.0,7.0,7.0,15.0,15.0,0.0,12.0,15.0))
print model_svm.predict(Vectors.dense(15.0,15.0,7.0,0.0,7.0,0.0,15.0,15.0,15.0,15.0))
print model_svm.predict(Vectors.dense(7.0,0.0,15.0,15.0,15.0,15.0,7.0,7.0,15.0,15.0))
print "supposed to be 0"
print model_svm.predict(Vectors.dense(18.0, 15.0, 7.0, 7.0, 15.0, 0.0, 15.0, 15.0, 15.0, 15.0))
print model_svm.predict(Vectors.dense(11.0,13.0,7.0,10.0,7.0,13.0,7.0,19.0,7.0,7.0))
print model_svm.predict(Vectors.dense(15.0, 15.0, 18.0, 7.0, 15.0, 15.0, 15.0, 18.0, 7.0, 15.0))
print model_svm.predict(Vectors.dense(15.0, 15.0, 8.0, 0.0, 0.0, 8.0, 15.0, 15.0, 15.0, 7.0))
:
supposed to be 1
1
1
1
1
supposed to be 0
1
1
1
1
내 포를 지키려고 노력했다. 양성 - 음성 수업은 나의 테스트 데이터가 3521 개의 레코드와 나의 훈련 데이터 8356 개의 레코드가 균형을 이룬다. 평가를 위해 scikit-learn 모델에 적용된 교차 유효성 검사는 98 %의 정확도를 제공하며 ROC 미만의 영역은 0.5이며 스파이티브는 0.74 및 0.47의 교육 오류입니다.
또한 임계 값을 지우고 다시 0.5로 설정하려고했지만 더 나은 결과는 반환되지 않습니다. 때로는 기차 테스트 분할을 변경할 때 하나의 올바른 예측을 제외하고는 모두 0이 될 수도 있고 하나의 정확한 제로 예측을 제외하고는 모두 0이 될 수도 있습니다. 누구든지이 문제에 접근하는 방법을 알고 있습니까?
내가 말했듯이 내 데이터 세트가 두 경우 모두 정확히 동일하다는 것을 여러 번 확인했습니다. 즉 원료가 출력 예측 점수를 예측할 수 있도록
하지만 "좋은"결과와 일치시키고 싶습니다. skicit 학습 방법을 변경하면 전체 분류가 망칠 것입니다. 같은 방식으로 수행 할 수있는 mllib 라이브러리가 있습니까? – Kratos
@Kratos 나는 mllib에 익숙하지 않다. mllib (https://issues.apache.org/jira/browse/SPARK-4638)에 커널 SVM을 추가하려는 요청이있는 것처럼 보이지만 이전 버전과 유지 보수자가 그것을 닫았습니다. 문제 중 하나는 RBF 커널이있는 SVM이 교육 예제의 수와 잘 맞지 않는다는 것입니다 (sklearn docs는 복잡성이 2 차 이상이라고 말합니다). 비선형 분류기가 필요한 경우, 임의의 포리스트 (그라데이션 부스팅과 같은 다른 관련 방법) 또는 신경망을 시도하는 것이 좋습니다. –
도움을 주셔서 감사합니다. 나는 정말로 붙이게되었다 :) – Kratos