خانه / مقالات / داده کاوی و هوش مصنوعی / خوشه بندی سلسله مراتبی در R

خوشه بندی سلسله مراتبی در R

خوشه بندی سلسله مراتبی در R
در مقاله های پیشین به بررسی خوشه بندی دیتا با استفاده از الگوریتم های خوشه بندی سلسله مراتبی، در نرم افزارهای وکا، رپیدماینر و متلب پرداختیم در این مقاله قصد داریم این الگوریتمها را در نرم افزار R بررسی کنیم.
در اینجا نیز از دیتاست گل ذنبق استفاده شده است.
نمونه ای با ۴۰ رکورد از دیتاست گل ذنبق می گیریم:

idx <- sample(1:dim(iris)[1], 40)
irisSample <- iris[idx,] irisSample$Species <- NULL
Hierarchical clustering
hc <- hclust(dist(irisSample), method=”ave”)
plot(hc, hang = -1, labels=iris$Species[idx])

در ادامه برای نمایش دقیق تر و بهتر به ترتیب زیر عمل می کنیم:
دیتاست گل ذنبق اندازه ای بر حسب سانتی متر به ترتیب از متغیرهای طول و عرض کاسبرگ و گلبرگ ۵۰ گل از هر سه گونه گل ذنبق می دهد. این گونه ها setosa، versicolorو virginica هستند.
تعریف متغیرها:
برای اینکار در R باید ابتدا پکیج colorspace و پکیج fastcluster و پکیج dendextend و hclust و circlize را نصب کنیم.
روش های خوشه بندی سلسله مراتبی تعداد خوشه های از قبل تعیین شده ای تولید نمی کنند ولی یک دندروگرام می دهند که اجازه می دهد کاربر خودش تعداد معقولی کلاستر بر اساس خروجی الگوریتم انتخاب کند سپس داده را بر اساس آن پارتیشن بندی کند. بدین صورت دید کلی از داده می تواند فیچرهایی کشف کند که ممکن است در اسکیل های مختلف وجود داشته باشد.
پکیج fastcluster 7 الگوریتم کلاسترینگ سلسله مراتبی متداول را پیاده سازی می کند.

iris <- datasets::iris
iris2 <- iris[,-5] species_labels <- iris[,5] library(colorspace) # get nice colors
species_col <- rev(rainbow_hcl(3))[as.numeric(species_labels)] pairs(iris2, col = species_col,
lower.panel = NULL,
cex.labels=2, pch=19, cex = 1.2)
par(xpd = TRUE)
legend(x = 0.05, y = 0.4, cex = 2,
legend = as.character(levels(species_labels)),
fill = unique(species_col))
par(xpd = NA)
می توان دید که گونه های Setosa به طور کاملا مشخصی از دو گونه دیگر متمایز هستند (طول وعرض گلبرگ آنها بسیار کوچک تر است). ولی دو گونه دیگر را نمی توان به راحتی بر اساس اندازه گیری طول و عرض کاسبرگ و گلبرگشان جدا کرد. از پلات مختصات موازی داده های آیریس که در ادامه آمده نیز می توان این موضوع را مشاهده کرد:

par(las = 1, mar = c(4.5, 3, 3, 2) + 0.1, cex = .8)
MASS::parcoord(iris2, col = species_col, var.label = TRUE, lwd = 2)
title(“Parallel coordinates plot of the Iris data”)
par(xpd = TRUE)
legend(x = 1.75, y = -.25, cex = 1,
legend = as.character(levels(species_labels)),
fill = unique(species_col), horiz = TRUE)

خطوط آبی مربوط به گونه Setosa است که از دو خط قرمز و سبز جداست و به راحتی قابل تشخیص است.
۳ کلاستر با روش complete

کلاسترینگ پیش فرض در کتابخانه hclust روش complete است. می توان نتیجه اجرای آن را با تبدیل شی دندروگرام و ایجاد یکسری تبدیلات در این شی به تصویر کشید مثلا: تغییر برچسبها، رنگ کردن برچسب ها بر اساس کتگوری گونه های واقعی و رنگ کردن شعبات بر اساس تقسیم درخت به ۳ خوشه.
d_iris <- dist(iris2) # method=”man” # is a bit better
hc_iris <- hclust(d_iris, method = “complete”)
iris_species <- rev(levels(iris[,5]))
library(dendextend)
dend <- as.dendrogram(hc_iris)
dend <- rotate(dend, 1:150)

# تخصیص رنگ
dend <- color_branches(dend, k=3) #, groupLabels=iris_species)
labels_colors(dend) <-
rainbow_hcl(3)[sort_levels_values(
as.numeric(iris[,5])[order.dendrogram(dend)] )] # اختصاص نوع گلها با برچسبها
labels(dend) <- paste(as.character(iris[,5])[order.dendrogram(dend)],
“(“,labels(dend),”)”,
sep = “”)
dend <- hang.dendrogram(dend,hang_height=0.1)
# کاهش سایز لیبل ها:
# dend <- assign_values_to_leaves_nodePar(dend, 0.5, “lab.cex”)
dend <- set(dend, “labels_cex”, 0.5)
# پلات:
par(mar = c(3,3,3,7))
plot(dend,
main = “Clustered Iris data set
(the labels give the true flower species)”,
horiz = TRUE, nodePar = list(cex = .007))
legend(“topleft”, legend = iris_species, fill = rainbow_hcl(3))

همین را می توان با پلات دایره ای شکل هم ترسیم کرد:
par(mar = rep(0,4))
circlize_dendrogram(dend)
این تصاویر نشان می دهند که جداسازی خوشه بندی سلسله مراتبی چقدر برای گونه setosa خوب عمل کرده ولی برخی از داده های گونه Versicolor را با عنوان Virginica برچسب گذاری کرده. می توان دید که مشاهده virginica (107) خیلی مشابه گونه های Versicolor نیست ولی بازهم در میان آنها وجود دارد.

دیدگاهتان را ثبت کنید

آدرس ایمیل شما منتشر نخواهد شدعلامتدارها لازمند *

*

x

شاید بپسندید

آیا در کارها حضور بشر لازم است؟

رشد تکنولوژی، نیاز به نیروی کار را انسانی را در بسیاری از ...