exponenta event banner

Рабочий процесс извлечения элементов

В этом примере показан полный рабочий процесс извлечения элемента из данных изображения.

Получение данных

В этом примере используются данные изображения MNIST [1], состоящие из изображений рукописных цифр. Изображения имеют серую шкалу 28 на 28 пикселей. Каждое изображение имеет соответствующую метку от 0 до 9, которая является цифрой, представляемой изображением.

Начните с получения данных изображения и метки из

http://yann.lecun.com/exdb/mnist/

Распакуйте файлы. Для повышения производительности на этом длинном примере используйте данные тестирования в качестве данных обучения, а данные обучения в качестве данных тестирования.

imageFileName = 't10k-images.idx3-ubyte';
labelFileName = 't10k-labels.idx1-ubyte';

Обработайте файлы, чтобы загрузить их в рабочую область. Код для этой функции обработки появляется в конце этого примера.

[Xtrain,LabelTrain] = processMNISTdata(imageFileName,labelFileName);
Read MNIST image data...
Number of images in the dataset:  10000 ...
Each image is of 28 by 28 pixels...
The image data is read to a matrix of dimensions:  10000 by  784...
End of reading image data.

Read MNIST label data...
Number of labels in the dataset:  10000 ...
The label data is read to a matrix of dimensions:  10000 by  1...
End of reading label data.

Просмотрите несколько изображений.

rng('default') % For reproducibility
numrows = size(Xtrain,1);
ims = randi(numrows,4,1);
imgs = Xtrain(ims,:);
for i = 1:4
    pp{i} = reshape(imgs(i,:),28,28);
end
ppf = [pp{1},pp{2};pp{3},pp{4}];
imshow(ppf);

Выбрать новые размеры элемента

При выборе количества извлекаемых функций необходимо учитывать несколько факторов:

  • Другие функции используют больше памяти и вычислительного времени.

  • Меньшее количество функций может привести к плохому классификатору.

В этом примере выберите 100 элементов.

q = 100;

Извлечь элементы

Существует две функции извлечения элементов: sparsefilt и rica. Начните с sparsefilt функция. Установите число итераций равным 10, чтобы извлечение не занимало слишком много времени.

Как правило, вы получаете хорошие результаты, запустив sparsefilt алгоритм для нескольких итераций до нескольких сотен итераций. Выполнение алгоритма для слишком большого количества итераций может привести к снижению точности классификации, что является проблемой переоборудования.

Использовать sparsefilt для получения модели разреженной фильтрации с использованием 10 итераций.

Mdl = sparsefilt(Xtrain,q,'IterationLimit',10);
Warning: Solver LBFGS was not able to converge to a solution. 

sparsefilt предупреждает, что внутренний оптимизатор LBFGS не сошелся. Оптимизатор не сходится, так как установлен предел итерации 10. Тем не менее, результат можно использовать для обучения классификатора.

Создать классификатор

Преобразование исходных данных в новое представление элемента.

NewX = transform(Mdl,Xtrain);

Обучение линейного классификатора на основе преобразованных данных и правильных меток классификации в LabelTrain. Точность усвоенной модели чувствительна к fitcecoc параметр регуляризации Lambda. Попробуйте найти наилучшее значение для Lambda с помощью OptimizeHyperparameters пара имя-значение. Помните, что эта оптимизация требует времени. Если у вас есть лицензия Parallel Computing Toolbox™, используйте параллельные вычисления для более быстрого выполнения. Если у вас нет параллельной лицензии, удалите UseParallel перед запуском этого сценария.

t = templateLinear('Solver','lbfgs');
options = struct('UseParallel',true);
Cmdl = fitcecoc(NewX,LabelTrain,'Learners',t, ...
    'OptimizeHyperparameters',{'Lambda'}, ...
    'HyperparameterOptimizationOptions',options);
Copying objective function to workers...
Done copying objective function to workers.
|================================================================================================|
| Iter | Active  | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Lambda |
|      | workers | result |             | runtime     | (observed)  | (estim.)    |              |
|================================================================================================|
|    1 |       6 | Best   |      0.5777 |      8.5334 |      0.5777 |      0.5777 |      0.20606 |
|    2 |       5 | Accept |      0.8865 |      8.9062 |      0.2041 |     0.27206 |       8.8234 |
|    3 |       5 | Best   |      0.2041 |      9.7024 |      0.2041 |     0.27206 |     0.026804 |
|    4 |       6 | Best   |      0.1077 |      14.629 |      0.1077 |     0.10773 |   1.7309e-09 |
|    5 |       6 | Best   |      0.0962 |      15.767 |      0.0962 |    0.096203 |    0.0002442 |
|    6 |       6 | Accept |      0.1999 |      6.4363 |      0.0962 |     0.09622 |     0.024862 |
|    7 |       6 | Accept |      0.2074 |      6.4171 |      0.0962 |    0.096222 |     0.029034 |
|    8 |       6 | Accept |      0.1065 |      12.974 |      0.0962 |    0.096222 |    2.037e-08 |
|    9 |       6 | Accept |      0.0977 |      22.976 |      0.0962 |    0.096216 |   8.0495e-06 |
|   10 |       6 | Accept |      0.1237 |      8.5033 |      0.0962 |    0.096199 |    0.0029745 |
|   11 |       6 | Accept |      0.1076 |      10.653 |      0.0962 |    0.096208 |   0.00080903 |
|   12 |       6 | Accept |      0.1034 |      16.761 |      0.0962 |      0.0962 |   3.2145e-07 |
|   13 |       6 | Best   |      0.0933 |      16.715 |      0.0933 |    0.093293 |   6.3327e-05 |
|   14 |       6 | Accept |       0.109 |      12.946 |      0.0933 |     0.09328 |   5.7887e-09 |
|   15 |       6 | Accept |      0.0994 |      18.805 |      0.0933 |    0.093312 |   1.8981e-06 |
|   16 |       6 | Accept |       0.106 |      15.088 |      0.0933 |    0.093306 |   7.4684e-08 |
|   17 |       6 | Accept |      0.0952 |      20.372 |      0.0933 |    0.093285 |   2.2831e-05 |
|   18 |       6 | Accept |      0.0933 |      14.528 |      0.0933 |    0.093459 |   0.00013097 |
|   19 |       6 | Accept |      0.1082 |      12.764 |      0.0933 |    0.093458 |   1.0001e-09 |
|   20 |       6 | Best   |      0.0915 |      16.157 |      0.0915 |    0.092391 |   8.3234e-05 |
|================================================================================================|
| Iter | Active  | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Lambda |
|      | workers | result |             | runtime     | (observed)  | (estim.)    |              |
|================================================================================================|
|   21 |       6 | Accept |      0.8865 |      6.6373 |      0.0915 |    0.092387 |       1.6749 |
|   22 |       6 | Accept |      0.0929 |      17.306 |      0.0915 |    0.092457 |   0.00010668 |
|   23 |       6 | Accept |      0.0937 |      19.046 |      0.0915 |    0.092535 |   5.0962e-05 |
|   24 |       6 | Accept |      0.0916 |      17.932 |      0.0915 |    0.092306 |    9.023e-05 |
|   25 |       6 | Accept |      0.0935 |       17.53 |      0.0915 |    0.092431 |   0.00011726 |
|   26 |       6 | Accept |      0.1474 |      8.3795 |      0.0915 |    0.092397 |     0.006997 |
|   27 |       6 | Accept |      0.0939 |      19.188 |      0.0915 |    0.092427 |   5.2557e-05 |
|   28 |       6 | Accept |      0.1147 |      10.686 |      0.0915 |    0.092432 |    0.0015036 |
|   29 |       6 | Accept |      0.1049 |      16.609 |      0.0915 |    0.092434 |   1.4871e-07 |
|   30 |       6 | Accept |      0.1069 |      13.929 |      0.0915 |    0.092435 |   1.0899e-08 |

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 83.1976 seconds.
Total objective function evaluation time: 416.8767

