Kvadratinis Gauso klasifikatorius

2011-12-06

Klasifikavimo uždaviniui spręsti yra daugybė klasifikatorių, o mes palengva šį bei tą išmėginsim, pažiūrėsim kaip jie veikia ir kaip atrodo iš arčiau.

Šiandien mūsų taikinyje yra kvadratinis Gauso klasifikatorius. Teoriją apie klasifikatorių įkėliau atskirai, bet ji angliškai ir gana skurdi. Šis klasifikatorius leidžia rasti ribą tarp dvejų klasių, tačiau norint gero tikslumo, reikia pasiekti, kad požymiai turėtų normalinį pasiskirstymą. Naudojami duomenys yra čia, tik du požymiai ir dvi klasės. Programos kodas:

Selec All Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
clc;
close all;
 
% Užkraunami duomenys
load Apple.txt
data = Apple;
clear Apple;
 
% Braižomas grafikas
y = data(:,3) == 0;
d1 = data(y,1:2)';
d2 = data(~y,1:2)';
figure(1); clf; hold on
plot(d1(1,:), d1(2,:), 'r+');
plot(d2(1,:), d2(2,:), 'g+');
axis('equal');
 
% Parametrai
fromCol = 1; % nuo kurio stulpelio prasideda požymiai, imtinai
features = 2; % požymių kiekis
till = fromCol + features - 1; % paskutinis požymių stulpelis
classCol = 3; % stulpelis, kuriame yra klasės numeris
 
% Tikslumo skaičiavimas su "10-fold cross validation"
tic;
accuracy = mycrossvalidation('Gaussian', data, classCol, fromCol, features);
fprintf('Tikslumas = %3.2f, laikas = %3.2f s \n', accuracy, toc);
 
