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');
정지시키다;