Best observed feasible point:
      Lambda  
    __________

    8.3234e-05

Observed objective function value = 0.0915
Estimated objective function value = 0.09245
Function evaluation time = 16.1569

Best estimated feasible point (according to models):
     Lambda  
    _________

    9.023e-05

Estimated objective function value = 0.092435
Estimated function evaluation time = 17.0972

Классификатор оценки

Проверьте ошибку классификатора при применении к тестовым данным. Сначала загрузите данные теста.

imageFileName = 'train-images.idx3-ubyte';
labelFileName = 'train-labels.idx1-ubyte';
[Xtest,LabelTest] = processMNISTdata(imageFileName,labelFileName);
Read MNIST image data...
Number of images in the dataset:  60000 ...
Each image is of 28 by 28 pixels...
The image data is read to a matrix of dimensions:  60000 by  784...
End of reading image data.

Read MNIST label data...
Number of labels in the dataset:  60000 ...
The label data is read to a matrix of dimensions:  60000 by  1...
End of reading label data.

Вычислите потери классификации при применении классификатора к данным теста.

TestX = transform(Mdl,Xtest);
Loss = loss(Cmdl,TestX,LabelTest)
Loss =

    0.1009

Привело ли это преобразование к лучшему классификатору, чем тот, который обучался на исходных данных? Создайте классификатор на основе исходных данных обучения и оцените его потери.

Omdl = fitcecoc(Xtrain,LabelTrain,'Learners',t, ...
    'OptimizeHyperparameters',{'Lambda'}, ...
    'HyperparameterOptimizationOptions',options);
Losso = loss(Omdl,Xtest,LabelTest)
Copying objective function to workers...
Done copying objective function to workers.
|================================================================================================|
| Iter | Active  | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Lambda |
|      | workers | result |             | runtime     | (observed)  | (estim.)    |              |
|================================================================================================|
|    1 |       5 | Best   |      0.0779 |      46.965 |      0.0779 |      0.0779 |   5.7933e-08 |
|    2 |       5 | Accept |      0.0779 |      47.003 |      0.0779 |      0.0779 |   3.8643e-09 |
|    3 |       5 | Accept |      0.0779 |      47.068 |      0.0779 |      0.0779 |   1.3269e-06 |
|    4 |       6 | Accept |       0.078 |      60.714 |      0.0779 |    0.077925 |   3.0332e-05 |
|    5 |       6 | Accept |      0.0787 |      133.21 |      0.0779 |      0.0779 |     0.011605 |
|    6 |       6 | Best   |      0.0775 |      135.97 |      0.0775 |    0.077983 |   0.00020291 |
|    7 |       6 | Accept |      0.0779 |      44.642 |      0.0775 |    0.077971 |    5.735e-08 |
|    8 |       6 | Accept |      0.0785 |      123.19 |      0.0775 |      0.0775 |     0.024589 |
|    9 |       6 | Accept |      0.0779 |      43.574 |      0.0775 |      0.0775 |   1.0042e-09 |
|   10 |       6 | Accept |      0.0779 |      43.038 |      0.0775 |      0.0775 |   4.7227e-06 |
|   11 |       6 | Best   |      0.0774 |      137.51 |      0.0774 |    0.077451 |   0.00021639 |
|   12 |       6 | Accept |      0.0779 |       44.07 |      0.0774 |    0.077452 |   6.7132e-09 |
|   13 |       6 | Accept |      0.0779 |      44.822 |      0.0774 |    0.077453 |    2.873e-07 |
|   14 |       6 | Best   |      0.0744 |      233.12 |      0.0744 |    0.074402 |        6.805 |
|   15 |       6 | Accept |      0.0778 |      140.49 |      0.0744 |    0.074406 |      0.66889 |
|   16 |       6 | Accept |      0.0774 |      149.32 |      0.0744 |    0.074405 |    0.0002769 |
|   17 |       6 | Accept |      0.0774 |         155 |      0.0744 |    0.074404 |   0.00046083 |
|   18 |       6 | Accept |      0.0765 |      152.63 |      0.0744 |    0.074687 |   0.00027101 |
|   19 |       6 | Accept |      0.0768 |      156.32 |      0.0744 |    0.077558 |   0.00026573 |
|   20 |       6 | Best   |      0.0725 |      255.51 |      0.0725 |    0.073249 |       9.9961 |
|================================================================================================|
| Iter | Active  | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Lambda |
|      | workers | result |             | runtime     | (observed)  | (estim.)    |              |
|================================================================================================|
|   21 |       6 | Best   |      0.0723 |       221.5 |      0.0723 |    0.073161 |        4.212 |
|   22 |       6 | Accept |      0.0732 |      259.51 |      0.0723 |    0.073166 |       9.9916 |
|   23 |       6 | Best   |       0.072 |      261.94 |       0.072 |    0.072848 |       9.9883 |
|   24 |       6 | Accept |      0.0778 |      122.56 |       0.072 |    0.072854 |      0.13413 |
|   25 |       6 | Accept |      0.0733 |      258.54 |       0.072 |    0.072946 |       9.9904 |
|   26 |       6 | Accept |      0.0746 |      244.53 |       0.072 |    0.073144 |       7.0911 |
|   27 |       6 | Accept |      0.0779 |      44.573 |       0.072 |    0.073134 |   2.1183e-08 |
|   28 |       6 | Accept |       0.078 |      45.478 |       0.072 |    0.073126 |   1.1663e-05 |
|   29 |       6 | Accept |      0.0779 |      43.954 |       0.072 |    0.073118 |    1.336e-07 |
|   30 |       6 | Accept |      0.0779 |      44.574 |       0.072 |    0.073112 |   1.7282e-09 |

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 690.8688 seconds.
Total objective function evaluation time: 3741.3176

Best observed feasible point:
    Lambda
    ______

    9.9883

Observed objective function value = 0.072
Estimated objective function value = 0.073112
Function evaluation time = 261.9357

