From 6cf6817fc544de14e7f8e1f7c9034488cb1f9ed9 Mon Sep 17 00:00:00 2001 From: Samuel <sekurh@utu.fi> Date: Tue, 15 Apr 2025 11:08:16 +0300 Subject: [PATCH] =?UTF-8?q?Uusien=20ominaisuuksien=20klusterointi=20valmis?= =?UTF-8?q?=3F,=20raporttia=20eteenp=C3=A4in?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ominaisuussuunnittelu.txt | 5 +++- Raportti.txt | 13 ++++++--- Uusien ominaisuuksien klusterointi.py | 38 +++++++++++++++++++++++---- 3 files changed, 47 insertions(+), 9 deletions(-) diff --git a/Ominaisuussuunnittelu.txt b/Ominaisuussuunnittelu.txt index 4fefe99..a21ac8a 100644 --- a/Ominaisuussuunnittelu.txt +++ b/Ominaisuussuunnittelu.txt @@ -38,4 +38,7 @@ Neulaset suhteessa kokoon: data['Needle_Density'] = data['NeedleNo'] / data['VolumeIndex'] -Tämä auttaa tunnistamaan puulajeja. \ No newline at end of file +Tämä auttaa tunnistamaan puulajeja. + +---------------------------------------- + diff --git a/Raportti.txt b/Raportti.txt index fb42bfc..763316b 100644 --- a/Raportti.txt +++ b/Raportti.txt @@ -16,9 +16,16 @@ Käytimme Principal Component Analysis, eli pääkomponenttianalyysia, joka väh Näin data on jaettu kahteen pääkomponenttiin, x- ja y-akselille kuvaajalla. 2. Ominaisuussuunnittelu ##KESKEN -Lisäsimme uusia ominaisuuksia -1. `kirjoita ominaisuus`: -2. `kirjoita ominaisuus`: +Lisäsimme uusia ominaisuuksia, jotka auttavat tunnistamaan eri tyyppejä. +1. Käpyjen ja neulasten suhde ['Needles_per_Pine']: Tämän avulla voidaan tunnistaa eri puulajeja ja arvioida karkeasti kasvuympäristöä ja puun hyvinvointia. +2. Puun tilavuuden likimäärä ['VolumeIndex']: +3. Kaarnan paksuus suhteessa korkeuteen ['Bark_to_Height']: +4. Käpytiheys ['Pine_Density']: +5. Neulastiheys ['Needle_Density']: +6. Korkeuden suhde ympärysmittaan ['Height_to_Circumference']: +7. Neulasten määrä suhteessa kaarnan paksuuteen ['Needles_to_Bark']: + +Katso Ominaisuussuunnittelu.txt, sieltä näkee miten uudet ominaisuudet on johdettu. 3. Muokatun datan klusterointi ## KESKEN Muokatun datan klusterointi tuotti selkeämmät klusterit, jotka erottelivat puut ominaisuuksien perusteella. diff --git a/Uusien ominaisuuksien klusterointi.py b/Uusien ominaisuuksien klusterointi.py index 9460d09..065ca9f 100644 --- a/Uusien ominaisuuksien klusterointi.py +++ b/Uusien ominaisuuksien klusterointi.py @@ -19,9 +19,12 @@ data['Height_to_Circumference'] = data['Height'] / data['Circumference'] # korke data['Needles_to_Bark'] = data['NeedleNo'] / data['BarkThickness'] # neulasten määrä suhteessa kaarnan paksuuteen print("Valitse klusterointiin käytettävät uudet ominaisuudet: ") -print("1. Puun tilavuuden suhde neulasten kokonaismäärään (auttaa tunnistamaan puutyyppejä)") # features = ['VolumeIndex', 'Needle_Density'] -print("2. Käpyjen kokonaismäärän suhde puun tilavuuteen (auttaa tunnistamaan puiden iän ja lisääntymismahdollisuudet)") # features = ['Pine_Density', 'VolumeIndex'] -print("3. Exit") +print("1. Puun tilavuuden suhde neulastiheyteen (auttaa tunnistamaan puutyyppejä)") # features = ['VolumeIndex', 'Needle_Density'] +print("2. Käpytiheyden suhde puun tilavuuteen (auttaa tunnistamaan puiden iän ja lisääntymismahdollisuudet)") # features = ['Pine_Density', 'VolumeIndex'] +print("3. Käpytiheyden suhde kaarnan paksuuteen (auttaa tunnistamaan puun iän ja lisääntymisvaiheen)") +print("4. Neulastiheyden suhde käpytiheyteen (auttaa tunnistamaan 'lehtevät' ja lisääntymiskykyiset puut)") +print("5. Kaikki uudet ominaisuudet (luonnollinen ryhmittely)") +print("6. Exit") choice = input("Anna valitsemasi numero: ") @@ -30,19 +33,44 @@ if choice == "1": X = data[features] title = "Eri puutyyppien tunnistus" xakseli = "Puun koko/tilavuus" - yakseli = "Neulasten määrä" + yakseli = "Neulastiheys" elif choice == "2": features = ['Pine_Density', 'VolumeIndex'] # Valitaan klusterointiin käytettävät attribuutit X = data[features] title = "Puiden ikä ja lisääntymismahdollisuudet" - xakseli = "käpyjen määrä" + xakseli = "Käpytiheys" yakseli = "Puun koko/tilavuus" elif choice == "3": + features = ['Pine_Density', 'BarkThickness'] # Valitaan klusterointiin käytettävät attribuutit + X = data[features] + title = "Puiden ikä ja lisääntymisvaihe" + xakseli = "Käpytiheys" + yakseli = "Kaarnan paksuus" + +elif choice == "4": + features = ['Needle_Density', 'Pine_Density'] # Valitaan klusterointiin käytettävät attribuutit + X = data[features] + title = "Lehtevät ja lisääntymiskykyiset puut" + xakseli = "Neulastiheys" + yakseli = "Käpytiheys" + +elif choice == "5": + features = ['Needles_per_Pine', 'Bark_to_Height', 'Pine_Density', 'Needle_Density', + 'VolumeIndex', 'Height_to_Circumference', 'Needles_to_Bark'] # Valitaan klusterointiin käytettävät attribuutit + X = data[features] + title = "Luonnollinen ryhmittely" + xakseli = "Yhdistetyt ominaisuudet" + yakseli = "Yhdistetyt ominaisuudet" + +elif choice == "6": print("Lopetetaan...") exit() +else: + print("Virheellinen valinta, yritä uudelleen.") + exit() # Skaalataan ominaisuudet scaler = StandardScaler() -- GitLab