1.1 Struktura zbioru danych
Najpopularniejszym obecnie źródłem zbiorów danych jest repozytorium UCI ML. Założyli je, początkowo jako serwer FTP, jeszcze pod koniec lat 80. absolwenci Uniwersytetu Kalifornijskiego w Irvine.
Skorzystamy więc z niego, aby zdobyć zbiór Iris. Znajdziemy go na stronie głównej jako pierwszą na liście najczęściej odwiedzanych zbiorów danych.

Po odwiedzeniu strony zbioru zobaczymy jego opis, zadania w których jest przydatny, liczbę cech, instancji, opis parametrów i (zaznaczone na czerwono) łącze do pobrania.

Sam zbiór, w postaci pliku CSV, znajdziemy pod łączem do pliku iris.data
. Nie ściągajmy go na dysk, a tylko skopiujmy hiperłącze do niego.

Tak przygotowani możemy wczytać zbiór w skrypcie w języku Python.
W pierwszej linijce importujemy moduł pandas, ułatwiający operacje na zbiorach danych, następnie odkładamy do zmiennej
url
znalezioną na UCI ML ścieżkę do pliku csv i wreszcie wczytujemy ramkę danych do zmiennejpd
.
import pandas as pd
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
df = pd.read_csv(url, header=None)
Tak wczytany zbiór możemy wyświetlić na ekranie.
print(df)
0 1 2 3 4
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
.. ... ... ... ... ...
147 6.5 3.0 5.2 2.0 Iris-virginica
148 6.2 3.4 5.4 2.3 Iris-virginica
149 5.9 3.0 5.1 1.8 Iris-virginica
[150 rows x 5 columns]
Jak widać, we wczytanym zbiorze znajduje się sto pięćdziesiąt wierszy (wzorców, obiektów), każdy po pięć kolumn. Wyświetlmy pojedynczy wzorzec.
print(df.loc[0])
0 5.1
1 3.5
2 1.4
3 0.2
4 Iris-setosa
Name: 0, dtype: object
Zgodnie z opisem zbioru na stronie UCI, Pierwsze cztery elementy naszego obiektu są wektorem cech wzorca, a ostatni jego etykietą, którą będziemy mogli posłużyć się później w procesie uczenia naszego algorytmu rozpoznawania wzorców.
Cały zbiór danych możemy zatem podzielić na:
przestrzeń cech — zbiór wszystkich wektorów cech obiektów znajdujących się w zbiorze (zwyczajowo oznaczamy go przez
X
),zbiór etykiet — zawierający etykiety dla obiektów znajdujących się w zbiorze (zwyczajowo oznaczamy go przez
y
).
Zwróć uwagę, że
X
jest wielkie, ay
małe.
Dokonajmy więc podziału wczytanego zbioru danych na X
i y
. Zapiszemy je już nie jako ramki danych (tak nazywamy struktury obsługiwane przez pandas
), a jako tablice numpy
.
Do zmiennej
data
odkładamy za pośrednictwem atrybutuvalues
tablicęnumpy
ze wszystkimi wartościami z ramkidf
. Tablice tego typu adresujemy podobnie jak robiliśmy to w języku Matlab. Adres podajemy w nawiasie kwadratowym, a po przecinkach wymieniamy pozycje w kolejnych wymiarach tablicy. Do zmiennejX
przypisujemy więc wszystkie wiersze (:
) i wszystkie kolumny poza ostatnią (:-1
). Z kolei do zmiennejy
przypisujemy wszystkie wiersze (:
) ale tylko ostatnią kolumnę (-1
).
data = df.values
X = data[:,:-1]
y = data[:,-1]
Wyświetlmy jeszcze naszą przestrzeń cech X
i zbiór etykiet y
.
print(X)
[[5.1 3.5 1.4 0.2]
[4.9 3.0 1.4 0.2]
[4.7 3.2 1.3 0.2]
...
[6.5 3.0 5.2 2.0]
[6.2 3.4 5.4 2.3]
[5.9 3.0 5.1 1.8]]
print(y)
['Iris-setosa' 'Iris-setosa' 'Iris-setosa' ... 'Iris-virginica'
'Iris-virginica' 'Iris-virginica']
Warto zapamiętać, że każda tablica numpy
zawiera parametr shape
, który pozwala nam poznać jej wymiary przestrzenne. Widzimy dzięki temu, że nasza przestrzeń cech ma 150 wierszy po 4 kolumny, a zbiór etykiet, po prostu 150 elementów.
print(X.shape)
(150, 4)
print y.shape
(150,)
Last updated