exponenta event banner

потеря

Класс: Элемент Выбор NCARexression

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

Синтаксис

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, Ирвайн, Калифорния: Калифорнийский университет, Школа информации и компьютерных наук, 2013. https://archive.ics.uci.edu/ml.

Представлен в R2016b