Best estimated feasible point (according to models):
    Lambda
    ______

    9.9961

Estimated objective function value = 0.073112
Estimated function evaluation time = 257.9556


Losso =

    0.0865

Классификатор, основанный на разреженной фильтрации, имеет несколько более высокие потери, чем классификатор, основанный на исходных данных. Однако классификатор использует только 100 элементов, а не 784 элемента в исходных данных и гораздо быстрее в создании. Попробуйте сделать лучше классификатор разреженной фильтрации, увеличив q от 100 до 200, что все еще намного меньше 784.

q = 200;
Mdl2 = sparsefilt(Xtrain,q,'IterationLimit',10);
NewX = transform(Mdl2,Xtrain);
TestX = transform(Mdl2,Xtest);
Cmdl = fitcecoc(NewX,LabelTrain,'Learners',t, ...
    'OptimizeHyperparameters',{'Lambda'}, ...
    'HyperparameterOptimizationOptions',options);
Loss2 = loss(Cmdl,TestX,LabelTest)
Warning: Solver LBFGS was not able to converge to a solution. 
Copying objective function to workers...
Done copying objective function to workers.
|================================================================================================|
| Iter | Active  | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Lambda |
|      | workers | result |             | runtime     | (observed)  | (estim.)    |              |
|================================================================================================|
|    1 |       5 | Best   |      0.8865 |      7.3578 |      0.8865 |      0.8865 |         1.93 |
|    2 |       5 | Accept |      0.8865 |      7.3408 |      0.8865 |      0.8865 |       2.5549 |
|    3 |       6 | Best   |      0.0693 |      9.0077 |      0.0693 |    0.069376 |   9.9515e-09 |
|    4 |       5 | Accept |      0.0705 |      9.1067 |      0.0693 |    0.069374 |   1.2123e-08 |
|    5 |       5 | Accept |      0.1489 |      9.5685 |      0.0693 |    0.069374 |     0.015542 |
|    6 |       6 | Accept |      0.8865 |      7.5032 |      0.0693 |     0.06943 |       4.7067 |
|    7 |       6 | Accept |       0.071 |      8.8044 |      0.0693 |    0.069591 |   5.0861e-09 |
|    8 |       6 | Accept |      0.0715 |      8.9517 |      0.0693 |    0.070048 |    1.001e-09 |
|    9 |       6 | Accept |      0.0833 |      14.393 |      0.0693 |    0.069861 |    0.0014191 |
|   10 |       6 | Best   |      0.0594 |      25.565 |      0.0594 |    0.059458 |    6.767e-05 |
|   11 |       6 | Accept |      0.0651 |      20.074 |      0.0594 |    0.059463 |    8.078e-07 |
|   12 |       6 | Accept |      0.0695 |      14.495 |      0.0594 |    0.059473 |   1.0381e-07 |
|   13 |       6 | Accept |      0.1042 |      12.085 |      0.0594 |    0.059386 |    0.0039745 |
|   14 |       6 | Accept |       0.065 |      20.235 |      0.0594 |    0.059416 |   0.00031759 |
|   15 |       6 | Accept |      0.0705 |      10.929 |      0.0594 |    0.059416 |   3.6503e-08 |
|   16 |       6 | Accept |      0.0637 |      30.593 |      0.0594 |    0.059449 |   8.8718e-06 |
|   17 |       6 | Accept |       0.064 |      25.084 |      0.0594 |    0.059464 |   2.6286e-06 |
|   18 |       6 | Accept |      0.0605 |      31.964 |      0.0594 |    0.059387 |    2.459e-05 |
|   19 |       6 | Accept |      0.0606 |      23.149 |      0.0594 |    0.059312 |    0.0001464 |
|   20 |       6 | Accept |      0.0602 |      32.178 |      0.0594 |    0.059874 |   4.1437e-05 |
|================================================================================================|
| Iter | Active  | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Lambda |
|      | workers | result |             | runtime     | (observed)  | (estim.)    |              |
|================================================================================================|
|   21 |       6 | Accept |      0.0594 |      27.686 |      0.0594 |    0.059453 |   8.0717e-05 |
|   22 |       6 | Accept |      0.0612 |      33.427 |      0.0594 |    0.059476 |   1.6878e-05 |
|   23 |       6 | Accept |      0.0673 |      17.444 |      0.0594 |    0.059475 |   3.1788e-07 |
|   24 |       6 | Best   |      0.0593 |      26.262 |      0.0593 |     0.05944 |   7.8179e-05 |
|   25 |       6 | Accept |       0.248 |      7.6345 |      0.0593 |    0.059409 |     0.095654 |
|   26 |       6 | Accept |      0.0598 |      28.536 |      0.0593 |    0.059465 |   5.0819e-05 |
|   27 |       6 | Accept |      0.0701 |      9.0545 |      0.0593 |    0.059466 |   1.8937e-09 |
|   28 |       5 | Accept |      0.7081 |      7.1176 |      0.0593 |    0.059372 |      0.30394 |
|   29 |       5 | Accept |      0.0676 |      11.782 |      0.0593 |    0.059372 |   6.1136e-08 |
|   30 |       3 | Accept |        0.06 |      23.556 |      0.0593 |    0.059422 |   0.00010144 |
|   31 |       3 | Accept |      0.0725 |      16.069 |      0.0593 |    0.059422 |   0.00069403 |
|   32 |       3 | Accept |      0.1928 |      8.3732 |      0.0593 |    0.059422 |     0.040402 |

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 32
Total elapsed time: 97.7946 seconds.
Total objective function evaluation time: 545.3255

Best observed feasible point:
      Lambda  
    __________

    7.8179e-05

Observed objective function value = 0.0593
Estimated objective function value = 0.059422
Function evaluation time = 26.2624

Best estimated feasible point (according to models):
      Lambda  
    __________

    7.8179e-05

Estimated objective function value = 0.059422
Estimated function evaluation time = 26.508


Loss2 =

    0.0682

На этот раз потери классификации ниже, чем у исходного классификатора данных.

Попробуйте RICA

Попробуйте использовать функцию извлечения других функций, rica. Извлеките 200 элементов, создайте классификатор и проверьте его потерю на тестовых данных. Используйте дополнительные итерации для rica функция, потому что rica может работать лучше с большим количеством итераций, чем sparsefilt использует.

Часто перед извлечением признаков выполняется «предварительная обработка» входных данных в качестве шага предварительной обработки данных. Этап предварительного преобразования включает в себя два преобразования, декорреляцию и стандартизацию, которые делают предикторы имеющими нулевое среднее значение и ковариацию идентичности. rica поддерживает только преобразование стандартизации. Вы используете Standardize аргумент пары имя-значение, чтобы сделать предикторы имеют нулевое среднее значение и единичную дисперсию. Можно также преобразовать изображения для нормализации контрастности по отдельности, применив zscore преобразование перед вызовом sparsefilt или rica.

