- Stwórz klasę
Sample, zawierającą:- zmienną całkowitą
label, - wektor liczb zmiennoprzecinkowych
features,
- zmienną całkowitą
- w konstruktorze klasy
Sampleprzyjmuj 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
featuresdla 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 zmiennelabelipredictionmają 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.csvdo wektora obiektów typuSampletak, 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
trainwprowadź losowe 20% wczytanych z pliku obiektów, a dotest, resztę, - zaimplementuj funkcję
knn(), zwracającą wektor obiektów klasyPredictionprzyjmującą jako argumenty dwa obiekty typuDataset(trainitest) 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ź
kobiektów ze zbioru uczącego, którego cechy (features) znajdują się w najmniejszej od niego odległości. Zapredictionuznajlabel, 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()).