Добавил:
Да поможет вам Котельников Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

M852_Antonova_1

.pdf
Скачиваний:
8
Добавлен:
23.06.2024
Размер:
8.51 Mб
Скачать

ближайшие центры

•[D I] = min(D,[],2);

суммарная ошибка приближения центрами

•newerror = sum(sqrt(sum((X - centers(I,:)).^2,2)))

визуализация

•clf; scatter(X(:,1), X(:,2), 30, ‘filled’ ,‘k’); hold on; scatter(centers(:,1), centers(:,2), 50);

•fordraw = reshape([X centers(I,:) nan(size(X))]’, [2 m*3])’;

•plot (fordraw(:,1), fordraw(:,2))

пауза

•pause

пересчет центров

•formult = sparse(1:m,I,1,m,k);

•centers = diag(1./sum(formult))*(formult’*X);

•end

Начальные положения центров и результат пересчета приведены на рис. 5.1, две разные кластеризации (при различных начальных положениях центров) — на рис. 5.2.

Сгенерируем рандомное числовое множество в диапазоне (–1,5; 3,5). Для наглядности изобразим его на плоскости (рис. 5.3).

Рис. 5.1. Начальные положения центров (а) и результат пересчета (б)

Рис. 5.2. Две разные кластеризации (при различных начальных положениях центров):

а— кластеризация больше в правой нижней точке; б — кластеризация больше

вправой верхней точке

41

Рис. 5.3. Рандомное числовое множество

Кластеризация с помощью метода k-средних

Этап 1. Обработаем числовое множество для получения пяти кластеров с примерно одинаковыми значениями — центрами кластеров. Таким образом, все множество из 100 точек может быть представлено с помощью всего лишь пяти центров (рис. 5.4), характеризующих значения подмножеств (см. прил. 3).

Рис. 5.4. Представление множества точек в среде MATLAB

42

Этап 2. Разделим большое множество на регионы, исходя из средних значений элементов — центров кластеров, таким образом лучше всего визуализировать кластеры данных (рис. 5.5).

Рис. 5.5. Разделение точек до ближайшего центра в среде MATLAB

Вывод

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

Задание

Сгенерировать числовое множество в выбранном диапазоне. Обработать множество для получения N вариантов кластеров с примерно одинаковыми значениями — центрами кластеров. Разделить большое множество на регионы, исходя из средних значений элементов — центров. Сделать выводы по полученным результатам.

Контрольные вопросы

1.Что такое кластеризация?

2.Что является «центральной» задачей кластеризации?

3.Что такое нечеткая кластеризация?

4.Что такое метод k-средних?

5.В чем заключаются недостатки метода k-средних?

43

ЛИТЕРАТУРА

Левитин А.В. Ограничения мощи алгоритмов: деревья принятия решения // Алгоритмы: введение в разработку и анализ = Introduction to The Design and Analysis of Algorithms. М.: Вильямс, 2006. С. 409–417.

Шеннон К. Работы по теории информации и кибернетике. М.: Иностранная литература, 1963.

Интернет-ресурсы

http://logic.pdmi.ras.ru/~sergey/teaching/ml/notes-01-dectrees.pdf http://www.statsoft.ru/home/textbook/modules/stneunet.html http://studopedia.su/18_22535_obobshchennaya-model-neyrona.html

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение 1

 

 

 

Пример кода для лабораторной работы № 3

function

 

model = CNR_train

(classpath, debugga)

 

chars

 

=

‘0123456789ABCEHKMOPTXY’;

 

X

=

zeros

([2200

10]);

 

 

 

 

Y

=

zeros

([2200

1]);

 

 

 

 

timel

 

=

tic;

 

 

 

 

 

 

 

if

 

debugga

 

 

 

 

 

 

 

 

else

count

= 3;

 

 

 

 

 

 

 

 

count

=100;

 

 

 

 

 

 

 

end

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

for

 

 

 

char=1:22;

 

 

 

 

 

