3. Més proper¶
Definim mostra com a una etiqueta seguida d’una serie de valors reals, tots entre 0 i 1 (ambdós inclosos), que anomenem vector. Disposem de mostres codificades com a strings a on la separació entre cada element és un o més espais. Per exemple, aquesta mostra
'setosa 0.1 0.5 0.43 0.21'
conté l’etiqueta setosa i el vector 0.1 0.5 0.43 0.21.
Dissenya la funció següent i desa-la al fitxer mes_proper.py:
- mes_proper.extreu(mostra)¶
Retorna la etiqueta i el vector associats a una mostra.
Per exemple:
>>> mostra1 = 'setosa 0.1 0.5 0.43 0.21' >>> etiq, dades = extreu(mostra1) >>> etiq 'setosa' >>> dades [0.1, 0.5, 0.43, 0.21] >>> mostra2 = 'virginica 0.81 0.73 0.75 0.1 0.68 0.23' >>> etiq, dades = extreu(mostra2) >>> etiq 'virginica' >>> dades [0.81, 0.73, 0.75, 0.1, 0.68, 0.23]
Nota
Disposes de més tests al fitxer test-extreu.txt.
La distància euclidiana entre dos vectors \(\mathbf{v_1} = (v_{1_1}, v_{1_2}, \dots, v_{1_n})\) i \(\mathbf{v_2} = (v_{2_1}, v_{2_2}, \dots, v_{2_n})\) es calcula mitjançant la següent fórmula:
Dissenya la funció següent i desa-la al fitxer mes_proper.py:
- mes_proper.distancia(vector1, vector2)¶
Retorna la distància euclidiana entre dos vectors (llistes de reals). Es suposa que els vectors tenen la mateixa longitud.
Per exemple:
>>> v1 = [0.1, 0.5, 0.43, 0.21] >>> v2 = [0.53, 0.29, 0.1, 0.5] >>> round(distancia(v1,v2),4) 0.6496 >>> v3 = [0.53, 0.72, 0.16, 0.1] >>> v4 = [0.53, 0.72, 0.16, 0.1] >>> distancia(v3,v4) 0.0
Nota
Disposes de més tests al fitxer test-distancia.txt.
A més a més, disposem d’una col·lecció de mostres emmagatzemades en una llista d’strings. Per exemple:
>>> dades = [ ... 'setosaA 0.1 0.5 0.43 0.21', 'virginicaA 0.53 0.29 0.1 0.5', ... 'setosaB 0.2 0.33 0.11 0.0', 'versicolorA 0.655 0.7 0.433 0.762', ... 'versicolorB 0.131 0.532 0.01 0.0', 'setosaC 0.0 0.0 0.1 0.21',
Dissenya la funció següent i desa-la al fitxer mes_proper.py:
- mes_proper.etiqueta(dades, vector)¶
Retorna l’etiqueta de la mostra de la llista dades més propera al vector donat segons la distància euclidiana. Per simplificar, suposarem que no pot haver-hi empats i que la llista dades conté com a mínim una mostra.
- Paràmetres:
- Tipus de retorn:
- Retorna:
Etiqueta de la mostra de dades més propera a vector.
Aquesta funció ha de cridar a les funcions anteriors
extreu()idistancia().
Per exemple:
>>> dades = [ ... 'setosaA 0.1 0.5 0.43 0.21', 'virginicaA 0.53 0.29 0.1 0.5', ... 'setosaB 0.2 0.33 0.11 0.0', 'versicolorA 0.655 0.7 0.433 0.762', ... 'versicolorB 0.131 0.532 0.01 0.0', 'setosaC 0.0 0.0 0.1 0.21', ... 'versicolorC 0.53 0.29 0.1 0.3'] >>> v1 = [0.1, 0.48, 0.42, 0.22] >>> etiqueta(dades, v1) 'setosaA' >>> v2 = [0.1, 0.3, 0.4, 1.0] >>> etiqueta(dades, v2) 'virginicaA'
Nota
Disposes de més tests al fitxer test-etiqueta.txt.
Disposeu de solucions al fitxer mes_proper.py