Mdl3 = rica(Xtrain,q,'IterationLimit',400,'Standardize',true);
NewX = transform(Mdl3,Xtrain);
TestX = transform(Mdl3,Xtest);
Cmdl = fitcecoc(NewX,LabelTrain,'Learners',t, ...
    'OptimizeHyperparameters',{'Lambda'}, ...
    'HyperparameterOptimizationOptions',options);
Loss3 = loss(Cmdl,TestX,LabelTest)
Warning: Solver LBFGS was not able to converge to a solution. 
Copying objective function to workers...
Done copying objective function to workers.
|================================================================================================|
| Iter | Active  | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Lambda |
|      | workers | result |             | runtime     | (observed)  | (estim.)    |              |
|================================================================================================|
|    1 |       6 | Best   |      0.1179 |      12.012 |      0.1179 |      0.1179 |       8.4727 |
|    2 |       6 | Best   |       0.082 |      13.384 |       0.082 |    0.083897 |   4.3291e-09 |
|    3 |       6 | Best   |      0.0809 |      18.917 |      0.0809 |    0.080902 |    1.738e-05 |
|    4 |       6 | Accept |      0.0821 |      19.172 |      0.0809 |     0.08091 |   3.8101e-06 |
|    5 |       6 | Accept |      0.0921 |      14.445 |      0.0809 |    0.086349 |       2.3753 |
|    6 |       6 | Accept |      0.0809 |      13.393 |      0.0809 |    0.083836 |   1.3757e-08 |
|    7 |       6 | Best   |       0.076 |      28.075 |       0.076 |    0.081808 |   0.00027773 |
|    8 |       6 | Best   |      0.0758 |      29.686 |      0.0758 |    0.078829 |   0.00068195 |
|    9 |       6 | Accept |      0.0829 |      13.373 |      0.0758 |    0.078733 |   1.7543e-07 |
|   10 |       6 | Accept |      0.0826 |      14.031 |      0.0758 |    0.078512 |   1.0045e-09 |
|   11 |       6 | Accept |      0.0817 |      13.662 |      0.0758 |    0.078077 |   2.4568e-08 |
|   12 |       6 | Accept |      0.0799 |      19.311 |      0.0758 |    0.077658 |   1.4061e-05 |
|   13 |       6 | Best   |       0.065 |      25.148 |       0.065 |    0.064974 |     0.060326 |
|   14 |       6 | Accept |      0.0787 |      23.434 |       0.065 |    0.064947 |   0.00012407 |
|   15 |       6 | Accept |       0.072 |      19.167 |       0.065 |    0.064997 |      0.43899 |
|   16 |       6 | Accept |       0.073 |       28.39 |       0.065 |    0.065053 |    0.0023721 |
|   17 |       6 | Accept |      0.0787 |      29.887 |       0.065 |    0.064928 |   0.00042914 |
|   18 |       6 | Accept |      0.0662 |      26.374 |       0.065 |    0.064295 |    0.0077638 |
|   19 |       6 | Accept |      0.0652 |      24.937 |       0.065 |    0.064502 |     0.087389 |
|   20 |       6 | Accept |      0.0655 |      25.416 |       0.065 |    0.064762 |     0.072931 |
|================================================================================================|
| Iter | Active  | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Lambda |
|      | workers | result |             | runtime     | (observed)  | (estim.)    |              |
|================================================================================================|
|   21 |       6 | Best   |      0.0645 |      25.529 |      0.0645 |    0.064691 |     0.059245 |
|   22 |       6 | Accept |       0.065 |      23.832 |      0.0645 |     0.06474 |     0.025521 |
|   23 |       6 | Accept |      0.0819 |      20.343 |      0.0645 |    0.064732 |   7.2593e-07 |
|   24 |       6 | Accept |      0.0664 |      23.732 |      0.0645 |    0.064718 |       0.1534 |
|   25 |       6 | Accept |      0.0651 |      24.796 |      0.0645 |    0.064693 |     0.038371 |
|   26 |       6 | Accept |      0.0651 |      25.449 |      0.0645 |    0.064613 |     0.014318 |
|   27 |       6 | Accept |      0.0652 |      25.092 |      0.0645 |    0.064713 |     0.037107 |
|   28 |       6 | Accept |      0.0645 |      24.404 |      0.0645 |      0.0647 |     0.042959 |
|   29 |       6 | Accept |      0.0649 |      24.704 |      0.0645 |    0.064729 |     0.042776 |
|   30 |       6 | Accept |      0.0652 |      24.341 |      0.0645 |    0.064786 |     0.035788 |

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 124.9755 seconds.
Total objective function evaluation time: 654.4364

Best observed feasible point:
     Lambda 
    ________

    0.059245

Observed objective function value = 0.0645
Estimated objective function value = 0.064932
Function evaluation time = 25.5294

Best estimated feasible point (according to models):
     Lambda 
    ________

    0.042776

Estimated objective function value = 0.064786
Estimated function evaluation time = 24.7849


Loss3 =

    0.0749

rica- классификатор на основе имеет несколько более высокие тестовые потери по сравнению с классификатором разреженной фильтрации.

Дополнительные возможности

Функции извлечения элементов имеют мало параметров настройки. Одним из параметров, который может повлиять на результаты, является количество запрошенных элементов. Посмотрите, как хорошо работают классификаторы, основанные на 1000 функциях, а не на 200 ранее опробованных функциях или 784 функциях в исходных данных. Использование большего количества функций, чем в исходных данных, называется «чрезмерным» обучением. И наоборот, использование меньшего количества функций называется «неполным» обучением. Чрезмерное обучение может привести к повышению точности классификации, в то время как неполное обучение может сэкономить память и время.

q = 1000;
Mdl4 = sparsefilt(Xtrain,q,'IterationLimit',10);
NewX = transform(Mdl4,Xtrain);
TestX = transform(Mdl4,Xtest);
Cmdl = fitcecoc(NewX,LabelTrain,'Learners',t, ...
    'OptimizeHyperparameters',{'Lambda'}, ...
    'HyperparameterOptimizationOptions',options);
