LBB Unsupervised Learning
Read & Explore Data
Disini saya akan melakukan reduksi dimensi pada data ukuran ikan di salah satu pasar ikan di Filipina. Variable yang digunakan akan ada 6 yaitu:
- weight: weight of fish in g
- vertical_length: vertical length in cm
- diagonal_length: diagonal length in cm
- cross_length: cross length in cm
- height: height in cm
- width: diagonal width in cm
Tujuan dalam melakukan reduksi dimensi ini adalah untuk nantinya agar bisa melakukan visualisasi lebih dari 2 dimensi data untuk melakukan clustering ikan-ikan yang memiliki karakteristik ukuran yang sama.
Step pertama yang akan dilakukan yaitu melakukan read data dan melakukan pre-processing data.
'data.frame': 159 obs. of 7 variables:
$ species : Factor w/ 7 levels "Bream","Parkki",..: 1 1 1 1 1 1 1 1 1 1 ...
$ weight : num 242 290 340 363 430 450 500 390 450 500 ...
$ vertical_length: num 23.2 24 23.9 26.3 26.5 26.8 26.8 27.6 27.6 28.5 ...
$ diagonal_length: num 25.4 26.3 26.5 29 29 29.7 29.7 30 30 30.7 ...
$ cross_length : num 30 31.2 31.1 33.5 34 34.7 34.5 35 35.1 36.2 ...
$ height : num 11.5 12.5 12.4 12.7 12.4 ...
$ width : num 4.02 4.31 4.7 4.46 5.13 ...
species weight vertical_length diagonal_length cross_length height
1 Bream 242 23.2 25.4 30.0 11.5200
2 Bream 290 24.0 26.3 31.2 12.4800
3 Bream 340 23.9 26.5 31.1 12.3778
4 Bream 363 26.3 29.0 33.5 12.7300
5 Bream 430 26.5 29.0 34.0 12.4440
6 Bream 450 26.8 29.7 34.7 13.6024
width
1 4.0200
2 4.3056
3 4.6961
4 4.4555
5 5.1340
6 4.9274
Pre-Processing Data
Check adanya missing value data
species weight vertical_length diagonal_length
0 0 0 0
cross_length height width
0 0 0
Model PCA
Setelah selesai melakukan pre-processing, maka tahap selanjutnya yaitu membuat model PCA. Pada langkah reduksi dimensi menggunakan PCA ini, saya menggunakan prcomp().
Importance of components:
PC1 PC2 PC3 PC4 PC5 PC6
Standard deviation 2.2956 0.71450 0.34685 0.31229 0.03968 0.01666
Proportion of Variance 0.8783 0.08509 0.02005 0.01625 0.00026 0.00005
Cumulative Proportion 0.8783 0.96339 0.98344 0.99969 0.99995 1.00000
Karena tujuan saya adalah reduksi dimensi, saya ingin mempertahankan informasi pada data sebanyak ~96%. Oleh karena itu, maka saya akan menggunakan PC1 dan PC2.
Biplot Model PCA
Selanjutnya saya ingin melihat sebaran data fish terhadap variable-variablenya.
Interpretasi:
- adanya korelasi kuat positif antara variable diagonal_length dan vertical_length
[1] 0.9995173
- korelasi antara height dengan diagonal_length sedikit
[1] 0.6404408
Visualizing with PCA and FactoMineR
Supaya lebih terlihat cluster jenis-jenis ikannya dan check ada outlier atau tidak, saya menggunakan metode PCA dari library FactoMiner
.
eigenvalue percentage of variance
comp 1 5.2698053588 87.830089314
comp 2 0.5105128894 8.508548157
comp 3 0.1203025138 2.005041897
comp 4 0.0975271214 1.625452023
comp 5 0.0015746150 0.026243583
comp 6 0.0002775016 0.004625027
cumulative percentage of variance
comp 1 87.83009
comp 2 96.33864
comp 3 98.34368
comp 4 99.96913
comp 5 99.99537
comp 6 100.00000
Lalu kita akan coba lihat biplotnya menggunakan plot.PCA()
‘Individual data’ plot untuk check outlier
dari visualisasi di atas terlihat ada 5 outlier yaitu data 141-145.
Model Kmeans
Dalam membuat cluster, saya akan coba menggunakan elbow method untuk menentukan banyak clusternya. karena PC yang dipilih adalah PC1 dan 2. maka saya ambil data dari kedua PC tersebut
Elbow Plot
Pada elbow plot ini terlihat pada K=4 tidak terjadi penurunan cluster, oleh karena itu saya memilih k=4
Creating Model
K-means clustering with 4 clusters of sizes 66, 26, 22, 45
Cluster means:
PC1 PC2
1 -1.188931 -0.02239569
2 3.447955 -0.33490399
3 -3.430231 -0.23215631
4 1.428615 0.33984574
Clustering vector:
[1] 1 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 2 2 2 2 2 2
[36] 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 1 1 1 4 4 2 3 3 1 1 1 1 1 1 1
[71] 1 1 3 3 3
[ reached getOption("max.print") -- omitted 84 entries ]
Within cluster sum of squares by cluster:
[1] 36.363441 62.042351 6.711978 45.742138
(between_SS / total_SS = 83.5 %)
Available components:
[1] "cluster" "centers" "totss" "withinss"
[5] "tot.withinss" "betweenss" "size" "iter"
[9] "ifault"
Cluster Size
[1] 66 26 22 45
Dari hasil clustering menggunakan k-means, diperoleh 3 kelompok dimana untuk cluster 1 ada 45 ikan, cluster 2 ada 22 ikan, cluster 3 ada 66 ikan, dan cluster 4 ada 26 ikan
WSS
Dari 4 cluster yang sudah terbentuk, dilihat nilai wss dibawah ini sudah cukup kecil.
[1] 150.8599
BSS
Untuk nilai proporsi bss nya, sudah cukup baik karena sudah sekitar 83,48%.
[1] 0.8348171
Visualization
Selanjutnya saya akan coba visualisasikan ikan-ikan yang dalam satu cluster dari variabel-variabel yang ada.
Pada tahap ini saya akan mencoba untuk memvisualisasikan beberapa cluster yang terbentuk dari data Fish ini.
[1] "Jumlah K: 4 | BSS: 0.834817132343861 | WSS: 150.859907985057"
[1] "Jumlah K: 5 | BSS: 0.868563706534807 | WSS: 120.039489684444"
[1] "Jumlah K: 6 | BSS: 0.913194614635981 | WSS: 79.2785149842785"
[1] "Jumlah K: 7 | BSS: 0.936181271424603 | WSS: 58.2850246954765"
Pada case ini saya akan memilih banyak cluster sebanyak 7 karena setiap cluster terlihat terpartisi dengan baik dan nilai bss yang dihasilkan sangat tinggi yaitu 91% dan nilai WSS kecil yaitu 74.
Insight
- Dari data fish, terdapat 7 jenis-jenis ikan yang dihasilkan dari model PCA + KMEANS
- Jumlah K yang optimal dalam model K-means adalah 7 cluster yang memiliki BSS 91% serta WSS 74
- Model PCA yang dipilih adalah PC1 dan PC2 (mampu memberikan 96% informasi dari data)