% Piešiamas klasifikatoriaus diskriminantinės funkcijos kontūras
cols = fromCol + features - 1; % stulpelių kiekis duomenyse
k = data(:, classCol) == 0;
c1 = data(k, fromCol : cols)'; % apmokymo duomenų pirma klasė
c2 = data(~k, fromCol : cols)'; % apmokymo duomenų antra klasė
d = -2 : .05 : 2;
[X, Y] = meshgrid(d, d);
xx = 1;
yy = 1;
Z = zeros(size(X));
for x = d
    for y = d
        Z(yy, xx) = quadratic_gaussian_classifier([x y]', c1, c2);
        yy = yy + 1;
    end;
    xx = xx + 1;
    yy = 1;
end;
contour(X, Y, Z, [0,0], 'k');

Naudojama „10-fold cross validation“ validacija, kuri leidžia patikrinti klasifikatoriaus efektyvumą su skirtingomis duomenų imtimis:

Selec All Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function [accuracy] = mycrossvalidation(type, data, classCol, fromCol, features)
el = size(data, 1); % kiek duomenų yra iš viso
p = 90; % kiek duomenų skirti apmokymui procentais
q = int16(size(data, 1) * p / 100); % kiek duomenų skirti apmokymui
 
total = 0; % bus skaičiuojami teisingi atpažinimai
step = el - q;
for w = 1 : step : el % 10-fold cross validation
    % paskaičiuojami nuo (from) iki (till) intervalas testavimui
    from = w;
    till = w + el - q - 1;
    if till > el
        till = el;
    end;
    % atrenkama apmokymo ir testavimo dalis
    testing = data(from : till, :);
    training = data;
    training(from : till, :) = [];
    % tikrinamas konkretus klasifikatorius, šiuo atveju turime tik vieną
    if strcmp(type, 'Gaussian') == 1
        [count, accuracy] = mygaussian(training, testing, classCol, fromCol, features);
    end;
    total = total + count; % sumuojamas teisingai atpažintas duomenų kiekis
end;  
 
accuracy = total * 100 / el;

Skaičiuojamos tikimybės, kuriai klasei priklauso konkretūs atvejai iš testavimo duomenų imties:

Selec All Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function [count, accuracy] = mygaussian(training, testing, classCol, fromCol, features)
cols = fromCol + features - 1; % stulpelių kiekis duomenyse
 
k = training(:, classCol) == 0;
c1 = training(k, fromCol : cols)'; % apmokymo duomenų pirma klasė
c2 = training(~k, fromCol : cols)'; % apmokymo duomenų antra klasė
 
count = 0;
el = size(testing, 1);
for z = 1 : el % tikrinam su visais testavimo duomenimis
    x = testing(z, fromCol : cols)';
    class = quadratic_gaussian_classifier(x, c1, c2);
    if class == testing(z, classCol) % ar apskaičiuota klasė atitinka tikrą
        count = count + 1;
    end;
end;
 
accuracy = count * 100 / el;

Ir galiausiai kvadratinio Gauso klasifikatoriaus realizacija pagal 2.20 formulę:

Selec All Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function [class] = quadratic_gaussian_classifier(x, c1, c2)
covM1 = cov(c1');
covM2 = cov(c2');
invM1 = inv(covM1);
invM2 = inv(covM2);
piko1 = mean(c1, 2);
piko2 = mean(c2, 2);
pc1 = size(c1, 2);
pc2 = size(c2, 2);
A = 0.5 * (invM1 - invM2); % 2.21 formulė
beta = invM2 * piko2 - invM1 * piko1; % 2.22 formulė
gama = (piko1' * invM1 * piko1 - piko2' * invM2 * piko2) * 0.5 ...
    + log(det(covM1) / det(covM2)) - log(pc1 / pc2); % 2.23 formulė
res = x' * A * x + beta' * x + gama; % 2.20 formulė
if res < 0
    class = 0;
elseif res > 0
    class = 1;
else
    class = -1; % neapsisprendęs
end;

Skaičiavimų rezultatas:

Selec All Code:
1
Tikslumas = 97.68, laikas = 1.14 s

Diskriminantinės funkcijos kontūras parodytas paveikslėlyje, taškų braižymui paimta nedaug, todėl kreivė laužyta, tačiau tai yra parabolė:

97,68 % tikslumas yra gana aukštas. Šį klasifikatorių bandžiau su duomenimis, kurie turi 30 požymių ir gavau 95,96 % tikslumą, o atmetus mažiau reikšmingus požymius ir palikus jų tik 8 bei kai kuriuos iš jų normalizavus, pavyko pasiekti 97,01 % tikslumą. Vadinasi klasifikatorius yra gana tikslus, greitas ir patogus. Tačiau jis tinka tik gana paprastiems uždaviniams.

Tyrinėjimai , ,

Kaip mokytis kalbų? IV dalis. Utopinis tikslas

2011-11-13

Nuotraukoj yra mano pagrindinis, esminis ir svarbiausias įrankis mokytis anglų kalbos. Rimtai. Šio daikto efektyvumas stulbinantis. Pačias ausines gavau kaip priedą prie telefono, tačiau jos buvo baisiai nepatogios, krisdavo iš ausų, o laidai skirtingų ilgių, todėl patobulinau. Turėtų matytis kaip viela susukti laidai, kad labai nesimakaluotų, o ausinių galai neilgi, kad po smakru abu laidai susieitų. Neveržia, nekrenta, patogu.

O įrašas apie visai ką kitką. Tai bus mano poziciją dėl A.J. Hoge pasisakymo:

A.J. Hoge stilius man nepatinka, tačiau žaviuosi tuo ką jis daro. Jis inovatoriškas, ieško naujų kelių ir juos randa. Matyt jis vienas iš pirmųjų, kuris bado pirštu, kad švietimo sistema kalbų mokyme (tiesa sakant ir ne tik), nuėjo pernelyg neefektyviu keliu. Žinau daugybę puikių žmonių, labai gabių, kurie mokyklos ar universiteto iškankinti, nepasitiki savim, galvoja, kad yra kalboms negabūs, kad kažkas negerai su jais. Tačiau tiesa gerokai paprastesnė, jie paprasčiausiai suklaidinti ir palikti ant ledo… Jie ir toliau griebiasi to vienintelio kelio, to tikslo, kuris vadinasi „išmokti“. Hoge teisus, tobulai kalbėti neįmanoma. Pridėčiau, kad ir išmokti užsienio kalbos neįmanoma. Jei po teisybei, jūs nemokat ir lietuvių kalbos. Niekas nemoka lietuvių kalbos. Ir niekada nemokės. Pabandykit atsiversti žodyną. Kaip greitai rasite dar nežinomų žodžių? Pabandykit parašyt rašinį ir nunešti kalbininkui, ne tik rašinys raudonuos nuo pabraukimų ties klaidomis, bet ir jūsų veidas. Pabandykit nuvažiuoti į atokesnes Lietuvos vietas, pakalbinti vietinius, įdomu kaip seksis susikalbėti. Pabandykit paskaityti įstatymus, jei pavyzdžiui esat meno žmogus, arba paskaityti apie madas jei esat juristas. Greitai papulsit ne tik į nesuvokiamų sąvokų pinkles, bet ir apskritai į kitą pasaulį. Pabandykit paskaityt laikraščius, kurie yra kelių dešimčių metų senumo, pamatysit, kad lietuvių kalba buvo kitokia.

Tai gal vis gi lietuvių kalbos jūs nemokat? Man atrodo, kad nemokat. Esu tikras, kad visų lietuvių kalbos žodžių nežinot, visų kalbos taisyklių nežinot, atsirastų daugybę lietuvių, kurių nesuprastumėt, ir galybę sričių, kurių įprastos, kasdieninės, kalbos nesuprastumėt. Todėl nėra prasmės net ir statytis sau tikslo „išmokti“. „Išmokti“ kalbą yra utopinis tikslas.

Pabandykim pažiūrėti iš kitos pusės. Bet juk lietuvių kalbą naudojat? Teisingai? Kas įdomu – perskaitot, pažiūrit įdomius filmus, galbūt serialus. Pasikalbat su žmonėmis, kai to reikia ar norit. Kitaip tariant lietuvių kalbos nemokat, bet ją naudojat. Todėl, kai kyla noras vėl griebtis utopinio tikslo – „išmokti“ anglų, prancūzų, vokiečių ar kinų, nesvarbu ką, galima bandyti tą tikslą pervadinti į „naudoti“. Ir tada savęs klausti, o kaip aš galėčiau tą kalbą naudoti?

  • gal yra serialų ta kalba, kuriuos norėčiau pamatyti?
  • gal yra knygų kurias norėčiau perskaityti originalo kalba?
  • gal turiu hobi, apie kurį yra puikios vaizdo-garso-teksto pavidalu užsienio kalba?
  • gal kažkas youtube‘ina apie mano dominančias sritis ar hobi?
  • gal man patinka žinoti kas vyksta kitose šalyse ir domintų pasiklausyti jų žiniasklaidos?
  • gal norėtum tobulėti kaip kulinaras, bet geriausios laidos užsienio kalba?
  • gal visada norėjai išmokti piešti ir gali susirasti pamokų ta kalba?
  • gal yra kokie nors mmorpg žaidimas, kuriame norit išbandyt komandinį darbą?
  • gal yra forumai apie tavo karjerą, hobi ar šiaip gyvenimą?
  • ir t.t.

Kai pradedi domėtis, atrodo neįtikėtina, kiek daug Žmogus jau yra sukūręs ir dar mažiau neįtikėtina, kad neįmanoma susirasti kas kiekvienam individualiai labiausiai tiktų ir patiktų.

Užtenka pakeisti tikslą iš „kaip išmokti?“ į „kaip naudoti?“ ir prasideda svarbiausias etapas kalbos tobulėjime, kuriame pats žmogus pradeda ieškoti to kas jam labiausiai tiktų. Jis nebesitiki, kad tai padarys kas nors už jį, nebesirašo į kursus, nebefantazuoja pagyventi svetimoje šalyje, nes neva taip geriausiai išmokstama. Pagaliau jis elgiasi savarankiškai. Pats atsirenka sritį, sudėtingumą, apimtį, pats įvertina, kad jam tikrai bus įdomu ir, kad jis asmeniškai būtinai gaus kažką daugiau nei užsienio kalbos įgūdžius. Galbūt geras emocijas, galbūt žinių, galbūt puikių pražystamų užsienyje ar įgūdžių visai kitose srityse, nes jis pats susiras pačią geriausią ir tinkamiausią medžiagą sau.

Šiuo metu naudoju tris kalbas: lietuvių, anglų, rusų. Aš jų nemoku ir nesimokau, bet naudoju, o kai naudoju, neišvengiamai tobulėju.

Tyrinėjimai , , , ,

k artimiausių kaimynų metodas KNN

2011-10-30

KNN (k nearest neighbors) metodas klasifikuoja tikrindamas kokioms klasėms priklauso artimiausi K kaimynai ir priskiria tai klasei, kuriai priklauso daugelis K kaimynų. Įėjimo vektorius gali turėti bet kokį požymių kiekį, pvz.: 1, 2, 10 ir daugiau. Euklido atstumą naudosime skaičiuojant atstumą tarp kaimynų, kurį lengva paskaičiuoti net ir daug dimensijų turinčiai erdvei. Išbandysime pasirašyti savo KNN funkciją bei palyginti rezultatą su Matlab knnclassify funkcija naudojant dvejų dimensijų duomenų aibę. Abejų klasių duomenys (0 – raudona, 1 – žalia) parodyti žemiau:

Eksperimentas labai paprastas. Užkrausime duomenis, kurie turi du požymius, o pačių duomenų yra kiek daugiau nei tūkstantis. Apmokymui imsime dešimt procentų duomenų atsitiktine tvarka, o tikslumą tikrinsime su likusiais.

Programa:

Selec All Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
clc;
close all;
 
load apple.txt
data = apple;
% duomenys išmaišomi atsitiktine tvarka, nes kas kartą norime
% naudoti vis kitą imti apmokymui, o likutį testavimui
data = data(randperm(size(data, 1)), :);
clear apple;
 
% atvaizduojam abi klases
figure(1); clf; hold on
l = data(:, 3) == 0;
d1 = data(l, 1 : 2)';
d2 = data(~l, 1 : 2)';
plot(d1(1, :), d1(2, :), 'r+');
plot(d2(1, :), d2(2, :), 'g+');
axis('equal');
 
p = 10; % kiek duomenų skirti apmokymui procentais
features = 2; % požymių kiekis
k = 3; % kiek kaimynų naudoti klasifikuojant
q = int16(size(data, 1) * p / 100); % kiek duomenų skirti apmokymui
training = data(1 : q, 1 : features); % apmokymo duomenys
plot(training(:, 1), training(:, 2), 'b.'); % pažymėti, kurie duomenys dalyvauja apmokyme
group = data(1 : q, features + 1); % apmokymo duomenų klasės
total = size(data, 1); % duomenų kiekis
correct1 = 0;
correct2 = 0;
for i = q + 1 : total % testuoti tik su tais duomenimis, kurie nenaudojami apmokymui
    g = data(i, features + 1);
    sample = data(i, 1 : features);
    c = knnclassify(sample, training, group, k);
    if c == g
        correct1 = correct1 + 1;
    else
        fprintf('Klaida: %d \n', i);
    end;
    c = myknnclassify(sample, training, group, k);
    if c == g
        correct2 = correct2 + 1;
    else
        fprintf('Klaida: %d \n', i);
    end;
    fprintf('Total iterations: %d, done: %d\n', total - q, i - q);
end;
fprintf('knnclassify rezultatas: %4.2f %%\n', 100 * correct1 / (total - q));
fprintf('myknnclassify rezultatas: %4.2f %%\n', 100 * correct2 / (total - q));

KNN funkcija:

Selec All Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function [class] = myknnclassify(sample, training, group, k)
A = zeros(1, 2); % matrica artimiausiems kaimynams saugoti
n = size(training, 1); % iš viso kaimynų kiekis
for i = 1 : n % kiekvienam kaimynui atliekami skaičiavimai
    d = euclidean_distance(training(i, :), sample); % randamas Euklido atstumas
    s = size(A, 1);
    if s < k % jeigu artimiausių kaimynų atrinkta mažiau nei K, tai papildom
        A(s + 1, 1 : 2) = [group(i) d];
    elseif A(k, 2) > d % jeigu artimiausių kaimynų atrinkta K, tolimiausią keičiam artimesniu
        A(k, 1 : 2) = [group(i) d];
    end;
    A = sortrows(A, 2); % išrūšiuojam pagal atstumą
end;
m = max(group) + 1; % klasių kiekis
B = zeros(1, m);
for i = 1 : k % randam po kiek artimiausių kaimynų priklauso kiekvienai klasei
    B(A(i, 1) + 1) = B(A(i, 1) + 1) + 1;
end;
[maxC, maxI] = max(B); % klasės indeksas, kurioje daugiausiai artimiausių kaimynų
[minC, minI] = min(B); % klasės indeksas, kurioje mažiausiai artimiausių kaimynų
if maxC > minC % laimėtoja klasė, kuri turi daugiausia artimiausių kaimynų
    class = maxI - 1;
else % jeigu visos klasės turi vienodą kaimynų kiekį (gali būti ir kitokie kriterijai)
    class = -1; % atmetimo (reject) klasė
end;

Euklido atstumas:

Selec All Code:
1
2
3
4
5
6
7
function [d] = euclidean_distance(x, y)
n = size(x, 2);
d = 0;
for i = 1 : n
    d = d + (x(i) - y(i)) ^ 2;
end;
d = d ^ 0.5;

Abejų funkcijų rezultatai yra gana panašūs. Kadangi duomenų klasės nepersidengia ir yra gana toli viena nuo kitos, tai pakanka vos kelių procentų apmokymo duomenų, kad visus likusius duomenis abi funkcijos klasifikuotų šimto procentų tikslumu. Žemiau esančiame paveiksliuke matosi mėlynai pažymėti taškai, kurie buvo naudojami apmokymui ir yra atrinkti atsitiktine tvarka (vos 10 procentų nuo visų duomenų). Kiekvieną kartą užkrovus duomenis, parenkama vis kita 10 procentų duomenų imtis apmokymui, taip mes galime matyti kaip funkcijų tikslumas priklauso nuo skirtingų duomenų aibių, tačiau išlaikant norimą jos dydį:

myknnclassify funkcija yra dešimt kartų lėtesnė nei Matlab standartinė funkcija knnclassify ir kiek testavau, mažiau tiksli. Be to, aprašytoje gali būti (ir tikriausiai yra) klaidų, nes ji nėra pilnai ištestuota kaip Matlab funkcija. Todėl Matlab funkcija yra gerokai pranašesnė, kuri be to dar turi ir įvairių papildomų parametrų.

Tyrinėjimai , , , ,

Kaip būti organizuotu? III dalis. Horizons of View

2011-10-24

Pirmi du HOV lygmenys jau aprašyti, tad liko visi kiti.

AoF-AoR (20 000 ft)

Pilnas pavadinimas yra „Areas of Focus – Areas of Responsibility“. Kai pradėjau GTD naudoti niekaip nesupratau kam šito lygmens reikia. Kiek domėjausi, jį dažnai naudoja kaip projektų generatorių t.y. pasižiūrėjus už kokias sritis esi atsakingas, gali sukurti naujus projektus, kurie tas sritis kažkaip pagerins ar palaikys. Kadangi man projektų trūkumo niekada nebuvo, tai šis lygmuo kokį pusmetį buvo nenaudojamas visai. Buvau surašęs į jį gyvenimo sritis ar atsakomybes, tačiau iš to jokios naudos nebuvo.

Pastebėjau, kad man GTD sistemoje kai ko trūksta. Tada sukūriau atskirą „worksheet“, kurį pavadinau „Balance“. Tai buvo paprasčiausias kalendorius, kurio eilutės buvo ne dienos, o savaitės t.y. kiekvienai savaitei po atskirą eilutę. O kiekvienai sričiai po atskirą stulpelį. Į celes rašydavau projektus, ties kuriais ketinu dirbti būtent tomis savaitėmis. Tai man leido pasiekti balansą tarp daug projektų dideliame laiko intervale, nuo kelių savaičių iki kelių mėnesių. Niekas negali pasakyti kiek konkrečiai kiekvienas projektas laiko užims ar kad tas projektas vėliau dar bus aktualus, tačiau sudėliojus ketinimus kelioms savaitėms į priekį yra kiek ramiau, nes tada pradedi jausti kokia yra bendra situacija, kur reikia paskubėti, gal kažko atsisakyti ar perstumdyti. Jeigu „Calendar-Tickler“ leidžia pasiekti balansą dienos bėgyje ar kelių, tai balanso lange pasiekdavau balansą ilgoje perspektyvoje. Šią vasarą vėl naršiau GTD forumą ir vienoje vietoje užtikau, kad AoF-AoR lygis ir yra skirtas subalansuoti įsipareigojimus taip, kad visos gyvenimo sritys ar atsakomybės būtų pakankamai prižiūrėtos. Tad man neliko iš „Balance“ pervadinti į „AoF-AoR“ ir viskas atsistojo į savo vietas.

Man šis lygmuo yra labai svarbus, nes leidžia išlaikyti priimtiną laisvės kiekį. Jeigu nebusi pakankamai budrus dėl savo turimo laiko, tai galima apsikrauti pernelyg daug arba pernelyg vėlai suvokti, kad kažko nepadarei. Taip gerokai mažiau streso ir „gaisrų“, kuriuos tenka gesinti verčiantis per galvą.

Goals (30 000 ft)

Čia patenka vienerių ar dvejų metų apimties tikslai. Jie jau per dideli, kad juos vis dar būtų galima laikyti projektais. Apskritai, ilgai nesibaigiančių projektų geriau vengti, galima juos arba kitaip formuluoti arba perkelti į tikslus.

Be abejonės, norint pasiekti tikslą, turėtų būti bent vienas aktyvus projektas, kuris prie to tikslo artina. Jeigu jokio projekto nevykdot, vadinasi tai nėra jūsų tikslas, jūs tik norit to siekti, bet nieko dėl to nedarot, todėl tas tikslas turėtų keliauti į „Someday-maybe“ sąrašą. Jei tikslas iš tikro aktualus, kada nors vis tiek sugalvosit koks projektas galėtų prie to tikslo priartinti ir rasit jam laiko.

Apskritai kalbant apie tikslus, iš vienos pusės reikia didelio atkaklumo ir drąsos, bet iš kitos pusės būtina suprasti, kad ne visi tikslai turi būti pasiekti ir ne visi bus pasiekti. Kartais, nepasiekti tikslo yra geriausia ką jūs galite padaryti. Būna, kad pradžioje tikslas atrodo labai svarbus, bet praėjus tam tikram laiko tarpui, jis tampa našta, galbūt pernelyg pasikeitėt, galbūt tikėjotės visai kažko kito, galbūt dar kažkas, bet iš inercijos bandot vis tiek to siekti. Todėl į tikslus siūlyčiau žiūrėti ne kaip į sunkų darbą siekiant ir aukso puodą jį atlikus, o kaip į kompasą ir daugiau mėgautis pačia kelione.

Šis GTD lygmuo pradžioje apskritai gali būti tuščias, jei neesat tikri ką norit nuveikti ilgalaikėje perspektyvoje. Todėl Allen‘as siūlo formuoti lygmenis nuo žemiausio lygmens. Pagal tai ką darot kasdien, pabandyti įžvelgti į kokius projektus savo veiksmus galima sugrupuoti. Pagal tai kokius projektus darot, pagalvoti, kokių gi tikslų bandot pasiekti. Todėl lygmenys natūraliai užsipildo su laiku, nuo apačios iki viršaus. Kai pirmame lygmenyje nebereikia lėkti uždusus, galima pagalvoti apie antrą ir t.t.

Kadangi pradedant mano įrašai nuo šio lygmens aukštyn stipriai keitėsi, tai statistika nėra labai tiksli. Dalis tikslų buvo perrašyta daug kartų, bandant juos padaryti tikslesniais, aiškesniais. Dalis buvo iš viso išbraukti. Iš viso dabar jų yra 14. Pasiekti 4 ir 1 nepavykęs. Todėl aktyvūs yra 9.

Tikslus peržiūrėti verta maždaug kartą per savaitę norint įsitikinti ar esi gerose vėžėse. Šis lygmuo jau yra gana stabilus, neturėtų kasdien keistis, todėl ir peržiūrų ar redagavimų nedaug.

Vision (40 000 ft)

Pastarasis lygmuo yra labai panašus į prieš tai buvusį. Vienintelis esminis skirtumas yra tas, kad čia rašomos vizijos, o ne tikslai. O vizijos neprivalo būti labai konkrečios, jos gali būti šiek tiek išskydusios, o be to laikotarpis jau yra bent trys ar penki metai. Čia tarsi turėtų būti aprašytas idealus gyvenimo scenarijus labai ilgai perspektyvai. Šį lygmenį užpildyti yra labai sunku, vargu ar pradedantys naudoti GTD sugeba tą padaryti. Pagrindinė priežastis yra ta, kad reikia labai giliai susivokti koks tau asmeniškai gyvenimas yra idealus, kur nori nukeliauti, ką nori nuveikti, o čia jau reikia labai gerai save suprasti ir pažinti. Ar visi tiksliai žino kas jiems yra gerai? O gal tik atrodo, kad žino? Ir vis gi, pildant šį lygmenį siūlyčiau labai rimtai pažiūrėti ką jūs veikiate žemesniuose lygmenyse, gal iš jų matosi kokia nors kad ir nelabai aiški kryptis, pašaukimas, traukia? Gal tai ir yra vizija. Kol žemesni lygmenys nėra nusistovėję, šio lygmens forsuoti nėra reikalo. Kita vertus, gali būti, kad ne visi gyvena savo gyvenimą, tai žemesni lygmenys tada tik klaidins.

Turiu 9 įrašus, vienas su statusu – „Done“. Šis lygmuo yra labai stabilus, todėl jį peržiūrėti galima kartą į mėnesį arba kai reikia įkvėpimo. Ypač galėtų padėti darant esminius gyvenimo sprendimus.

Purpose (50 000 ft)

Paskutinis lygmuo. Šio lygmens nejudinau visus metus. Galvojau: na aš tikrai nežinau koks tas mano pagrindinis („ultimate“) gyvenimo tikslas. Kokia mano misija? Kaip aš galiu nuspręsti dabar, jei po metų ar kitų galiu imti ir persigalvoti? Bandžiau rašyti įvairius variantus, trindavau, perrašydavau. Bet nieko doro taip ir nesugalvojau. Galiausiai šią vasarą, vienoje vietoje aptikau, kad šioje skiltyje turi būti ne „ultimate“ tikslas, o būtinos ir pakankamos sąlygos, kad kiekviena diena būtų prasminga. T.y. ko turi būti kiekvieną dieną, kad kiekviena diena būtų prasminga, kad dėl nieko nesigailėtum. Kaip paprasta. Visa sistema skatina kurti projektus, tikslus, vizijas, balansuoti, kasdien kažkur lekiama, tačiau visų svarbiausia neužsimiršti daryti tai kas tau asmeniškai daro gyvenimą prasmingu. Visi tikslai, projektai ar vizijos bet kurią akimirką gali tiesiog nutrūkti, todėl svarbu balansuoti, kad ne tik būtum atsakingas už savo ateitį, bet ir kad nepamištum tiesiog gyventi, čia ir dabar.

Šiame lange turiu vos keletą įrašų. Jie keitėsi, manau laikui einant keisis ir vėl, nes daugiau patiriant lengviau suvokti kas tau asmeniškai yra prasminga, o kas ne.

Someday-Maybe

Tai nėra HOV dalis, tačiau laikau šį sąrašą šalia. Jokių ypatingų taisyklių jo atžvilgiu neturiu. Svarbiausia, kad bet kokios idėjos būtų užfiksuotos ir patektų į sąrašą. Daug kas sako, kad jiems šis sąrašas tarsi juoda skylė, į kurį patekus ten ir lieka. Didžiąją dalimi dėl to, kad sąrašas pasidaro beprotiškai ilgas. Nors pats visą laiką turėdavau gerokai daugiau idėjų, nei laiko joms įgyvendinti, bet mano sąrašas gana kuklus, vos 75 įrašai. Dalis įrašų kartais iškeliauja į projektus, kartais grįžta, jei pritrūksta laiko. Kartais negrįžta, nes įgyvendinama, o kartais išbraukiu, nes kažkokiu keistu būdu pasiekiu neturėdamas net projekto. Kai kuriuos įrašus galima braukti, jei jie tampa nebeaktualūs. Įrašai turi dvi būsenas „Someday“ arba „Maybe“. Jos turi esminį skirtumą. „Someday“ reiškia, kad tai kada nors vis tiek norėsi padaryti tik dabar nėra tam laiko, o „Maybe“ reiškia, kad ne esi tikras, gal nori, o gal ir ne, bet tai kažkuo patraukė dėmesį.

Šis sąrašas yra geras tuo, kad kai kažką į jį perkeli, gali jaustis ramus. Atrodo keista, bet kai padarai sprendimą to dabar nedaryti ir esi pasižymėjęs, t.y. niekada nepamirši, iš tikro yra ramiau, kad nedarai.

Checklists

Paskutinis „Worksheet“. Seniau visus „Checklist“ laikiau MS Word dokumente, tačiau nusprendžiau, kad noriu turėt šalia. Iš viso turiu 10 sąrašų. Kai kurie labai padeda, nes sudaryti optimaliu eiliškumu ir viską primena, todėl nieko nepamirštu. „Tickler“ naudoju, kad primintų reikiamus sąrašus peržvelgti.

Tai tiek apie mano šabloną. „Review“ darau beveik kasdien, todėl žemesni lygmenys yra peržiūrimi dažnai. Vieną kartą į savaitę darau rimtą peržiūrą. Jos metu svarbiausia subalansuoti ateinančių savaičių krūvį ir peržiūrėti projektų stovį, ar tikrai visi juda, gal jiems ko trūksta ir pan. Tada naudoju „bubble“ principą, kai nuo numatyto veiksmo kylama iki projekto, atsakomybių, tikslų, o po to leidžiamasi žemyn taip patikrinant ar tikrai nėra kokių nutrūkusių galų.

Pilna šabloną galima atsisiųsti.

Kūryba , , , , , , , , , , ,

Kaip būti organizuotu? II dalis. Horizons of View

2011-10-16

Metus naudoju GTD ir dėl to labai džiaugiuosi. Pats diegimas man užtruko tris savaites, gavosi kaip kūrybinės atostogas. Vėliau, su laiku, atsirado išimčių, nes gyvenimas labai įvairus, tad šią vasarą keletą dienų skyriau sistemos tobulinimui. Dabar sistema paruošta naujam darbų pikui.

Metų patirtimi dabar ir dalinsiuosi. Tiesa, mano interpretacijos apie GTD gali skirtis nuo paties Allen‘o, todėl geriausia, jei jau esate skaitę Allen’o knygą ir bent šį tą išbandėt. Sąvokas reiktų žinoti, nes ne visas aiškinu detaliai, be to man patinka naudoti angliškus terminus, nes jie tokie lakoniški… Viskas ką rašysiu yra labai svarbu, nors gali atrodyti, kad tai smulkmenos.

Pačios GTD sistemos esmė yra: laikyti visus įsipareigojimus, sau ir kitiems, išorinėje, patikimoje, sistemoje. Išorinė sistema reiškia, kad jokių įsipareigojimų negalima laikyti galvoje. Tada lengva atsipalaiduoti ir užsiimti vien tik veikla, nes sistema viską primins. O sistema yra patikima tada, jei ji yra:

  • švari (clean) – joje neturėtų būti neapdorotos ir-ar nereikalingos informacijos, prie kiekvieno informacijos bito turi būti aiškus sprendimas ką ketini su ja daryti ar blogiausiu atveju – kada ketini tą sprendimą priimti t.y. kokių sąlygų reikia, kad galėtum priimti;
  • aiški (clear) – užmetus žvilgsnį iš kart turėtų būti aišku apie kalba, labai konkrečiai, jokių dviprasmybių ar daugiaprasmybių;
  • atnaujinta (current) – negalima leisti sistemai pasenti, būtina pastoviai daryti peržiūras (review), visi įrašai turi atitikti jūsų šiandienos realijas;
  • išbaigta (complete) – joje turėtų būti viskas kas yra svarbu, jokių išimčių.

Šie keturi požymiai yra pagrindiniai kriterijai, kurie padeda save patikrinti ar sistema pasitikėsi. Nes jei nepasitikėsi, pradėsi įsipareigojimus įsiminti ir nuo to momento sistema tampa neefektyvi.

Kai pradėjau domėtis GTD, jau tada buvo įvairiausių įrankių su kuriais galima sistemą naudoti, pavyzdžiui Outlook. Bet man nei viena nepatiko, todėl nusprendžiau daryti savaip ir pasirinkau Excel. Viename XLSM faile (MS Office 2007 failas su makro komandomis) yra visi HOV („Horisons of View“) t.y. kiekvienam po vieną „Worksheet“. Iš viso 9 „Worksheets“. Apie kiekvieną prašysiu atskirai:

Nepateiksiu savo sistemos įrašų, tai pernelyg asmeniška, tačiau šabloną su keliais paprastais pavyzdžiais parodyti galiu. Jei yra neaiškumų, galite drąsiai klausti komentaruose.

Current projects (10 000 ft)

Logiškiausia pradėti nuo projektų. Mano sistemoje dažniausiai jų yra apie 15. Nors Allen‘as ir sako, kad bet ką, kas turi bent du veiksmus, reiktų laikyti projektu, bet man per daug laiko susi gaišta, jei kurti projektus smulkmenoms. Pavyzdžiui, norint apsikirpti reiktų kelių veiksmų. Užsiregistruoti, nueiti paskirtu laiku ir užfiksuoti sau priminimą kitam kartui. Tai darau paprastai. Į „Calendar-Tickler“ konkrečią dieną įrašau priminimą „Kirptis“ su komentaru („registruotis“), atėjus tai dienai užsiregistruoju ir įrašau į „Calendar-Tickler“ kitą įrašą konkrečioje dienoje – „Kirptis X val.“. Po apsikirpimo įrašau dar vieną įrašą, kuris man primins, kad reiktų ir vėl užsiregistruoti. Paprasta ir jokių projektų.

Per metus buvo sukurti 61 projektai, dažniausiai tai yra kelių mėnesių ar savaičių apimties, būna ir mažesnių, bet tikrai nesismulkinu kaip kurie, kurie turi 100 ar daugiau aktyvių projektų. Man netgi atrodo, kad jie save kažkiek apgaudinėja arba yra genijai. Šioje vietoje turėtų būti tik tie projektai, kurie iš tiesų juda į priekį, todėl ir pavadinta „Current“, o ne tie, kurie norėtum kad judėtų, bet iš tikro nejuda. Pastarųjų tikroji vieta yra „Someday-Maybe“ sąraše. Šiuo metu turiu 16 aktyvių projektų, visi juda į priekį, tiesa, kai kurie yra priklausomi nuo kitų žmonių, todėl laukiu kol bus atlikti deleguoti veiksmai. Iš 61 sukurtų projektų, per metus pilnai įgyvendinti 43 projektai, o 2 nepasisekė. Nesėkmės irgi gerai, svarbu tinkamai į jas reaguoti. Kai kurie projektai iš „Someday-Maybe“ atkeliauja į einamuosius projektus, o kartais grįžta atgal, nes pritrūksta laiko.

Kiekvienas projektas turi pavadinimą, dažniausiai iš vieno žodžio. Prie kiekvieno iš jų vienu sakiniu lakoniškai parašytas laukiamas sėkmingas rezultatas („Outcome“), t.y. kai jį pasieksi, projektas bus įgyvendintas. Todėl rezultatas turi būti maksimaliai tiksliai įvardintas, jokių miglotumų, rezultatas privalo būti išmatuojamas ir turintis pabaigą. Čia jau reikia pasistengti nubrėžti labai aiškias ribas tarp to kas turi būti padaryta ir to ko nereikia. Jokio godumo („keep it real stupid“).

Prie kiekvieno projekto dar užrašau jo „Area of Responsibility-Focus“ (pavyzdžiui „Blogas“, „Mokslas“). Nes turi būti labai aiškus ryšis tarp aukštesnių horizontų ir žemesnių. Žinoma, kad kai kurie projektai paveikia kelis aukštesnius horizontus, bet reiktų visgi apsispręsti kurį labiausiai. Šalia dar gali būti projekto terminas („deadline“) ir būsena („status“). Pagal būseną labai patogu rūšiuoti. Geriau naudoti 2007 ar naujesnį MS Office, nes juose jau yra filtras su „multiselect“. Pavyzdžiui, mano galimos būsenos yra „Done“, „Failure“, „“ (tuščia). Tuomet nufiltruoju, kad man matytųsi tik tie projektai, kurių būsena tuščia, taip atlikti projektai niekur nedingsta, tačiau ir į akis nelenda, matau tik aktualius t.y. dar neatliktus.

Projektų palaikymo („support“) informaciją laikau kartu su projektų failais. Apie tai gal vėliau.

Kuriant projektus labai svarbu žiūrėti ar kai kurie projektai kartais nėra labai sukibę (vieno rezultatas labai priklauso nuo kito), t.y. ar tikrai kai kurių negalima apjungti ir padaryti iš jų vieną. Kartais taip galima sau pasilengvinti. Tačiau iš kitos pusės, jei viename projekte reikia pasiekti kelis rezultatus, kurie mažai tarpusavyje siejasi, tada geriau tą vieną projektą išskaidyti į mažesnius.

Kai kurie žmonės kuria palaikymo („maintain“) projektus. Tai, tokie projektai, kurie periodiškai atsinaujina. Man tokie projektai nelabai patinka, jei jie nėra labai ilgalaikiai, stengiuosi išsiversti su „Calendar-Tickler“ arba sąrašais („checklist“). Kitaip tariant projektų sąrašo geriau nešiukšlinti, nes smulkūs ir nereikšmingi projektai blaško, užima papildomą laiką juos peržiūrėti ir palaikyti.

„Subprojects“ stengiuosi vengti, bet jei labai reikia naudoju „@”, pavyzdžiui „Prj1 @Sub1”.

Current NPAs (Runaway)

Pilnas sąrašo pavadinimas: „Current Next Physical Actions“ arba „Runway“. Išvertus būtų: dabartiniai-einamieji sekantys-kiti fiziniai veiksmai. Esmė tokia, kiekvienas projektas turi turėti vienu sakiniu paaiškinimą-nuorodą, ką toliau su tuo projektu reiktų daryti. Dažnai naudojamas „NA (Next Action)“ terminas, tačiau aš specialiai užrašiau „NPA“, kad priminti sau, jog tas sekantis veiksmas turi atspindėti ką konkrečiai, fiziškai, tu ketini daryti su tuo projektu. Tik galvojant apie fizinį veiksmą galima patikrinti ar tu turėsi pakankamai informacijos, įrankių ar kitokių resursų, kad jį atlikti. Tarkim reiktų parašyt referatą (linkiu, kad nereikėtų), tada nusprendi, kad reiktų pradėti nuo knygos apžvalgos. Tai „NPA“ galėtų būti toks: „atsiversti X knygą“. Jei knygos neturi, tada galėtų būti: „atsiversti bibliotekos puslapį knygos paieškai“. Jau rašiau apie vilkinimo priežastis, tai čia tą reikia turėti galvoje, kad „NPA“ turi būti lengvas, jis turi būti atominis-nedalomas, absoliučiai aiškus ir įvykdomas.

Prie kiekvieno „NPA“ parašytas projekto pavadinimas, kad išliktų ryšys su aukštesniu horizontu. Projektų ir „Current NPAs“ sąrašai galėtų būti išrikiuoti pagal projekto pavadinimą, tuomet vaikštant iš projektų lango į veiksmų langą iš kart matytųsi kiekvieno projekto ir jam priskirto veiksmo informacija toje pačioje eilutėje. Dalis veiksmų gali neturėti priskirto projekto, jei tai kažkokios smulkmenos. Dažniausiai yra „Errands“, „Calls“ ir panašūs veiksmai. Todėl prie kiekvieno veiksmo patogu turėti konteksto pavadinimą, kuriame tas veiksmas gali būti atliekamas. Pavyzdžiui, „Home“, „Internet“, „E-turgus“, „E-PC“ („E“ – reiškia „Errands“, „PC“ – prekybos centras). Tokiu atveju gali būti surašytos prekės, kurių reikia nupirkt ar panašiai. Ir žinoma kiekvienam veiksmui reikalingas statusas-būsena. Mano būsenos yra: „Done“, „Waiting For“, „“ (tūščia).

Dabar trumpai apie veiksmo gyvavimo ciklą. Jei tai yra projekto veiksmas, tai jis užbaigiamas tada, kai baigiasi pats projektas. Projektui judant į priekį, „NPA“ įrašas vis keičiasi, nes negali visą laiką dirbti prie vieno projekto, vadinasi jį reikia palikti ir grįžus vėl prie jo, tas „NPA“ primins nuo kurios vietos reikia tęsti. Kai kurie veiksmai būna pažymėti „Waiting For“, kai kažkas deleguota kitiems ir iš jų laukiamas rezultatas (kartais informacijos, kartais apsisprendimo). Veiksmai be projekto užbaigiami juos įvykdžius. Jei nupirkai prekę, tai pažymi kaip „Done“.

Dar svarbu paminėti, kad „NPA“ negali būti niekur daugiau, tik čia. Jie turi skambėti patraukliai, įvykdomai („doable“) ir užtrukti labai trumpai. Nes jų esmė, užkurti procesą, įvesti save į tą projektą per kuo trumpesnį laiko tarpą, o ne juo gauti visą projekto rezultatą. Kiekvienas įrašas turi prasidėti veiksmažodžiu.

Visi „NPA“, kurie nėra aktualūs arba pasidaro tokiais, turėtų keliauti į „Someday-Maybe“. Neapgaudinėkit savęs, jei įrašas nepadarytas ten stovi mėnesį ar kitą ir yra nepadaromas, vadinasi jam ten ne vieta. O tie „NPA“, dėl kurių yra apsisprendimas dėl konkrečios datos, kad tada jis bus daromas, galėtų keliauti iš šio sąrašo į „Calendar-Tickler“.

Calendar-Tickler

Bandžiau įvairius variantus ir priėjau tokią išvadą, kad tinkamai padarytas kalendorius Excel formatu yra labai patogus, nes gali tarnauti ir kaip kalendorius ir kaip „Tickler“ (Allen siūlo fizinius aplankus, kurių neturiu). Pats kalendorius man patogus tuo, kad visi įrašai matosi viename lange ir juos gali stumdyti beveik be pastangų.

Su makro komandomis jau atliktus veiksmus arba nebeaktualius įrašus nuspalvoju pilkai. Įrašai, kurie turi išorinį įsipareigojimą su kitais žmonėmis (paskaitos, treniruotės, susitikimai ir t.t.) pažymiu raudonai. „Tickler“ įrašus (įvairūs priminimai susieti su konkrečiomis dienomis) nuspalvoju violetine spalva. Be to, kadangi vietos mažai, kiekvienam įrašui skiriu vieną trumpą žodį, o ant tos celės įterpiu komentarą su papildoma informacija, jei tokios yra. Jeigu esu nusprendęs dirbti prie konkrečių projektų konkrečiomis dienomis, tai į tas dienas įrašau tų projektų pavadinimus. Būna, kad nepavyksta skirti laiko, tuomet tiesiog perkeli įrašus į ateitį per dieną ar kelias.

Kalendorius didėja į viršų, nes pastebėjau, kad maloniau yra kilti į viršų nei leistis žemyn. Kalendorių paprastai išplečiu iki kelių mėnesių į priekį. Jame būna ir gerokai į priekį įterptų įrašų, jei jie bus aktualūs vėliau.

Taigi, šį kart labai detaliai apžvelgiau savo GTD sistemos pirmus du lygmenis su kalendoriumi. Kitame įraše apžvelgsiu likusius. Mano GTD Excel XLSM šabloną galima atsisiųsti (kitame įraše įdėsiu pilną, su visais lygmenimis). Beje, reiktų atkreipti dėmesį į šablone panaudotus duomenų filtrus, nes įvykdyti projektai ir veiksmai yra paslėpti.

Kūryba , , , , , , ,