Loss4 = loss(Cmdl,TestX,LabelTest)
Warning: Solver LBFGS was not able to converge to a solution. 
Copying objective function to workers...
Done copying objective function to workers.
|================================================================================================|
| Iter | Active  | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Lambda |
|      | workers | result |             | runtime     | (observed)  | (estim.)    |              |
|================================================================================================|
|    1 |       6 | Best   |      0.5293 |      39.885 |      0.5293 |      0.5293 |      0.20333 |
|    2 |       6 | Accept |      0.8022 |      43.475 |      0.5293 |     0.66575 |      0.77337 |
|    3 |       6 | Best   |      0.0406 |      52.594 |      0.0406 |     0.11113 |   9.1082e-09 |
|    4 |       6 | Best   |      0.0403 |       54.73 |      0.0403 |    0.060037 |   2.3947e-09 |
|    5 |       6 | Accept |      0.0695 |      124.96 |      0.0403 |    0.040319 |     0.001361 |
|    6 |       6 | Accept |      0.0406 |      53.691 |      0.0403 |    0.040207 |   1.0005e-09 |
|    7 |       6 | Best   |      0.0388 |      178.69 |      0.0388 |    0.038811 |   1.4358e-06 |
|    8 |       6 | Accept |      0.0615 |      138.53 |      0.0388 |    0.038817 |   0.00088731 |
|    9 |       6 | Best   |      0.0385 |       61.81 |      0.0385 |    0.038557 |   7.4709e-08 |
|   10 |       6 | Accept |      0.0399 |      54.198 |      0.0385 |    0.038555 |   2.1909e-08 |
|   11 |       6 | Accept |      0.0402 |      234.55 |      0.0385 |    0.038639 |     0.000101 |
|   12 |       6 | Accept |      0.0431 |      198.09 |      0.0385 |    0.038636 |   0.00018896 |
|   13 |       6 | Accept |      0.0393 |      75.811 |      0.0385 |    0.039016 |   1.1597e-07 |
|   14 |       6 | Accept |      0.0387 |      61.281 |      0.0385 |    0.038908 |   7.0518e-08 |
|   15 |       6 | Accept |      0.0393 |      125.73 |      0.0385 |    0.038931 |   2.8429e-07 |
|   16 |       6 | Accept |      0.0397 |      89.804 |      0.0385 |    0.039106 |   1.4603e-07 |
|   17 |       6 | Accept |      0.0391 |      126.88 |      0.0385 |    0.039081 |   3.0065e-07 |
|   18 |       6 | Accept |      0.0398 |      56.157 |      0.0385 |    0.039123 |   4.1563e-08 |
|   19 |       6 | Accept |      0.0406 |       55.25 |      0.0385 |    0.039122 |   1.0014e-09 |
|   20 |       6 | Accept |      0.0385 |      272.92 |      0.0385 |    0.039127 |    9.568e-06 |
|================================================================================================|
| Iter | Active  | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Lambda |
|      | workers | result |             | runtime     | (observed)  | (estim.)    |              |
|================================================================================================|
|   21 |       6 | Accept |      0.0412 |      55.191 |      0.0385 |    0.039124 |   3.3737e-09 |
|   22 |       6 | Accept |      0.0394 |      229.72 |      0.0385 |    0.039117 |   3.2757e-06 |
|   23 |       6 | Best   |      0.0379 |      295.55 |      0.0379 |    0.039116 |   2.8439e-05 |
|   24 |       6 | Accept |      0.0394 |      168.74 |      0.0379 |    0.039111 |    9.778e-07 |
|   25 |       6 | Accept |       0.039 |      281.91 |      0.0379 |    0.039112 |   8.0694e-06 |
|   26 |       6 | Accept |      0.8865 |      54.865 |      0.0379 |    0.038932 |       9.9885 |
|   27 |       6 | Accept |      0.0381 |       300.7 |      0.0379 |    0.037996 |   2.6027e-05 |
|   28 |       6 | Accept |      0.0406 |      54.611 |      0.0379 |    0.037996 |   1.6057e-09 |
|   29 |       6 | Accept |      0.1272 |      76.648 |      0.0379 |    0.037997 |     0.012507 |
|   30 |       6 | Accept |      0.0403 |      57.931 |      0.0379 |    0.037997 |   4.9907e-08 |

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 724.6036 seconds.
Total objective function evaluation time: 3674.8899

Best observed feasible point:
      Lambda  
    __________

    2.8439e-05

Observed objective function value = 0.0379
Estimated objective function value = 0.03801
Function evaluation time = 295.5515

Best estimated feasible point (according to models):
      Lambda  
    __________

    2.6027e-05

Estimated objective function value = 0.037997
Estimated function evaluation time = 297.6756


Loss4 =

    0.0440

Классификатор, основанный на сверхполной разреженной фильтрации с 1000 извлеченными признаками, имеет самую низкую тестовую потерю среди любого еще не проверенного классификатора.

Mdl5 = rica(Xtrain,q,'IterationLimit',400,'Standardize',true);
NewX = transform(Mdl5,Xtrain);
TestX = transform(Mdl5,Xtest);
Cmdl = fitcecoc(NewX,LabelTrain,'Learners',t, ...
    'OptimizeHyperparameters',{'Lambda'}, ...
    'HyperparameterOptimizationOptions',options);
Loss5 = loss(Cmdl,TestX,LabelTest)
Warning: Solver LBFGS was not able to converge to a solution. 
Copying objective function to workers...
Done copying objective function to workers.
|================================================================================================|
| Iter | Active  | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Lambda |
|      | workers | result |             | runtime     | (observed)  | (estim.)    |              |
|================================================================================================|
|    1 |       6 | Best   |      0.0764 |      46.206 |      0.0764 |      0.0764 |   8.4258e-09 |
|    2 |       6 | Accept |       0.077 |      141.95 |      0.0764 |      0.0767 |   6.9536e-06 |
|    3 |       6 | Accept |      0.0771 |      146.87 |      0.0764 |    0.076414 |   7.3378e-06 |
|    4 |       6 | Best   |      0.0709 |      182.51 |      0.0709 |      0.0709 |      0.48851 |
|    5 |       6 | Accept |      0.0764 |      46.923 |      0.0709 |    0.070903 |   5.0695e-09 |
|    6 |       6 | Best   |       0.068 |      294.89 |       0.068 |    0.068004 |    0.0029652 |
|    7 |       6 | Accept |       0.125 |      99.095 |       0.068 |    0.068001 |       9.9814 |
|    8 |       6 | Accept |      0.0693 |      321.66 |       0.068 |    0.067999 |    0.0015167 |
|    9 |       6 | Accept |      0.0882 |      138.03 |       0.068 |       0.068 |       1.8203 |
|   10 |       6 | Accept |      0.0753 |      285.07 |       0.068 |    0.067991 |   0.00042423 |
|   11 |       6 | Accept |      0.0764 |      47.704 |       0.068 |    0.067984 |   1.6326e-07 |
|   12 |       6 | Accept |      0.0763 |      46.514 |       0.068 |     0.06798 |   1.0048e-09 |
|   13 |       6 | Best   |      0.0643 |       252.2 |      0.0643 |      0.0643 |     0.095965 |
|   14 |       6 | Accept |      0.0766 |      168.37 |      0.0643 |      0.0643 |   9.1336e-07 |
|   15 |       6 | Accept |      0.0753 |      153.29 |      0.0643 |    0.064301 |   4.8641e-05 |
|   16 |       6 | Accept |      0.0662 |      256.65 |      0.0643 |    0.064298 |    0.0093576 |
|   17 |       6 | Best   |      0.0632 |       224.2 |      0.0632 |    0.063226 |     0.031314 |
|   18 |       6 | Accept |      0.0673 |      219.59 |      0.0632 |    0.063201 |      0.20528 |
|   19 |       6 | Accept |      0.0637 |      244.17 |      0.0632 |    0.063208 |     0.075001 |
|   20 |       6 | Accept |       0.064 |      234.85 |      0.0632 |     0.06321 |     0.081232 |
|================================================================================================|
| Iter | Active  | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Lambda |
|      | workers | result |             | runtime     | (observed)  | (estim.)    |              |
|================================================================================================|
|   21 |       6 | Accept |      0.0646 |       242.2 |      0.0632 |    0.063315 |     0.078081 |
|   22 |       6 | Accept |      0.0633 |      217.97 |      0.0632 |    0.063233 |     0.039495 |
|   23 |       6 | Accept |      0.0643 |      224.22 |      0.0632 |    0.063496 |     0.052107 |
|   24 |       6 | Accept |      0.0761 |      45.102 |      0.0632 |    0.063509 |   4.3946e-08 |
|   25 |       6 | Accept |      0.0645 |      221.24 |      0.0632 |    0.063778 |     0.044455 |
|   26 |       6 | Accept |      0.0763 |      44.572 |      0.0632 |    0.063778 |   1.9139e-09 |
|   27 |       6 | Accept |      0.0639 |       216.9 |      0.0632 |    0.063791 |     0.041759 |
|   28 |       6 | Accept |      0.0766 |      45.609 |      0.0632 |     0.06379 |   2.0642e-08 |
|   29 |       6 | Accept |      0.0765 |      121.35 |      0.0632 |    0.063789 |   3.5882e-07 |
|   30 |       6 | Accept |      0.0636 |      215.47 |      0.0632 |    0.063755 |     0.038062 |

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 952.7987 seconds.
Total objective function evaluation time: 5145.3787

