2017-03-21 3 views
0

scikit-learn을 사용하여 선형 SVM을 구현할 때 속성 오류와 관련된 문제가 있습니다. RFECV 메서드를 통해 교차 유효성 검사를 사용하는 선형 분류자를 사용하고 있으며 SVC의 특성에 액세스 할 수 없습니다. 기능 선택 또는 기본 모델과 관련이 있는지 확실하지 않습니다.skikarn의 속성 오류 svm.SVC

model = svm.SVC(kernel='linear') 
    selector=RFECV(model) 
    X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=pct_test) 
    selector=selector.fit(X_train, Y_train) 
    my_prediction = selector.predict(X_test) 
    f1.append(metrics.f1_score(Y_test, my_prediction)) 
    kappa.append(metrics.cohen_kappa_score(Y_test, my_prediction)) 
    precision.append(metrics.precision_score(Y_test, my_prediction)) 
    recall.append(metrics.recall_score(Y_test, my_prediction)) 
    print model.intercept_ 
    print model.support_vectors_ 
    print model.coef_ 

메트릭이 올바르게 작동하며 속성이 모두 실패합니다. 오류 메시지는 다음과 같습니다

AttributeError은 : 제외 http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC

: 'SVC'객체는

문서 'intercept_'에는 속성이없는 나는 OOP 매우 새로운입니다. 내가 누락 된 기본 개념이 있다면, 정교하게 작성하거나 링크를 보내주십시오.

답변

0

RFECV 객체 selector에 피팅 (데이터 교육) 중이지만 SVC 객체 model의 속성에 액세스하려고합니다. 그러나 그것은 훈련되지 않았습니다. 따라서 그것에는 intercept_이라는 속성이 없습니다.

selector.estimator_.intercept_ 

을하지만, 위의 추정이

설명 (지정 등의 기능을 제거 후) 만 감소 된 데이터 세트에 장착되어 있는지를 이해 :

은 SVC의 절편에 액세스하려면 사용해야합니다

RFECV는 각 반복에서 중요한 기능을 얻기 위해 내부적으로 RFE을 사용합니다. 그리고 RFE는 제공된 추정기를 목적에 맞게 복제합니다. 따라서 model으로 RFECV를 초기화하면 모델의 복제본에 대한 교육을 받게됩니다. 점검 source code :

scores = parallel(func(rfe, self.estimator, X, y, train, test, scorer) 
         for train, test in cv.split(X, y)) 

그리고 라인 (165) (피트 내부 (스코어를 추정)

rfe = RFE(estimator=self.estimator, 
      n_features_to_select=n_features_to_select, 
      step=self.step, verbose=self.verbose) 

라인 428 (RFECV의 착용감에있어서 내부)

라인 407 RFE 방법) :

estimator = clone(self.estimator) 
+0

매우 철저한 설명. 고맙습니다! – user7748226