- Stwórz klasę
Sample
, zawierającą:- zmienną całkowitą
label
, - wektor liczb zmiennoprzecinkowych
features
,
- zmienną całkowitą
- w konstruktorze klasy
Sample
przyjmuj oba te parametry, - stwórz też dla nich gettery.
- Stwórz klasę
Dataset
, zawierającą:- wektor obiektów klasy
Sample
, - metodę
push_back()
, dodającą nową próbkę do wektora:- metoda ta powinna sprawdzać, czy wektor
features
dla każdej z wprowadzanych próbek jest tej samej długości.
- metoda ta powinna sprawdzać, czy wektor
- wektor obiektów klasy
- Stwórz klasę
Prediction
, dziedziczącą po klasieSample
, dodającą do niej zmiennąprediction
, - Rozszerz ją o metodę statyczną
accuracy()
, przyjmującą wektor obiektów klasyPrediction
, informującą o tym, w jakim odsetku ich zmiennelabel
iprediction
mają tę samą wartość.
- Jako argumenty wiersza poleceń programu, przekaż nazwę pliku oraz liczbę całkowitą
k
, - dla celów testowych, w repozytorium znajduje się plik
wine.csv
, - wczytaj plik
wine.csv
do wektora obiektów typuSample
tak, aby pierwsza jego kolumna określałalabel
, a pozostałe znalazły się w wektorzefeatures
, - stwórz dwa obiekty klasy
Dataset
. Pierwszy nazwijtrain
, drugitest
, - do
train
wprowadź losowe 20% wczytanych z pliku obiektów, a dotest
, resztę, - zaimplementuj funkcję
knn()
, zwracającą wektor obiektów klasyPrediction
przyjmującą jako argumenty dwa obiekty typuDataset
(train
itest
) i zmienną całkowitąk
:- utwórz w niej wektor
predictions
: - do utworzonego wektora wprowadź kopie wszystkich obiektów (mają typ
Sample
) znajdujących się wtest
, uzupełniając dla nich wartośćprediction
, według następującego schematu:
- utwórz w niej wektor
Dla każdego obiektu ze zbioru testowego znajdź
k
obiektów ze zbioru uczącego, którego cechy (features
) znajdują się w najmniejszej od niego odległości. Zaprediction
uznajlabel
, który powtarza się najczęściej wśród znalezionych.
- Wyświetl użytkownikowi informacje o zbiorze (nazwa pliku, liczba próbek, liczba cech) oraz jakość klasyfikacji (
accuracy()
).