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 имя аргумента и 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] Харрисон, D. и D.L., Рубинфельд. "Гедонистические цены и спрос на чистый воздух". J. Окружить. Экономика & управление. Vol.5, 1978, стр 81-102.

[2] Личмен, M. Репозиторий Машинного обучения UCI, Ирвин, CA: Калифорнийский университет, Школа Информатики и вычислительной техники, 2013. https://archive.ics.uci.edu/ml.

Смотрите также

| | |

Введенный в R2017b