Best observed feasible point:
     Lambda 
    ________

    0.031314

Observed objective function value = 0.0632
Estimated objective function value = 0.063828
Function evaluation time = 224.2018

Best estimated feasible point (according to models):
     Lambda 
    ________

    0.044455

Estimated objective function value = 0.063755
Estimated function evaluation time = 219.4845


Loss5 =

    0.0748

Классификатор на основе RICA с 1000 извлеченными признаками имеет аналогичные тестовые потери с классификатором RICA на основе 200 извлеченных признаков.

Оптимизация гиперпараметров с помощью bayesopt

Функции извлечения функций имеют следующие параметры настройки:

  • Предел итерации

  • Функция, либо rica или sparsefilt

  • Параметр Lambda

  • Количество изученных функций q

fitcecoc параметр регуляризации также влияет на точность усвоенного классификатора. Включите этот параметр также в список гиперпараметров.

Чтобы эффективно искать доступные параметры, попробуйте bayesopt. Используйте следующую целевую функцию, которая включает параметры, переданные из рабочей области.

function objective = filterica(x,Xtrain,Xtest,LabelTrain,LabelTest,winit)

initW = winit(1:size(Xtrain,2),1:x.q);
if char(x.solver) == 'r'
    Mdl = rica(Xtrain,x.q,'Lambda',x.lambda,'IterationLimit',x.iterlim, ...
        'InitialTransformWeights',initW,'Standardize',true);
else
    Mdl = sparsefilt(Xtrain,x.q,'Lambda',x.lambda,'IterationLimit',x.iterlim, ...
        'InitialTransformWeights',initW);
end

NewX = transform(Mdl,Xtrain);
TestX = transform(Mdl,Xtest);
t = templateLinear('Lambda',x.lambdareg,'Solver','lbfgs');
Cmdl = fitcecoc(NewX,LabelTrain,'Learners',t);
objective = loss(Cmdl,TestX,LabelTest);

Чтобы удалить источники вариаций, исправьте матрицу начального веса преобразования.

W = randn(1e4,1e3);

Создайте гиперпараметры для целевой функции.

iterlim = optimizableVariable('iterlim',[5,500],'Type','integer');
lambda = optimizableVariable('lambda',[0,10]);
solver = optimizableVariable('solver',{'r','s'},'Type','categorical');
qvar = optimizableVariable('q',[10,1000],'Type','integer');
lambdareg = optimizableVariable('lambdareg',[1e-6,1],'Transform','log');
vars = [iterlim,lambda,solver,qvar,lambdareg];

Выполните оптимизацию без предупреждений, которые возникают, когда внутренние оптимизации не выполняются до завершения. Выполните 60 итераций вместо 30 по умолчанию, чтобы дать оптимизации больше шансов найти хорошее значение.

warning('off','stats:classreg:learning:fsutils:Solver:LBFGSUnableToConverge');
results = bayesopt(@(x) filterica(x,Xtrain,Xtest,LabelTrain,LabelTest,W),vars, ...
    'UseParallel',true,'MaxObjectiveEvaluations',60);