time1=tic;

 

 

 

 

 

 

 

 

fprintf(‘time

on char

%s

: : ’,

chars(char));

for sample=1:count

 

 

 

 

 

 

 

K=

(char-1)*100

+

sample;

 

Sym = imread( [‘C:/Program Files/MATLAB/MATLAB Production

Server/R2015a/bin/5/’ classpath

‘/’

chars(char)]);

Sammod

=

sym;

 

 

 

 

 

 

Sammod

=

imadjust

(sammod);

 

 

us =

fapecial(‘unsharp’);

 

 

 

sammod

=imfilter(sammod,us);

 

 

sammod

=

imadjust(sammod);

 

 

sammod

=

sammod <

150;

 

 

 

simresy

 

=

imresize

(sammod,

[64

NaN]);

simresx

 

=

imresize

(sammod,

[NaN 64]);

[ , n]

=

size(sinresy);

 

 

 

IntensityX

=

sum(simresy,

2)/n;

 

[ , m]

=

size(sinresx);

 

 

 

IntensityY

=

sum(simresx,

2)/m;

 

syms

=

 

regionprops

(sammod), ‘EulerNumber’,

‘Eccentricity’, ‘Centroid’, ‘Orientation’, ‘BoundingBox’ );

X(K,1)

=

syms(1).EulerNumber;

X(K,2)

=

syms(1).Eccentricity;

X(K,3)

=

syms(1).Centroid(1)/syms(1).BoundingBox(3);

X(K,4)

=

syms(1).Centroid(2)/syms(1).BoundingBox(4);

X(K,5)

=

syms(1).Orientation;

X(K,6) = syms(1).BoundingBox(3)/syms(1).BoundingBox(4);

X(K,7:70)

=

IntensityX(:);

X(K,7:71)

=

IntensityY(1, :);

Y(K) =

char;

 

end

45

fprintf(‘%.2f

(sec)\n’, toc(time2));

 

end

= classRF_train(X,Y,1000,15);

model

save

model;

 

fprintf(‘total

time %.2f\n’, toc(time1));

end

load model;

I

=

imread

(filename);

 

 

 

chars

=

‘0123456789ABCEHKMOPTXY’;

 

outstr

=

 

 

 

’;

 

 

 

Ires

=

imresize(I,

[200

NaN]);

 

[m,n]

=

size(Ires);

 

 

 

 

Ires

=

imcrop(Ires,

[10

0 n-10 m]);

 

OutI

=

zeros([size(Ires)

3],

‘uint8’);

 

OutI

(:,

:,

1)

=

Ires;

 

 

 

OutI

(:,

:,

2)

=

Ires;

 

 

 

OutI

(:,

:,

3)

=

Ires;

 

 

 

[a

b]

=

size(Ires);

 

 

 

 

Shift

=

a*b;

 

 

 

 

 

 

Imod = imfilter (imadjust(Ires) ,fspecial (‘unsharp’));

LMap

=

medfilt2(Ires, [90

90], ‘symmetric’)

Imod

=

(imadjust(0.7*Imod –

0.7*LMap)

< 10);

NewI

=

zeros(size(Imod),

‘uint8’);

 

areas

=

regionprops(Imod,

‘Image’,

‘Perimeter’,

‘EulerNumber’,

‘BoundingBox’,

‘Area’, ‘Orientation’,

‘Eccentricity’,

‘PixeldxList’);

 

 

 

for

i=1:size(areas)

 

 

 

 

 

 

 

If ~ (

test(areas(i)))

 

NewI(areas(i).PixeldxList(:)) = 255;

else

for j=1:size(areas(i).PixeldxList(:))

OutI(areas(i).PixeldxList(j)) = OutI

(areas(i).PixeldxList(j)) *

2;

 

 

 

 

 

end

end

 

 

 

 

 

 

 

 

 

 

 

 

 

end

 

 

 

 

 

 

 

 

funcrion

good

= test

(area)

 

 

 

good =

