1. biolab
  2. Untitled project
  3. emc-sola

Commits

Jure Žbontar  committed 68708d6

Final touches.

  • Participants
  • Parent commits db9a835
  • Branches default

Comments (0)

Files changed (8)

File predavanja/cv.md

View file
  • Ignore whitespace
 k-kratno prečno preverjanje
 ===========================
 
-Učne primere razdelimo na `k` približno enako velikih kosov. Prvih
-`k - 1` kosov uporabimo za učenje modela s katerim napovemo zadnji
-kos. Postopek ponovimo `k`-krat, le da vsakič napovemo drug kos podatkov.
+Pri k-kratnem prečnem preverjanju učne primere razdelimo na `k`
+približno enako velikih kosov. Prvih `k - 1` kosov uporabimo za učenje
+modela s katerim napovemo zadnji kos. Postopek ponovimo `k`-krat, le da
+vsakič napovemo drug kos podatkov.
 
 *Q: Zakaj potrebujemo k-kratno prečno preverjanje? Ali ni dovolj skripta
 `validate.py`?*
 A: Če nismo pazljivi se lahko zgodi, da pri k-kratnem prečnem
 preverjanju nevede pogoljufamo (najbolj tipičen primer je, da pred
 prečnim preverjanjem izberemo atribute, ki dobro ločijo razred) in