warning('on','stats:classreg:learning:fsutils:Solver:LBFGSUnableToConverge');
Copying objective function to workers...
Done copying objective function to workers.
|============================================================================================================================================================|
| Iter | Active  | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |      iterlim |       lambda |       solver |            q |    lambdareg |
|      | workers | result |             | runtime     | (observed)  | (estim.)    |              |              |              |              |              |
|============================================================================================================================================================|
|    1 |       6 | Best   |     0.16408 |      33.743 |     0.16408 |     0.16408 |          140 |       9.4661 |            s |           98 |    0.0007106 |
|    2 |       6 | Best   |    0.079213 |      51.975 |    0.079213 |     0.09064 |           10 |        9.466 |            r |          685 |     0.010462 |
|    3 |       6 | Best   |    0.074897 |      82.031 |    0.074897 |    0.074983 |           32 |       3.7554 |            r |          689 |      0.13737 |
|    4 |       6 | Accept |     0.07546 |      93.221 |    0.074897 |    0.075073 |          178 |       3.9741 |            r |          196 |       0.1829 |
|    5 |       6 | Accept |     0.13924 |      30.444 |    0.074897 |    0.074933 |          282 |      0.36123 |            r |           33 |      0.99029 |
|    6 |       6 | Accept |    0.083964 |         133 |    0.074897 |    0.074933 |           58 |       9.7653 |            r |          685 |    0.0014623 |
|    7 |       6 | Accept |     0.08128 |      33.609 |    0.074897 |    0.074957 |            8 |       5.6351 |            r |          519 |    0.0065822 |
|    8 |       6 | Accept |    0.090751 |      203.96 |    0.074897 |    0.074913 |          131 |      0.73308 |            r |          577 |   2.1172e-05 |
|    9 |       6 | Accept |    0.090001 |      172.38 |    0.074897 |    0.074904 |          146 |       8.1899 |            r |          454 |   1.4417e-05 |
|   10 |       6 | Accept |    0.080191 |       316.8 |    0.074897 |    0.074897 |          164 |      0.48783 |            r |          727 |     0.004936 |
|   11 |       6 | Best   |    0.060472 |      40.777 |    0.060472 |    0.060731 |            5 |       2.3201 |            s |          530 |   1.1957e-06 |
|   12 |       6 | Accept |    0.079027 |      45.841 |    0.060472 |    0.060632 |            8 |      0.55541 |            r |          696 |     0.030914 |
|   13 |       6 | Accept |    0.074823 |      237.43 |    0.060472 |     0.06067 |          109 |       4.5352 |            r |          781 |      0.12274 |
|   14 |       6 | Accept |     0.84009 |      85.121 |    0.060472 |    0.060468 |          306 |      0.59533 |            s |          148 |      0.89675 |
|   15 |       6 | Accept |     0.15637 |      200.13 |    0.060472 |    0.060451 |           90 |       3.0192 |            s |          999 |    0.0043768 |
|   16 |       6 | Accept |     0.69006 |      14.273 |    0.060472 |     0.06047 |            6 |       9.4568 |            s |          407 |      0.13833 |
|   17 |       6 | Accept |    0.093035 |      205.83 |    0.060472 |    0.060469 |          263 |       2.3083 |            r |          308 |   1.0016e-06 |
|   18 |       6 | Accept |     0.18753 |      6.0238 |    0.060472 |    0.060527 |           36 |        9.806 |            s |           24 |   8.3653e-06 |
|   19 |       6 | Accept |       0.119 |      749.98 |    0.060472 |    0.060751 |          482 |      0.51927 |            s |          818 |   1.5416e-06 |
|   20 |       6 | Accept |    0.076414 |      751.21 |    0.060472 |    0.060754 |          387 |       9.9936 |            r |          784 |      0.26786 |
|============================================================================================================================================================|
| Iter | Active  | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |      iterlim |       lambda |       solver |            q |    lambdareg |
|      | workers | result |             | runtime     | (observed)  | (estim.)    |              |              |              |              |              |
|============================================================================================================================================================|
|   21 |       6 | Accept |    0.099332 |      7.2298 |    0.060472 |    0.060828 |           20 |      0.78894 |            s |           49 |   1.0335e-06 |
|   22 |       6 | Accept |    0.090139 |      7.9815 |    0.060472 |    0.060858 |           11 |       3.2973 |            r |           88 |   2.7437e-06 |
|   23 |       6 | Accept |    0.076696 |      323.64 |    0.060472 |    0.060872 |          120 |       1.9199 |            r |          999 |       0.2537 |
|   24 |       6 | Accept |    0.098003 |      50.544 |    0.060472 |    0.060876 |          492 |       1.7197 |            r |           27 |   0.00020896 |
|   25 |       6 | Accept |     0.10383 |      56.568 |    0.060472 |     0.06101 |           11 |        5.256 |            s |          971 |   0.00054471 |
|   26 |       6 | Accept |     0.14405 |      30.426 |    0.060472 |    0.060797 |          477 |       5.5475 |            r |           12 |     0.022342 |
|   27 |       6 | Accept |     0.09046 |      53.398 |    0.060472 |    0.060815 |           13 |       2.1216 |            r |          986 |   1.1811e-06 |
|   28 |       6 | Best   |    0.051641 |      99.452 |    0.051641 |    0.051368 |           23 |       2.6976 |            s |          985 |   1.0558e-06 |
|   29 |       6 | Accept |     0.10016 |      6.4162 |    0.051641 |    0.051365 |            6 |       3.7223 |            r |           69 |   9.2926e-05 |
|   30 |       6 | Accept |     0.10943 |      40.676 |    0.051641 |    0.051391 |          488 |       5.2092 |            r |           19 |   2.4162e-05 |
|   31 |       6 | Accept |    0.086761 |      7.8419 |    0.051641 |    0.051393 |           24 |       6.5535 |            r |           42 |    0.0013244 |
|   32 |       6 | Best   |      0.0504 |      96.816 |      0.0504 |    0.050526 |           14 |        9.929 |            s |         1000 |   2.8809e-06 |
|   33 |       6 | Accept |    0.088789 |      81.158 |      0.0504 |    0.050525 |           14 |       1.0441 |            r |          927 |   0.00021061 |
|   34 |       6 | Accept |    0.083083 |      887.17 |      0.0504 |     0.05052 |          351 |       6.8834 |            r |          978 |    0.0026404 |
|   35 |       6 | Best   |    0.050023 |      99.493 |    0.050023 |    0.050372 |           19 |       9.9813 |            s |          899 |   1.0257e-06 |
|   36 |       6 | Accept |    0.053338 |      113.36 |    0.050023 |    0.050499 |            7 |       4.7855 |            s |          984 |   1.8611e-06 |
|   37 |       6 | Accept |    0.089024 |      70.047 |    0.050023 |      0.0505 |           15 |       8.8301 |            r |          984 |   6.0636e-06 |
|   38 |       6 | Accept |    0.052029 |      95.822 |    0.050023 |    0.050551 |            7 |        9.759 |            s |          996 |   3.7871e-06 |
|   39 |       6 | Accept |    0.085992 |      73.422 |    0.050023 |    0.050528 |            5 |       2.7837 |            r |          968 |     0.004483 |
|   40 |       6 | Accept |    0.091159 |      5.8348 |    0.050023 |     0.05052 |           15 |       8.7732 |            r |           37 |     0.084632 |
|============================================================================================================================================================|
| Iter | Active  | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |      iterlim |       lambda |       solver |            q |    lambdareg |
|      | workers | result |             | runtime     | (observed)  | (estim.)    |              |              |              |              |              |
|============================================================================================================================================================|
|   41 |       6 | Best   |    0.046444 |      152.93 |    0.046444 |    0.047062 |           30 |       4.0843 |            s |          997 |    7.279e-06 |
|   42 |       6 | Accept |    0.052712 |      58.107 |    0.046444 |     0.04698 |           12 |      0.99592 |            s |          652 |   1.0258e-06 |
|   43 |       6 | Accept |    0.058005 |      91.928 |    0.046444 |    0.047263 |           10 |        5.511 |            s |         1000 |   2.4589e-05 |
|   44 |       6 | Accept |    0.055413 |      103.25 |    0.046444 |    0.047306 |            7 |       5.6791 |            s |          953 |   1.4656e-06 |
|   45 |       6 | Accept |    0.052517 |      96.201 |    0.046444 |    0.049604 |           10 |       5.9403 |            s |          996 |   1.0525e-05 |
|   46 |       6 | Accept |    0.089527 |      76.617 |    0.046444 |    0.046888 |           20 |       1.0744 |            r |          965 |      0.96766 |
|   47 |       6 | Accept |    0.050062 |      99.709 |    0.046444 |    0.046735 |           12 |       9.9236 |            s |          975 |   4.5916e-06 |
|   48 |       6 | Accept |     0.21166 |      90.117 |    0.046444 |    0.049716 |          495 |       1.1996 |            s |           86 |   0.00022338 |
|   49 |       6 | Accept |    0.054535 |        79.1 |    0.046444 |    0.046679 |            6 |      0.22929 |            s |          967 |   7.6974e-06 |
|   50 |       6 | Accept |     0.12385 |      964.74 |    0.046444 |    0.049963 |          474 |       4.7085 |            s |          991 |   8.6984e-05 |
|   51 |       6 | Accept |    0.052016 |      76.098 |    0.046444 |    0.049914 |           10 |       1.0798 |            s |          922 |    1.133e-06 |
|   52 |       6 | Accept |    0.048984 |      95.054 |    0.046444 |    0.049891 |           12 |         4.69 |            s |          976 |   1.0189e-06 |
|   53 |       6 | Accept |      0.1948 |      889.11 |    0.046444 |    0.047903 |          466 |       7.9582 |            s |          986 |    0.0012319 |
|   54 |       6 | Accept |     0.10652 |       5.076 |    0.046444 |    0.047961 |           10 |       5.9107 |            r |           40 |      0.52677 |
|   55 |       6 | Accept |    0.074194 |      319.41 |    0.046444 |     0.04981 |          130 |       2.6437 |            s |          997 |   7.8756e-06 |
|   56 |       6 | Accept |      0.1014 |      45.184 |    0.046444 |    0.049828 |          480 |       6.1835 |            r |           24 |   2.0019e-06 |
|   57 |       6 | Accept |     0.33214 |      3.1996 |    0.046444 |    0.049785 |           12 |       7.4538 |            s |           13 |     0.016248 |
|   58 |       6 | Accept |    0.054348 |      96.616 |    0.046444 |    0.050832 |           12 |       2.8605 |            s |          987 |   4.7951e-06 |
|   59 |       6 | Accept |     0.71471 |      3.0555 |    0.046444 |    0.050852 |           10 |       9.8909 |            s |           24 |      0.21362 |
|   60 |       6 | Accept |    0.074353 |      67.118 |    0.046444 |     0.05084 |            8 |       5.5275 |            s |          986 |   8.9716e-05 |

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 60 reached.
Total function evaluations: 60
Total elapsed time: 1921.1117 seconds.
Total objective function evaluation time: 9107.7006