(area.Area > 3500

||…

 

 

 

 

area.Area

> 400

||…

 

 

BondingBox(4)

area.Area > 0.8*area.BondingBox(3) *area.

||…

 

 

> 2 ||…

 

 

 

 

 

area.EulerNumber

 

 

 

 

 

(abs(area.Orientation) <

25 &&

area.

Eccentricity >

0.8)

||…

 

area.BondingBox(3) >

11 …);

 

 

 

area.BondingBox(3)/

end

46

subplot(3,10,p);

p = p

+1;

symimg

= areas(i) .Image;

symresy = imresize(areas(i).Image, [64 NaN]) ;

symresx = imresize(areas(i).Image, [NaN 64]) ;

imshow(symresy);

[~,

n] = size(symresy);

 

 

IntensizyX

= sum(symresy,

2)

/n;

[m,

~] = size(symresx);

 

 

IntensizyY

= sum(symresx,

1)

/m;

syms = regionprops(symimg, ‘EulerNumber’, ‘Eccentricity’, ‘Centroid’, ‘Orientation’, ‘BoundingBox’);

X(1)

=

syms(1).EulerNumber;

X(2)

=

syms(1).Eccentricity;

X(3)

=

syms(1).Centroid(1)/syms(1).BoundingBox(3);

X(4)

=

syms(1).Centroid(2)/syms(1).BoundingBox(4);

X(5)

=

syms(1).Orientation;

X(6)

=

syms(1).BoundingBox(3)/syms(1).BoundingBox(4);

X(K,7:70) =

IntensityX(:);

X(K,71:134)

= IntensityY(:);

Y =

classRF_predict(X,model);

If vd

for j=1:size(areas(i).PixelIdxList(:))

OutI(areas(i).PixelIdxList(j)+ shift) = OutI(areas(i).PixelIdxList(j)+shift) + 70;

end

end

outstr(i) = chars(Y);

end

while (isletter(outstr(1)) && isletter(outstr(2))) ||

(~isletter(outstr(1)) && isletter(outstr(2)))

=

o u t s t r ( 1 : s i z e ( o t s t r , 2 ) - 1 )

outstr(2:size(outstr,2));

end

fprintf(‘%s (origin. %s)\n’ ,outstr(1: (min (6, size

(outstr,2 ) ) ) ) ,outstr);

If vd

Subplot(3,1,3);

Imshow(OutI);

end

number = sprint(‘%s’ ,outstr(1: (min (6, size

(outstr,2 ) ) ) ) );

end

Приложение 2

 

 

 

 

Пример кода для лабораторной работы № 4

 

f

=

figure;

f.Position(3) = 1.5*f.Position(3);

h

=

histogram(SMSSpamCollection.type);

xlabel(‘Класс’);

ylabel(‘Частота появления’);

title(‘Распределение по классам’);

 

cvp = cvpartition(SMSSpamCollection.type,’Holdout’,0.3);

dataTrain =

SMSSpamCollection(training(cvp),:);

dataHeldOut

=

SMSSpamCollection(test(cvp),:);

cvp = cvpartition(dataHeldOut.type,’Holdout’,0.5);

dataValidation

= dataHeldOut(training(cvp),:);

dataTest =

dataHeldOut(test(cvp),:);

 

textDataTrain

= dataTrain.content;

textDataValidation = dataValidation.content;

textDataTest =

dataTest.content;

YTrain = dataTrain.type;

YValidation

=

dataValidation.type;

YTest = dataTest.type;

figure

wordcloud(textDataTrain);

title(‘Training Data’);

 

textDataTrain

=

lower(textDataTrain);

documentsTrain

=

tokenizedDocument(textDataTrain);

documentsTrain

=

erasePunctuation(documentsTrain);

textDataValidation = lower(textDataValidation);

documentsValidation = tokenizedDocument(textDataValidation)

documentsValidation = erasePunctuation(documentsValidation)

documentsTrain(1:5)

enc = wordEncoding(documentsTrain);

