Skip to content
Snippets Groups Projects
Commit c77a19cf authored by Jenni Alarakkola's avatar Jenni Alarakkola
Browse files

Viimeisimmät muutokset

parent 6cf6817f
No related branches found
No related tags found
No related merge requests found
from sklearn.decomposition import PCA #PCA on Principal Component Analysis, eli pääkomponenttianalyysi, joka vähentää ulottuvuuksia
import pandas as pd
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt #matplotlib visualisointiin, lataa gitillä "pip install matplotlib"
# Ladataan raakadata
data = pd.read_csv("raakadata.csv")
# Valitaan klusterointiin käytettävät attribuutit
features = ["Height", "Circumference", "BarkThickness", "PineNo", "NeedleNo"]
X = data[features]
# Normalisoidaan data
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# Klusteroidaan raakadata K-means-avulla
kmeans_raw = KMeans(n_clusters=4, random_state=42)
data["Cluster_Raw"] = kmeans_raw.fit_predict(X_scaled) + 1
# Vähennetään ulottuvuudet kahteen PCA:lla
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
# Visualisoidaan klusterointi PCA:lla
scatter = plt.scatter(X_pca[:, 0], X_pca[:, 1], c=data["Cluster_Raw"], cmap="viridis")
plt.title("Raakadatan klusterointi (PCA)")
plt.xlabel("yhdistetty data 1")
plt.ylabel("yhdistettu data 2")
# Lisätään selite
legend1 = plt.legend(*scatter.legend_elements(), title="Klusterit")
plt.gca().add_artist(legend1)
# Näytetään kuva
plt.show()
\ No newline at end of file
...@@ -42,3 +42,17 @@ Tämä auttaa tunnistamaan puulajeja. ...@@ -42,3 +42,17 @@ Tämä auttaa tunnistamaan puulajeja.
---------------------------------------- ----------------------------------------
Korkeus suhteessa ympärysmittaan:
data['Height_to_Circumference'] = data['Height'] / data['Circumference']
Auttaa tunnistamaan kasvutapoja ja puiden muotoja.
----------------------------------------
Neulasten määrä suhteessa kaarnan paksuuteen:
data['Needles_to_Bark'] = data['NeedleNo'] / data['BarkThickness']
Auttaa tunnistamaan kasvuolosuhteet ja puun iän.
...@@ -15,7 +15,7 @@ Näin kuvaajista saatiin hieman luettavampia. ...@@ -15,7 +15,7 @@ Näin kuvaajista saatiin hieman luettavampia.
Käytimme Principal Component Analysis, eli pääkomponenttianalyysia, joka vähentää ulottuvuuksia. Käytimme Principal Component Analysis, eli pääkomponenttianalyysia, joka vähentää ulottuvuuksia.
Näin data on jaettu kahteen pääkomponenttiin, x- ja y-akselille kuvaajalla. Näin data on jaettu kahteen pääkomponenttiin, x- ja y-akselille kuvaajalla.
2. Ominaisuussuunnittelu ##KESKEN 2. Ominaisuussuunnittelu
Lisäsimme uusia ominaisuuksia, jotka auttavat tunnistamaan eri tyyppejä. 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. 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']: 2. Puun tilavuuden likimäärä ['VolumeIndex']:
...@@ -27,10 +27,19 @@ Lisäsimme uusia ominaisuuksia, jotka auttavat tunnistamaan eri tyyppejä. ...@@ -27,10 +27,19 @@ Lisäsimme uusia ominaisuuksia, jotka auttavat tunnistamaan eri tyyppejä.
Katso Ominaisuussuunnittelu.txt, sieltä näkee miten uudet ominaisuudet on johdettu. Katso Ominaisuussuunnittelu.txt, sieltä näkee miten uudet ominaisuudet on johdettu.
3. Muokatun datan klusterointi ## KESKEN 3. Muokatun datan klusterointi
Muokatun datan klusterointi tuotti selkeämmät klusterit, jotka erottelivat puut ominaisuuksien perusteella. Muokatun datan klusterointi tuotti selkeämmät klusterit, jotka erottelivat puut ominaisuuksien perusteella.
Käytimme ominaisuussuunnittelun avulla luotuja uusia attribuutteja, kuten neulastiheyttä ja puun tilavuusindeksiä,
jotka auttoivat ryhmittelemään puut niiden biologisten ja rakenteellisten ominaisuuksien perusteella.
Työn pohjana toimivat Pandas ja K-Means -klusterointi. Klusterit visualisoitiin PCA:n
avulla kahdessa ulottuvuudessa. Lisäksi poistimme 1% kaukaisimmista pisteistä, jotta
visualisointi keskittyisi olennaisiin havaintoihin.
4.Johtopäätökset ## KESKEN Katso Uusien ominaisuuksien klusterointi.py
4.Johtopäätökset
Biologien alkuperäinen luokittelu ei täysin vastannut klusteroinnin tuloksia. Biologien alkuperäinen luokittelu ei täysin vastannut klusteroinnin tuloksia.
Uudet ominaisuudet, kuten `--` ja `--`, auttoivat parantamaan klusterointia. Uudet ominaisuudet auttoivat parantamaan klusterointia, sillä ne erottelivat puut esimerkiksi
Näiden avulla saimme paremman näkemyksen puiden eroista, kuten .... niiden kasvutapojen, iän ja lajityypin perusteella.
\ No newline at end of file Näiden avulla saimme paremman näkemyksen puiden eroista, kuten neulasten määrä suhteessa
kaarnan paksuuteen paljasti niiden ekologisia ja rakenteellisia eroja.
\ No newline at end of file
...@@ -23,8 +23,10 @@ print("1. Puun tilavuuden suhde neulastiheyteen (auttaa tunnistamaan puutyyppej ...@@ -23,8 +23,10 @@ print("1. Puun tilavuuden suhde neulastiheyteen (auttaa tunnistamaan puutyyppej
print("2. Käpytiheyden suhde puun tilavuuteen (auttaa tunnistamaan puiden iän ja lisääntymismahdollisuudet)") # features = ['Pine_Density', 'VolumeIndex'] 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("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("4. Neulastiheyden suhde käpytiheyteen (auttaa tunnistamaan 'lehtevät' ja lisääntymiskykyiset puut)")
print("5. Kaikki uudet ominaisuudet (luonnollinen ryhmittely)") print("5. korkeus suhteessa ympärysmittaan (auttaa tunnistamaan puiden kasvutapoja ja muotoja)")
print("6. Exit") print("6. neulasten määrä suhteessa kaarnan paksuuteen (auttaa tunnistamaan kasvuolosuhteet ja puun iän)")
print("7. Kaikki uudet ominaisuudet (luonnollinen ryhmittely)")
print("8. Exit")
choice = input("Anna valitsemasi numero: ") choice = input("Anna valitsemasi numero: ")
...@@ -57,14 +59,29 @@ elif choice == "4": ...@@ -57,14 +59,29 @@ elif choice == "4":
yakseli = "Käpytiheys" yakseli = "Käpytiheys"
elif choice == "5": elif choice == "5":
features = ['Height', 'Circumference'] # Lisätty, korkeus suhteessa ympärysmittaan
X = data[features]
title = "Puiden kasvutapoja ja puiden muotoja"
xakseli = "Korkeus"
yakseli = "Ympärysmitta"
elif choice == "6":
features = ['NeedleNo', 'BarkThickness'] # neulasten määrä suhteessa kaarnan paksuuteen
X = data[features]
title = "Kasvuolosuhteet ja puun ikä"
xakseli = "Neulaset"
yakseli = "Kaarnan paksuus"
elif choice == "7":
features = ['Needles_per_Pine', 'Bark_to_Height', 'Pine_Density', 'Needle_Density', 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 'VolumeIndex', 'Height_to_Circumference', 'Needles_to_Bark'] # Valitaan klusterointiin käytettävät attribuutit
X = data[features] X = data[features]
title = "Luonnollinen ryhmittely" title = "Luonnollinen ryhmittely"
xakseli = "Yhdistetyt ominaisuudet" xakseli = "Yhdistetyt ominaisuudet 1"
yakseli = "Yhdistetyt ominaisuudet" yakseli = "Yhdistetyt ominaisuudet 2"
elif choice == "6":
elif choice == "8":
print("Lopetetaan...") print("Lopetetaan...")
exit() exit()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment