построить основные компоненты данных радужной оболочки

у нас есть следующая команда для анализа данных Iris

load fisheriris
gscatter(meas(:,1), meas(:,2),  species,'rgb'); hold on
gscatter(meas(:,3), meas(:,4),  species,'rgb');hold on
xlabel('Sepal length');
ylabel('Sepal width');


[pc,score,latent,tsquare] = princomp(meas);
pc,latent
cumsum(latent)./sum(latent)

и получаем результат

pc =

    0.3614    0.6566   -0.5820    0.3155
   -0.0845    0.7302    0.5979   -0.3197
    0.8567   -0.1734    0.0762   -0.4798
    0.3583   -0.0755    0.5458    0.7537


latent =

    4.2282
    0.2427
    0.0782
    0.0238


ans =

    0.9246
    0.9777
    0.9948
    1.0000

и у нас тоже фигура

введите здесь описание изображения

наша задача

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

мы можем вызвать первые два компонента с помощью

x=pc(:,1);
y=pc(:,2);

а как насчет заговора?пожалуйста, помогите мне


person dato datuashvili    schedule 13.01.2014    source источник


Ответы (1)


Спроецированные данные на основные компоненты возвращаются в переменной score, поэтому график выглядит просто:

gscatter(score(:,1), score(:,2), species, [], [], [], 'on', 'PC1', 'PC2')
title('Projected Iris data'), grid on

конечно, вы можете выполнить PCA самостоятельно, используя либо EIG, либо SVD:

X = meas;
X = bsxfun(@minus, X, mean(X));    % zero-centered data
[~,S,V] = svd(X,0);                % singular value decomposition

[S,ord] = sort(diag(S), 'descend');
pc = V(:,ord);                    % principle components
latent = S.^2 ./ (size(X,1)-1)    % variance explained
score = X*pc;                     % projected data

projected_data

person Amro    schedule 13.01.2014
comment
так что это удовлетворяет этому условию не так ли? Пожалуйста, отобразите, нанеся на план проекции данных первых двух основных компонентов по отношению к трем цветам трех классов. - person dato datuashvili; 13.01.2014
comment
@датодатуашвили: да - person Amro; 13.01.2014