벡터 지원 - 비 선형 분류 SVM

12406 단어 기계 학습
모델 원형 sklearn. svm. SVC (C = 1.0, kernel = 'rbf', degree = 3, gamma = 'auto', coef 0 = 0.0, shrinking = True, probability = False, tol = 0.001, cache size = 200, class weight = None, verbose = False, max iter = - 1, decision function shape = None, random state = None) 매개 변수
  • C
  • kernel
  • degree
  • gamma
  • coef0
  • shrinking: 계발 식 수축 사용 여부 (shrinking heuristic)
  • probability: 진행 확률 추정 (훈련 전에 설정 해 야 하 며, 확률 은 훈련 속 도 를 늦 출 것 으로 예상)
  • tol
  • cache_size: kernel cache 의 크기 를 지 정 했 습 니 다. 단 위 는 MB
  • 입 니 다.
  • class_weight
  • verbose
  • max_iter
  • decision_function_shape: 의사 결정 함수 의 모양 을 지정 합 니 다.
  • 'ovr': one - vs - rest 준칙 을 사용 하고 결정 함수 의 모양 은 (n samples, n classes)
  • 이다.
  • 'ovo': one - vs - one 준칙 을 사용 하고 결정 함수 의 모양 은 (n samples, n classes * (n classes - 1) / 2)
  • 이다.
  • 없 음: 기본 값
  • random_state

  • 속성
  • support_:[n SV] 모양 의 배열 로 벡터 의 아래 표 시 를 지원 합 니 다
  • 슈퍼 portvectors: 하나의 배열, 모양 은 [n SV, n features], 벡터 지원
  • n_support: 하나의 배열 - like, 모양 은 [n class] 이 고, 각 분류의 지원 벡터 의 개수
  • dual_coef: 하나의 배열, 모양 은 [n class - 1, n SV] (대구 문제 에서 분류 결정 함수 에서 벡터 를 지원 하 는 계수)
  • coef_:하나의 배열, 모양 은 [n class - 1, n features] (원시 문제 에서 각 특징의 계 수 는 linear kernel 에서 만 유효 합 니 다)
  • intercept_:하나의 배열, 모양 은 [n class * (n class) / 2] 의사 결정 함수 의 상수 항목
  • 입 니 다.
    방법.
  • fit(X,y[,sample_weight])
  • predict(X)
  • score(X,y[,sample_weight])
  • predict_log_proba(X)
  • predict_proba(X)
  • import matplotlib.pyplot as plt
    import numpy as np
    from sklearn import datasets,linear_model,cross_validation,svm

    데이터 불 러 오기
    def load_data_classfication():
        iris=datasets.load_iris()
        X_train=iris.data
        y_train=iris.target
        return cross_validation.train_test_split(X_train,y_train,test_size=0.25,random_state=0,stratify=y_train)

    서로 다른 핵의 영향
    #   
    def test_SVC_linear(*data):
        X_train,X_test,y_train,y_test=data
        cls=svm.SVC(kernel='linear')
        cls.fit(X_train,y_train)
        print('Coefficients:%s,
    intercept %s'
    %(cls.coef_,cls.intercept_)) print('Score:%.2f'%cls.score(X_test,y_test)) X_train,X_test,y_train,y_test=load_data_classfication() test_SVC_linear(X_train,X_test,y_train,y_test)
    #    
    def test_SVC_poly(*data):
        X_train,X_test,y_train,y_test=data
        fig=plt.figure()
    
        #  degree
        degrees=range(1,20)
        train_scores=[]
        test_scores=[]
        for degree in degrees:
            cls=svm.SVC(kernel='poly',degree=degree)
            cls.fit(X_train,y_train)
            train_scores.append(cls.score(X_train,y_train))
            test_scores.append(cls.score(X_test,y_test))
        ax=fig.add_subplot(1,3,1)
        ax.plot(degrees,train_scores,label="Training score",marker='x')
        ax.plot(degrees,test_scores,label='Testing score',marker='o')
        ax.set_title('SVC_poly_degree')
        ax.set_xlabel('p')
        ax.set_ylabel('score')
        ax.set_ylim(0,1.05)
        ax.legend(loc='best',framealpha=0.5)
    
        #  gamma
        gammas=range(1,20)
        train_scores=[]
        test_scores=[]
        for gamma in gammas:
            cls=svm.SVC(kernel='poly',gamma=gamma,degree=3)
            cls.fit(X_train,y_train)
            train_scores.append(cls.score(X_train,y_train))
            test_scores.append(cls.score(X_test,y_test))
        ax=fig.add_subplot(1,3,2)
        ax.plot(gammas,train_scores,label='Training score',marker='+')
        ax.plot(gammas,test_scores,label='Testing score',marker='o')
        ax.set_title('SVC_poly_gamma')
        ax.set_xlabel(r'$\gamma$')
        ax.set_ylabel('score')
        ax.set_ylim(0,1.05)
        ax.legend(loc='best',framealpha=0.5)
    
        #  r
        rs=range(20)
        train_scores=[]
        test_scores=[]
        for r in rs:
            cls=svm.SVC(kernel='poly',gamma=10,degree=3,coef0=r)
            cls.fit(X_train,y_train)
            train_scores.append(cls.score(X_train,y_train))
            test_scores.append(cls.score(X_test,y_test))
        ax=fig.add_subplot(1,3,3)
        ax.plot(rs,train_scores,label="Training score",marker='+')
        ax.plot(rs,test_scores,label='Testing scores',marker='o')
        ax.set_title('SVC_poly_r')
        ax.set_xlabel(r'r')
        ax.set_ylabel('score')
        ax.set_ylim(0,1.05)
        ax.legend(loc='best',framealpha=0.5)
        plt.show()
    
    test_SVC_poly(X_train,X_test,y_train,y_test)
    #   
    def test_SVC_rbf(*data):
        X_train,X_test,y_train,y_test=data
        gammas=range(1,20)
        train_scores=[]
        test_scores=[]
        for gamma in gammas:
            cls=svm.SVC(kernel='rbf',gamma=gamma)
            cls.fit(X_train,y_train)
            train_scores.append(cls.score(X_train,y_train))
            test_scores.append(cls.score(X_test,y_test))
        fig=plt.figure()
        ax=fig.add_subplot(1,1,1)
        ax.plot(gammas,train_scores,label="Training score",marker='+')
        ax.plot(gammas,test_scores,label='Testing score',marker='o')
        ax.set_title('SVC_rbf')
        ax.set_xlabel(r'$\gamma$')
        ax.set_ylabel('score')
        ax.set_ylim(0,1.05)
        ax.legend(loc='best',framealpha=0.5)
        plt.show()
    
    test_SVC_rbf(X_train,X_test,y_train,y_test)
    #sigmoid 
    def test_SVC_sigmoid(*data):
        X_train,X_test,y_train,y_test=data
        fig=plt.figure()
    
        #  gamma
        gammas=np.logspace(-2,1)
        train_scores=[]
        test_scores=[]
        for gamma in gammas:
            cls=svm.SVC(kernel='sigmoid',gamma=gamma,coef0=0)
            cls.fit(X_train,y_train)
            train_scores.append(cls.score(X_train,y_train))
            test_scores.append(cls.score(X_test,y_test))
        ax=fig.add_subplot(1,2,1)
        ax.plot(gammas,train_scores,label='Training score',marker='+')
        ax.plot(gammas,test_scores,label="testing score",marker='o')
        ax.set_title('SVC_sigmoid_gammas')
        ax.set_xscale('log')
        ax.set_xlabel(r'$\gamma$')
        ax.set_ylabel('score')
        ax.set_ylim(0,1.05)
        ax.legend(loc='best',framealpha=0.5)
    
        #  r
        rs=np.linspace(0,5)
        train_scores=[]
        test_scores=[]
        for r in rs:
            cls=svm.SVC(kernel='sigmoid',coef0=r,gamma=0.01)
            cls.fit(X_train,y_train)
            train_scores.append(cls.score(X_train,y_train))
            test_scores.append(cls.score(X_test,y_test))
        ax=fig.add_subplot(1,2,2)
        ax.plot(rs,train_scores,label="Training score",marker='+')
        ax.plot(rs,test_scores,label='Testing score',marker='o')
        ax.set_title('SVC_sigmoid_r')
        ax.set_xlabel(r'r')
        ax.set_ylabel('score')
        ax.set_ylim(0,1.05)
        ax.legend(loc='best',framealpha=0.5)
        plt.show()
    
    test_SVC_sigmoid(X_train,X_test,y_train,y_test)

    좋은 웹페이지 즐겨찾기