loss

Класс: FeatureSelectionNCARegression

Оцените точность выученных весов функций на тестовых данных

Синтаксис

err = loss(mdl,X,Y)
err = loss(mdl,X,Y,Name,Value)

Описание

err = loss(mdl,X,Y) возвращает среднюю квадратичную невязку как меру точности в err, для модели mdl, значения предиктора в X, и значения отклика в Y.

err = loss(mdl,X,Y,Name,Value) возвращает меру точности, err, с дополнительной опцией, заданной Name,Value аргумент в виде пары.

Входные параметры

расширить все

Модель анализа компонента соседства для регрессии, заданная как FeatureSelectionNCARegression объект.

Значения переменных предиктора, заданные как n -by - p матрица, где n - количество наблюдений, а p - количество переменных предиктора.

Типы данных: single | double

Значения отклика, заданные как численный вектор действительных чисел длины n, где n - количество наблюдений.

Типы данных: single | double

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Тип функции потерь, заданный как разделенная разделенными запятой парами, состоящая из 'Loss Function' и одно из следующих.

Тип функции потерьОписание
'mse'Средняя квадратичная невязка
'mad'Среднее абсолютное отклонение

Пример: 'LossFunction','mse'

Выходные аргументы

расширить все

Меньшая - лучшая мера точности для выученных весов функций, возвращенная в виде скалярного значения. Меру точности можно задать с помощью LossFunction аргумент пары "имя-значение".

Примеры

расширить все

Загрузите выборочные данные.

Загрузите данные корпуса [1] из репозитория машинного обучения UCI [2]. Набор данных имеет 506 наблюдений. Первые 13 столбцов содержат значения предиктора, а последний - значения отклика. Цель состоит в том, чтобы предсказать медианное значение домов, занятых владельцами в пригородном Бостоне, как функцию 13 предикторов.

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

load('housing.data');
X = housing(:,1:13);
y = housing(:,end);

Разделите данные на обучающие и тестовые наборы, используя 4-й предиктор в качестве сгруппированной переменной для стратифицированного разбиения. Это гарантирует, что каждое разбиение включает одинаковое количество наблюдений от каждой группы.

rng(1) % For reproducibility
cvp = cvpartition(X(:,4),'Holdout',56);
Xtrain = X(cvp.training,:);
ytrain = y(cvp.training,:);
Xtest  = X(cvp.test,:);
ytest  = y(cvp.test,:);

cvpartition случайным образом присвоения 56 наблюдений в тестовый набор, а остальная часть данных - в набор обучающих данных.

Выполните выбор признаков с помощью настроек по умолчанию

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

nca = fsrnca(Xtrain,ytrain,'Standardize',1);

Постройте график весов функций.

figure()
plot(nca.FeatureWeights,'ro')

Ожидается, что веса нерелевантных функций приблизятся к нулю. fsrnca определяет две функции как нерелевантные.

Вычислите потери регрессии.

L = loss(nca,Xtest,ytest,'LossFunction','mad')
L = 2.5394

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

ypred = predict(nca,Xtest);
figure()
plot(ypred,ytest,'bo')
xlabel('Predicted response')
ylabel('Actual response')

Совершенная подгонка от фактических значений образует 45 степени прямой линии. На этом графике предсказанные и фактические значения отклика, по-видимому, рассеиваются вокруг этой линии. Настройка λ (параметр регуляризации) значение обычно помогает улучшить эффективность.

Настройте параметр регуляризации с помощью 10-кратной перекрестной валидации

Настройка λ означает нахождение λ значение, которое приведет к минимальным регрессионным потерям. Вот шаги настройки λ использование 10-кратной перекрестной валидации:

1. Сначала разбейте данные на 10 складок. Для каждой складки cvpartition Присвоения 1/10-ю часть данных как набор обучающих данных и 9/10-ю часть данных как тестовый набор.

n = length(ytrain);
cvp = cvpartition(Xtrain(:,4),'kfold',10);
numvalidsets = cvp.NumTestSets;

Назначьте λ значения для поиска. Создайте массив для хранения значений потерь.

lambdavals = linspace(0,2,30)*std(ytrain)/n;
lossvals = zeros(length(lambdavals),numvalidsets);

2. Обучите модель анализа компонентов по соседству (nca) для каждой λ значение с использованием набора обучающих данных в каждой складке.

3. Подбор модели регрессии Гауссова процесса (gpr) с помощью выбранных функций. Затем вычислите регрессионные потери для соответствующего тестового набора в складке с помощью модели gpr. Запишите значение потерь.

4. Повторите это для каждого λ значение и каждый сгиб.

 for i = 1:length(lambdavals)
    for k = 1:numvalidsets
        X = Xtrain(cvp.training(k),:);
        y = ytrain(cvp.training(k),:);
        Xvalid  = Xtrain(cvp.test(k),:);
        yvalid  = ytrain(cvp.test(k),:);

        nca = fsrnca(X,y,'FitMethod','exact',...
             'Lambda',lambdavals(i),...
             'Standardize',1,'LossFunction','mad');

        % Select features using the feature weights and a relative
        % threshold.
        tol    = 1e-3;
        selidx = nca.FeatureWeights > tol*max(1,max(nca.FeatureWeights));

        % Fit a non-ARD GPR model using selected features.
        gpr = fitrgp(X(:,selidx),y,'Standardize',1,...
              'KernelFunction','squaredexponential','Verbose',0);


        lossvals(i,k) = loss(gpr,Xvalid(:,selidx),yvalid);

    end
 end

Вычислите средние потери, полученные из складок для каждого λ значение. Постройте график средних потерь по сравнению с λ значения.

meanloss = mean(lossvals,2);
figure;
plot(lambdavals,meanloss,'ro-');
xlabel('Lambda');
ylabel('Loss (MSE)');
grid on;

Найти λ значение, которое создает минимальное значение потерь.

[~,idx] = min(meanloss);
bestlambda = lambdavals(idx)
bestlambda = 0.0251

Выполните выбор признаков для регрессии, используя лучшее λ значение. Стандартизируйте значения предиктора.

nca2 = fsrnca(Xtrain,ytrain,'Standardize',1,'Lambda',bestlambda,...
    'LossFunction','mad');

Постройте график весов функций.

figure()
plot(nca.FeatureWeights,'ro')

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

L2 = loss(nca2,Xtest,ytest,'LossFunction','mad')
L2 = 2.0560

Настройка параметра регуляризации помогает идентифицировать соответствующие функции и уменьшает потерю.

Постройте график предсказанного от фактических значений отклика в тестовом наборе.

ypred = predict(nca2,Xtest);
figure;
plot(ypred,ytest,'bo');

Предсказанные значения отклика, по-видимому, также ближе к фактическим значениям.

Ссылки

[1] Харрисон, Д. и Д. Л., Рубинфельд. «Гедонические цены и спрос на чистый воздух». Дж. Энвирон. Экономика и менеджмент. Vol.5, 1978, с. 81-102.

[2] Лихман, M. UCI Machine Learning Repository, Irvine, CA: University of California, School of Information and Computer Science, 2013. https://archive.ics.uci.edu/ml.

Введенный в R2016b
Для просмотра документации необходимо авторизоваться на сайте