Best observed feasible point:
    iterlim    lambda    solver     q     lambdareg
    _______    ______    ______    ___    _________

      30       4.0843      s       997    7.279e-06

Observed objective function value = 0.046444
Estimated objective function value = 0.053743
Function evaluation time = 152.932

Best estimated feasible point (according to models):
    iterlim    lambda    solver     q     lambdareg
    _______    ______    ______    ___    _________

      10       1.0798      s       922    1.133e-06

Estimated objective function value = 0.05084
Estimated function evaluation time = 90.9315

Полученный классификатор не имеет лучших (более низких) потерь, чем классификатор, использующий sparsefilt для 1000 элементов, обученных для 10 итераций.

Просмотрите коэффициенты фильтра для лучших гиперпараметров, которые bayesopt найден. Полученные изображения показывают формы извлеченных элементов. Эти фигуры распознаются как части рукописных цифр.

Xtbl = results.XAtMinObjective;
Q = Xtbl.q;
initW = W(1:size(Xtrain,2),1:Q);
if char(Xtbl.solver) == 'r'
    Mdl = rica(Xtrain,Q,'Lambda',Xtbl.lambda,'IterationLimit',Xtbl.iterlim, ...
        'InitialTransformWeights',initW,'Standardize',true);
else
    Mdl = sparsefilt(Xtrain,Q,'Lambda',Xtbl.lambda,'IterationLimit',Xtbl.iterlim, ...
        'InitialTransformWeights',initW);
end
Wts = Mdl.TransformWeights;
Wts = reshape(Wts,[28,28,Q]);
[dx,dy,~,~] = size(Wts);
for f = 1:Q
    Wvec = Wts(:,:,f);
    Wvec = Wvec(:);
    Wvec =(Wvec - min(Wvec))/(max(Wvec) - min(Wvec));
    Wts(:,:,f) = reshape(Wvec,dx,dy);
end
m   = ceil(sqrt(Q));
n   = m;
img = zeros(m*dx,n*dy);
f   = 1;
for i = 1:m
    for j = 1:n
        if (f <= Q)
            img((i-1)*dx+1:i*dx,(j-1)*dy+1:j*dy,:) = Wts(:,:,f);
            f = f+1;
        end
    end
end
imshow(img);
Warning: Solver LBFGS was not able to converge to a solution. 

Код для чтения данных MNIST

Код функции, считывающей данные в рабочую область:

function [X,L] = processMNISTdata(imageFileName,labelFileName)

[fileID,errmsg] = fopen(imageFileName,'r','b');
if fileID < 0
    error(errmsg);
end
%%
% First read the magic number. This number is 2051 for image data, and
% 2049 for label data
magicNum = fread(fileID,1,'int32',0,'b');
if magicNum == 2051
    fprintf('\nRead MNIST image data...\n')
end
%%
% Then read the number of images, number of rows, and number of columns
numImages = fread(fileID,1,'int32',0,'b');
fprintf('Number of images in the dataset: %6d ...\n',numImages);
numRows = fread(fileID,1,'int32',0,'b');
numCols = fread(fileID,1,'int32',0,'b');
fprintf('Each image is of %2d by %2d pixels...\n',numRows,numCols);
%%
% Read the image data
X = fread(fileID,inf,'unsigned char');
%%
% Reshape the data to array X
X = reshape(X,numCols,numRows,numImages);
X = permute(X,[2 1 3]);
%%
% Then flatten each image data into a 1 by (numRows*numCols) vector, and 
% store all the image data into a numImages by (numRows*numCols) array.
X = reshape(X,numRows*numCols,numImages)';
fprintf(['The image data is read to a matrix of dimensions: %6d by %4d...\n',...
    'End of reading image data.\n'],size(X,1),size(X,2));
%%
% Close the file
fclose(fileID);
%%
% Similarly, read the label data.
[fileID,errmsg] = fopen(labelFileName,'r','b');
if fileID < 0
    error(errmsg);
end
magicNum = fread(fileID,1,'int32',0,'b');
if magicNum == 2049
    fprintf('\nRead MNIST label data...\n')
end
numItems = fread(fileID,1,'int32',0,'b');
fprintf('Number of labels in the dataset: %6d ...\n',numItems);

L = fread(fileID,inf,'unsigned char');
fprintf(['The label data is read to a matrix of dimensions: %6d by %2d...\n',...
    'End of reading label data.\n'],size(L,1),size(L,2));
fclose(fileID);

Ссылки

[1] Янн ЛеКун (Courant Institute, NYU) и Коринна Кортес (Google Labs, Нью-Йорк) имеют авторские права на набор данных MNIST, который является производной работой от оригинальных наборов данных NIST. Набор данных MNIST доступен на условиях лицензии Creative Commons Attribution-Share Alike 3.0, https://creativecommons.org/licenses/by-sa/3.0/

См. также

| | |

Связанные примеры

Подробнее