-nas dobljeni rezultat lahko zavede. Nevarni so tudi algoritmi, ki 
-sprejemajo veliko parametrov, saj se lahko naučimo dobro ločevati
-le učne primere.
+nas dobljeni rezultat lahko zavede. Nevarni so tudi algoritmi, ki imajo
+veliko parametrov, saj se lahko naučimo dobro ločevati le učne primere.
 
 Vaj se bomo lotili tako, da bomo najprej sprogramirali mero `logloss`,
 nato se bomo lotili k-kratnega prečnega preverjanja, zaključili pa
 [Multi Class Log Loss](https://www.kaggle.com/wiki/MultiClassLogLoss) - mero,
 ki jo želimo na tekmovanju minimizirati.
 
+		>>> data = np.loadtxt('iris.data')
+		>>> X, y = sp.csr_matrix(data[:,:-1]), data[:,-1].astype(np.int)
         >>> P = majority(X, y, X)
         >>> logloss(y, P)
         1.098612288668108
 
 2. Napiši funkcijo `cv(X, y, fun, folds=4)`, ki sprejme redko matriko
 atributov `X`, seznam razredov `y`, klassifikator `fun` in `k`, ki sem
-ga v svoji kodi, iz neznanih razlogov, poimenoval `folds`.
+ga v svoji kodi, iz neznanih razlogov, poimenoval `folds`. Vrne pa
+`logloss` klasifikatorja `fun`, izračunan s `k`-kratnim prečnim
+preverjanjem.
 
 		>>> data = np.loadtxt('iris.data')
 		>>> X, y = sp.csr_matrix(data[:,:-1]), data[:,-1].astype(np.int)
 vseh `k` kosov izvajamo sočasno - vsak kos na
 svojem procesorju. Poglobite se v dokumentacijo modula
 [multiprocessing](http://docs.python.org/library/multiprocessing.html).
-Posebej pozorno preberite opis metod `apply_async` razreda `Pool` in
+Posebej pozorno preberite opis metode `apply_async` razreda `Pool` in
 sprogramirajte paralelno različio k-kratnega prečnega preverjanja.
 
 	<div class="solution">
 			pool.close()
 			pool.join()
 
-			return P, np.mean(score)
+			return P, np.mean(score)                        # +++
 	</div>
 

File predavanja/head.html

View file
  • Ignore whitespace
 body {
 	font-family: Verdana; 
 	margin: auto; 
-	width: 800px;
+	max-width: 800px;
+	padding: 20px;
 }
 </style>
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

File predavanja/majority.md

View file
  • Ignore whitespace
 
 Najbrž je težko videti kdaj bi bil tako preprost algoritem sploh
 uporaben. Ponavadi ga boste uporabili, ko boste točnost svojega
-klasifikatorja želeli primerjati z nekim osnovnim modelom.
+klasifikatorja želeli primerjati z nekim osnovnim modelom. Če je
+točnost vašega modela blizu točnosti večinskega klasifikatorja,
+potem se z vašim algoritmom ne morete ravno hvaliti.
 
+Naloge
+------
 
-1. Naloži podatke `iris.data`. Prve štiri stolpce spravi v redko
-matriko `X`, zadnjega pa v navaden seznam `y`. Čeprav podatki niso redki,
-se bomo delali kot da so.
+V rešitvah predpostavljam, da se program začne z vrsticama
+
+    import numpy as np
+	import scipy.sparse as sp
+
+1. Naloži podatke `iris.data`, ki jih boš
+našel v direktoriju `/apps/poletna_sola/skupno/data`
+([namig](http://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html)).
+Prve štiri stolpce spravi v [redko
+matriko](http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csr_matrix.html)
+`X`, zadnjega pa v numpyjev seznam `int`ov `y`. Čeprav podatki niso
+redki, se bomo delali kot da so.
 
 	<div class="solution">
 
 
 2. Napiši funkcijo `majority(X, y, X_test)`,
 ki implementira večinski klasifikator
-([namig](http://docs.scipy.org/doc/numpy/reference/generated/numpy.bincount.html)).
+([namig](http://docs.scipy.org/doc/numpy/reference/generated/numpy.bincount.html),
+[namig](http://docs.scipy.org/doc/numpy/reference/generated/numpy.tile.html)).
 Funkcijo preverite na podatkih iris.
 
 		>>> P = majority(X, y, X)
 [EMC_IO](http://www.kaggle.com/c/emc-data-science/data), ki so jo
 napisali organizatorji, preberite podatke tekmovanja. Redko matriko
 `X` sestavite tako, da zložite matriki `70_30_train_data.csv` in
-`70_30_test_data.csv` (v tem vrstnem redu), seznam `y` pa zgradite
-iz vsebine datoteke `70_30_train_labels.csv`. 
+`70_30_test_data.csv` (glej skico), seznam `y` pa zgradite iz vsebine
+datoteke `70_30_train_labels.csv`. Datoteke `70_30_*` se nahajajo, tako
+kot `iris.data`, v direktoriju `/apps/poletna_sola/skupno/data`.  Na koncu
+vse skupaj [zapiklajte](http://docs.python.org/library/pickle.html),
+da vam ne bo treba vsakič znova brati vhodnih podatkov, s čimer boste
+pohitrili zagon vašega programa.
+
+	![X_and_y_matrix](Xy.svg)
 
 		>>> X.shape
 		(175315, 592158)
 		>>> type(y)
 		<type 'numpy.ndarray'>
 
-	Na koncu vse skupaj
-	[zapiklajte](http://docs.python.org/library/pickle.html), da vam ne bo
-	treba vsakič znova brati vhodne podatke, s čimer boste pohitrili zagon
-	vašega programa.
-
 	<div class="solution">
 
 		import pickle
 	</div>
 
 3. Napiši funkcijo `submit(P)`, ki sprejme matriko napovedanih verjetnosti
-in jih, v csv formatu, zapiše v izhodno datoteko `submission.csv` 
+in jo, v csv formatu, zapiše v izhodno datoteko `submission.csv` 
 ([namig](http://docs.scipy.org/doc/numpy/reference/generated/numpy.savetxt.html)).
 Dodatne točke dobite, če vam uspe izhodno datoteko skompresirati.
 

File predavanja/out/Xy.svg

View file
  • Ignore whitespace
Added
New image

File predavanja/out/index.html

View file
  • Ignore whitespace
+<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+
+<ol>
+<li><a href="xgrid.html">xgrid</a></li>
+<li><a href="majority.html">Večinski klasifikator</a></li>
+<li><a href="sparse.html">Redke matrike</a></li>
+<li><a href="cv.html">Prečno preverjanje</a></li>
+</ol>

File predavanja/out/xgrid.svg

View file
  • Ignore whitespace
Added
New image

File predavanja/sparse.md

View file
  • Ignore whitespace
 	import numpy as np
 	import scipy.sparse as sp
 
-ter da sta matriki `X` in `Xcsr` definirani tako
+ter da sta matriki `X` in `Xcsr` definirani kot
 
 	X = [[1.0, 0, 1.0, 2.0],
 		 [6.0, 0, 0  , 0  ],
 		print np.sum(Xcsr.data)
 	</div>
 
-3. Napiši program, ki matriko `Xcsr` popravi tako, da bo vsota vseh vrstic enaka 1.
+3. Napiši program, ki matriko `Xcsr` popravi tako, da bo vsota vseh
+vrstic enaka 1. Povedano malo drugače, vsako vrstico matrike `Xcsr`
+deli z vsoto te vrstice.
 
 	<div class="solution">
 		
 
 	<div class="solution">
 
+		row_indices = np.array([True, False, False, True, True])
 		Xcsr = Xcsr[np.nonzero(row_indices)[0]]
 		print Xcsr.toarray()
 	</div>
 
-5. Napiši program, ki v matriki `Xcsr` obdrži le stolpce, ki vsebujejo vsaj dve neničelni vrednosti.
+5. Napiši program, ki v matriki `Xcsr` obdrži le stolpce, ki vsebujejo
+vsaj dve neničelni vrednosti. V našem primeru obdrižimo prvi in zadnji
+stolpec, saj oba vsebujeta natako dve neničelni vrednosti.
 
 	<div class="solution">
 

File predavanja/xgrid.md

View file
  • Ignore whitespace
 V laboratoriju imamo na voljo 10 8-jedrnih računalnikov, ki vam bodo
 olajšali delo na problemu. Uporabite jih tako, da se najprej povežete
 z glavnim računalnikom na naslovu `xgrid.fri.uni-lj.si`, od koder je
-dostopnih 9 ostalih računalnikov z imeni `n2`, `n3`, vse do `n10`. 
+dostopnih ostalih 9, z imeni `n2`, `n3`, vse do `n10`. 
 
 ![shema](xgrid.svg)
 
 v direktorij `xgrid` in ustvarjena datoteka se bo, namesto na vašem
 lokalnem računalniku, znašla na strežniku.
 
-Seveda boste morali program zagnati tako, da se prej povežete na `xgrid`.
+Seveda boste morali program zagnati tako, da se prej povežete na 
+`xgrid.fri.uni-lj.si`.
 
 	local$ ssh ps1@xgrid.fri.uni-lj.si
 	xgrid$ ssh n6
 Naloge
 ------
 
-1. Ustvarite certifikat in njegov javni del skopirajte
+1. Na `xgrid`u ustvarite datoteko z imenom `.profile`, ki vsebuje vrstici
+
+		export PATH=/apps/poletna_sola/skupno/bin:$PATH
+		source /apps/poletna_sola/bin/activate
+
+	Brez druge vrstice bi uporabljali verzijo Pythona, ki nima
+	nameščenih vseh knjižnic.
+
+2. Ustvarite certifikat in njegov javni del skopirajte
 na `xgrid`, da vam ne bo treba vsakič znova vpisovati gesla.
 [Linux](http://rcsg-gsir.imsb-dsgi.nrc-cnrc.gc.ca/documents/internet/node31.html),
 [Windows](http://www.howtoforge.com/ssh_key_based_logins_putty_p2).
 
-2. (Samo za tiste, ki programirate v Pythonu) Na `xgrid`u ustvarite
-datoteko z imenom `.profile`, ki vsebuje vrstico
 
-		source /apps/poletna_sola/bin/activate
-
-	Brez te datoteke, boste namreč uporabljali verzijo Pythona, ki nima
-	nameščenih vseh knjižnic.
-