vectorial teoria soporte regresion para máquinas multiclase maquinas lineal las inteligencia ejemplos clasificadores artificial matlab svm

teoria - Ejemplo completo de SVM de clase múltiple con validación cruzada usando Matlab



svm para regresion (0)

Actualmente estoy confundido sobre la implementación de SVM con validación cruzada usando Matlab ahora. Hay muchas publicaciones en stackoverflow que mencionan datos sobre SVM y su validación cruzada; sin embargo, no existe un ejemplo completo incluso utilizando los conjuntos de datos ''fisheriris'' más simples.

He resumido esas publicaciones con los problemas de la siguiente manera:

a. SVM binario y de múltiples clases: respondido por máquinas de vectores de soporte en matlab pero sin ejemplo de validación cruzada.

segundo. Validación cruzada usando SVM: Ejemplo de clasificación de SVM de 10 veces en MATLAB pero sin ejemplo de SVM de clase múltiple.

do. SVM uno contra uno y uno contra todos: se puede encontrar 1 contra 1 en las máquinas de vectores de soporte en matlab 1-contra-todo se puede encontrar en la clasificación de clases múltiples en libsvm Multi-Class SVM (uno contra todos) ) Ningún ejemplo de validación cruzada

re. SVM incorporado de libSVM y Matlab (caja de herramientas estadística) Se puede encontrar un ejemplo parcialmente completo usando libSVM en una validación cruzada de 10 veces en SVM uno contra todos (usando LibSVM)

mi. Optimización de parámetros Reentrenamiento después de la validación cruzada con libsvm

Pero las cosas son realmente complicadas para que uno aprenda y, finalmente, implemente SVM para su problema real, y es problemático y falible con solo mirar estas publicaciones anteriores. Al menos soy estúpido para resolver el problema del rompecabezas.

¿Por qué no construimos juntos códigos fácilmente comprensibles para SVM con las siguientes características?

R. Solo usa los datos de ''fisheriris''.

B. Puede ser usado para problemas binarios y de clases múltiples (fisheriris puede ser elegido para ser binario).

C. Implementar la validación cruzada.

D. Implementar tanto uno contra uno como uno contra todos.

E. Dos versiones que usan SVM compilable libSVM y Matlab respectivamente. Como svmtrain es el mismo nombre para ambos paquetes, sugiero que lo cambiemos a libsvmtrain y MEX antes de su uso. Entonces podemos comparar estos dos métodos también.

F. Actualmente, debido a la separación de datos de entrenamiento / prueba, los resultados no siempre son reproducibles. ¿Podemos arreglar esto?

F. (Opcional) Agregar optimización de parámetros.

G. (Opcional) Agregue el análisis ROC.

Mi comienzo es algunos códigos como:

#

% libSVM version_1 clc; clear all; load fisheriris [~,~,labels] = unique(species); % Labels: 1/2/3 data = zscore(meas); % Scale features numInst = size(data,1); numLabels = max(labels); %# Split training/testing idx = randperm(numInst); numTrain = 100; numTest = numInst - numTrain; trainData = data(idx(1:numTrain),:); testData = data(idx(numTrain+1:end),:); trainLabel = labels(idx(1:numTrain)); testLabel = labels(idx(numTrain+1:end)); %# Train one-against-all models model = cell(numLabels,1); for k=1:numLabels model{k} = libsvmtrain(double(trainLabel==k), trainData, ''-c 1 -g 0.2 -b 1''); end %# Get probability estimates of test instances using each model prob = zeros(numTest,numLabels); for k=1:numLabels [~,~,p] = svmpredict(double(testLabel==k), testData, model{k}, ''-b 1''); prob(:,k) = p(:,model{k}.Label==1); % Probability of class==k end % Predict the class with the highest probability [~,pred] = max(prob,[],2); acc = sum(pred == testLabel) ./ numel(testLabel); % Accuracy C = confusionmat(testLabel, pred); % Confusion matrix #

% Matlab build-in SVM version_1 clc; clear all; load fisheriris [g, gn] = grp2idx(species); % Nominal class to numeric % Split training and testing sets [trainIdx, testIdx] = crossvalind(''HoldOut'', species, 1/3); pairwise = nchoosek(1:length(gn),2); % 1-vs-1 pairwise models svmModel = cell(size(pairwise,1),1); % Store binary-classifers predTest = zeros(sum(testIdx),numel(svmModel)); % Store binary predictions %# classify using one-against-one approach, SVM with 3rd degree poly kernel for k=1:numel(svmModel) %# get only training instances belonging to this pair idx = trainIdx & any( bsxfun(@eq, g, pairwise(k,:)) , 2 ); %# train svmModel{k} = svmtrain(meas(idx,:), g(idx), ... ''BoxConstraint'',2e-1, ''Kernel_Function'',''polynomial'', ''Polyorder'',3); %# test predTest(:,k) = svmclassify(svmModel{k}, meas(testIdx,:)); end pred = mode(predTest,2); % Voting: clasify as the class receiving most votes %# performance cmat = confusionmat(g(testIdx),pred); acc = 100*sum(diag(cmat))./sum(cmat(:)); fprintf(''SVM (1-against-1):/naccuracy = %.2f%%/n'', acc); fprintf(''Confusion Matrix:/n''), disp(cmat)

Por favor, siéntase libre de agregar el suyo hasta que terminemos todas las misiones. Alguien también puede crear un proyecto de código de Google para que podamos terminar esto.

Muchas gracias.