기계 학습(22) SVM 예제 3: [Octave]는 이진 분류(비선형 SVM [불분명한 경계])를 해결합니다.

1 훈련 세트 ex6data3.mat의 시각화

훈련 세트 함수plotData.m을 도표화합니다.

기계 학습 의plotData.m 과 동일 (20)

훈련 세트 시각화 스크립트 GaussianSVM1.m의 코드 일부

%% 초기화

분명한 ; 모두 닫습니다. 클씨

%% =============== 1부: 데이터 로드 및 시각화=================

fprintf('데이터 로드 및 시각화 중...\n')

% 파일 ex6data3.mat에서 로드하고 환경에 X, y, Xval, yval 변수 값이 있는지 확인합니다.

load('ex6data3.mat');

% 훈련 세트 데이터를 플롯합니다.

플롯데이터(X, y);

% 교차 검증 세트 데이터 플롯

플롯데이터(Xval, yval);

fprintf('프로그램이 일시 중지되었습니다. 계속하려면 Enter를 누르세요.\n');

정지시키다;

결과

왼쪽 그림은 총 211개의 훈련 세트 샘플, 오른쪽 그림은 총 200개의 테스트 세트 샘플을 보여주며, 각 샘플에는 2개의 입력 특성이 있습니다.

여전히 2분류 문제인 것을 알 수 있으나 해당 경계가 명확하지 않기 때문에 교차 검증 세트 훈련 상황에 따라 적절한 매개변수 C와 σ를 선택하는 것이 필요하다(이것도 4.2의 내용이다) , 교차 검증 세트를 기반으로 매개변수를 선택합니다.

2 SVM gaussianKernel.m의 가우스 커널 기능

기계 학습 의 gaussianKernel.m 과 동일 (21)

3 최적의 C 및 σ 함수를 찾습니다.

여기서, C와 σ는 공통비가 3인 기하수열을 이용하여 연속적으로 검증하고, 매번 이 두 대응값을 기반으로 훈련을 통해 매개변수 theta를 구한 후 교차검증 집합의 정확도를 구함으로써 이번 시간을 지난번 정확도와 비교하여 정확도가 더 높은 매개변수 값을 선택합니다. 루프의 개수는 길이(vec)의 제곱, 즉 내부와 외부에 하나의 루프가 있다는 것을 쉽게 알 수 있습니다.

함수 [C, 시그마] = 데이터세트3Params(X, y, Xval, yval)

  %dataset3Params는 연습 3부에서 선택한 C 및 시그마를 반환합니다.

  % 교차 검증 세트를 기반으로 최상의 C와 시그마를 반환합니다.

  % 입력: X 학습 행렬, 행 수는 샘플 수, 열 수는 입력 기능 수

  % y 훈련 세트의 출력 특징 벡터는 1과 0을 포함하는 열 벡터입니다. 행 수는 샘플 수이고 열 수는 1입니다.

  % Xval 검증 샘플 행렬, 행 수는 샘플 수, 열 수는 입력 기능 수

  %yval은 검증 샘플 출력 특징 벡터로, 1과 0을 포함하는 열 벡터입니다. 행 수는 샘플 수이고 열 수는 1입니다.

  % 출력: 서포트 벡터 머신 및 RBF 커널에 대한 최적(C, 시그마) 학습 매개변수를 선택하는 데 사용됩니다.

  C = 1; %초기화 C, 시그마

  시그마 = 0.3;

  % 설명: 다음 코드는 교차 검증 세트를 사용하여 찾은 최적의 C 및 Sigma 학습 매개변수를 반환합니다.

  % svmPredict를 사용하여 교차 검증 세트의 레이블을 예측할 수 있습니다. 예를 들어,

  % 예측 = svmPredict(model, Xval);

  %는 교차 검증 세트에 대한 예측을 반환합니다.

  % 참고: 평균(double(predictions ~= yval))을 사용하여 예측 오류를 계산할 수 있습니다.

  vec = [0.01 0.03 0.1 0.3 1 3 10 30]';

  C = 0.01;

  시그마 = 0.01;

  모델= svmTrain(X, y, C, @(x1, x2) gaussianKernel(x1, x2, sigma));

  예측 = svmPredict(model,Xval);

  meanMin = 평균(double(예측 ~= yval));

  C_최적=C;

  sigma_optimal = 시그마;

  i = 1:길이(vec)의 경우

    j = 1:길이(vec)의 경우

      C = 사물(들);

      시그마 = 사물(j);

      모델= svmTrain(X, y, C, @(x1, x2) gaussianKernel(x1, x2, sigma));

      예측 = svmPredict(model,Xval);

      if(meanMin >= 평균(double(예측 ~= yval)))

        meanMin = 평균(double(예측 ~= yval));

        C_최적=C;

        sigma_optimal = 시그마;

      엔디프

    끝

  끝

  C = C_최적;

  시그마 = 시그마_최적;

최종 기능

4 훈련 함수 svmTrain.m

기계 학습 의 svmTrain.m 과 동일 (20)

5 비선형 SVM 스크립트 GaussianSVM1.m

%% 초기화

분명한 ; 모두 닫습니다. 클씨

%% =============== 1부: 데이터 로드 및 시각화=================

fprintf('데이터 로드 및 시각화 중...\n')

% ex6data3.mat 파일에서 로드하면 환경에 X 및 y 변수 값이 있음을 알 수 있습니다.

load('ex6data3.mat');

% 훈련 세트 데이터를 플롯합니다.

플롯데이터 (X, y);

fprintf('프로그램이 일시 중지되었습니다. 계속하려면 Enter를 누르세요.\n');

정지시키다;

%% ==================== 파트 2: 비선형 SVM 훈련 ====================

% 커널을 구현한 후 이제 이를 사용하여 SVM 분류기를 훈련할 수 있습니다.

% ex6data3.mat 파일에서 로드하면 환경에 X 및 y 변수 값이 있음을 알 수 있습니다.

fprintf('\nRBF 커널을 사용하여 SVM 교육(1~2분 정도 소요될 수 있음) ...\n');

load('ex6data3.mat');

% 여기에서 다른 SVM 매개변수를 사용해 보십시오.

[C, 시그마] =dataset3Params(X, y, Xval, yval);

% 훈련 SVM

모델= svmTrain(X, y, C, @(x1, x2) gaussianKernel(x1, x2, sigma));

시각화Boundary(X, y, 모델);

fprintf('프로그램이 일시 중지되었습니다. 계속하려면 Enter를 누르세요.\n');

정지시키다;

6 실행 결과

추천

출처blog.csdn.net/luyouqi11/article/details/132173602