documentLengths = doclength(documentsTrain);

figure;

histogram(documentLengths);

title(‘Длина предложений’);

xlabel(‘Длина’);

ylabel(‘Число описаний’);

XTrain = doc2sequence(enc,documentsTrain,’Length’, 200);

XValidation = doc2sequence(enc,documentsValidation,’L ength’, 200);

XTrain(1:5)

48

 

inputSize =

1;

 

embeddingDimension = 100;

numWords

= enc.NumWords;

numHiddenUnits =

360;

numClasses =

numel(categories(YTrain));

layers =

[ ...

 

 

 

sequenceInputLayer(inputSize)

 

 

wordEmbeddingLayer(embeddingDimension,numWords)

 

 

lstmLayer(numHiddenUnits,’OutputMode’,’last’)

 

 

fullyConnectedLayer(numClasses)

 

 

softmaxLayer

 

 

 

classificationLayer]

 

options

= trainingOptions(‘adam’, ...

 

 

‘MaxEpochs’,10, ...

 

 

‘GradientThreshold’,1, ...

 

 

‘InitialLearnRate’,0.01, ...

 

 

‘ValidationData’,{XValidation,YValidation}, ...

 

 

‘Plots’,’training-progress’, ...

 

 

‘Verbose’,false);

 

net = trainNetwork(XTrain,YTrain,layers,options);

 

textDataTest

=

lower(textDataTest);

documentsTest

=

tokenizedDocument(textDataTest);

documentsTest

=

erasePunctuation(documentsTest);

XTest =

doc2sequence(enc,documentsTest,’Length’,200);

XTest(1:5)

 

 

YPred =

classify(net,XTest);

accuracy

= sum(YPred == YTest)/numel(YPred)

Приложение 3

Пример кода для лабораторной работы № 5

rng default;

X = [randn(50,2)*0.5+ones(50,2); randn(50,2)*0.85+ones(50,2); randn(50,2)*0.75+ones(50,2)];

figure;

plot(X(:,1),X(:,2),’.’);

title ‘Рандомное числовое множество’;

[idx,C] = kmeans(X,5);

figure

gscatter(X(:,1),X(:,2),idx,’gbmrc’)

hold on

scatter(C(:,1),C(:,2),90, ‘filled’

,’k’);

 

m

=

size(X,1);

 

 

D

=

sqrt(sum(abs(repmat(permute(X,

[1 3

2]), ...

[1 size(C,1) 1]) - ...

).^2,

3));

repmat(permute(C, [3 1 2]), [m 1 1])

[D

I] = min(D,[],2);

 

 

fordraw = reshape([X C(I,:) nan(size(X))]’, [2 m*3])’;

plot

(fordraw(:,1), fordraw(:,2))

 

 

x1

=

min(X(:,1)):0.01:max(X(:,1));

 

 

x2

=

min(X(:,2)):0.01:max(X(:,2));

 

 

[x1G,x2G]

=

meshgrid(x1,x2);

XGrid = [x1G(:),x2G(:)];

idx2Region

=

kmeans(XGrid,5,’MaxIter’,1,’Start’,C);

figure;

gscatter(XGrid(:,1),XGrid(:,2),idx2Region, ...

[0,0.75,0.75;0.75,0,0.75;0.75,0.75,0],’..’);

hold on;

kkk =

gscatter(X(:,1),X(:,2),idx);

kkk(3).Color

=

‘w’;

kkk(2).Color

=

‘b’;

kkk(1).Color

=

‘r’;

kkk(4).Color

=

‘c’;

kkk(5).Color

=

‘y’;

title

‘Разделение точек до ближайшего центра’;

legend(‘Region 1’,’Region 2’,’Region 3’,’Region 4’,’Region 5’,’Location’,’NorthEast’);

hold off;

eucD = pdist(X,’euclidean’);

clustTreeEuc = linkage(eucD,’average’);

50

Соседние файлы в предмете Системы искусственного интеллекта