Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
26
KLASYFIKATORYKNN
Przymałejwartościkalgorytmjestwrażliwynaszumy.Jegoodpornośćwzra-
staprzyzwiększonejwartościk,aleokupionejesttowiększązłożonościąoblicze-
niowąiwydłużonymczasempodejmowaniadecyzji.Wceluzapewnieniadobre-
godziałaniaalgorytmuważnajestnormalizacjadanych,zapewniającapodobny
zakreszmiennościwszystkichwspółrzędnychwektorax.Najczęściejuzyskuje
siętoprzezstandaryzacjęstatystyczną,wktórejwartościzmierzonezmiennejx
transformujesięzgodniezewzorem(x
śrjestwartościąśrednią,astd(x)odchyle-
niemstandardowymzbiorupomiarowegozmiennejx)
x
->
x
stdx
-
()
x
ś
r
(3.2)
Innymrozwiązaniemjestnormalizacjatypumin-max,wktórejzmienneoryginal-
nepodlegająprzetworzeniuwedługwzoru
x
-
min()
x
x
->
max()
x
-
min()
x
(3.3)
WMatlabiefunkcjaklasykatoraKNNjestzaimplementowanapodnazwą
tcknn.
PrzykładzastosowaniaklasyfikatoraKNNdoklasyfikacjidanychlosowych
należącychdo3klasprzedstawionyjestwpostaciliniiprogramuwMatlabieiPy-
thoniejakponiżej[2,49]
MATLAB
%Generacjadanych
xucz=randn(120,2);
ducz=[1*ones(40,1);
2*ones(40,1);
3*ones(40,1)];
plot(xucz(1:40,1),xucz(1:40,2),...
’ro’,xucz(41:80,1),
...
xucz(41:80,2),’gx’,
...
xucz(81:120,1),xucz(81:120,2),’bd’)
grid
legend(’klasa1’,’klasa2’,...
’klasa3’)
title([’Rozkładdanychuczących’...
’zpodziałemnaklasy’])
xlabel(’x_1’),ylabel(’x_2’)
%Generacjadanychtestowych
xtest=randn(80,2);
dtest=[1*ones(30,1);
2*ones(30,1);
3*ones(20,1)];
Python
#Generacjadanych
xucz=np.random.randn(120,2)
ducz=np.arange(0,120,dtype=fl
oat)
//40+1
colors=[[’o’,’red’],
[’x’,’green’],
[’d’,’blue’]]
forkin[1,2,3]:
plt.scatter(xucz[ducz==k,0],
xucz[ducz==k,1],
marker=colors[k-1][0],
color=colors[k-1][1],
label=f”klasa{k}”)
plt.legend();plt.grid()
#Generacjadanychtestowych
xtest=np.random.randn(80,2)
dtest=np.arange(0,60)//30+1
dtest=np.concatenate(
[dtest,
np.ones((20),dtype=float)*3])