KMeans_arma
KMeans_arma KMeans_rcpp қарағанда жылдамырақ , дегенмен ол бастапқыда тек кейбір кластерлердің центроидтарын шығарады. Сонымен қатар, деректердегі бағандар саны кластерлер санынан асуы керек, әйтпесе функция қатені қайтарады. Кластерлеу OpenMP қосылған көп ядролы машиналарда жылдамырақ жұмыс істейді (мысалы, GCC ішіндегі fopenmp ). Алгоритм бір рет инициализацияланады және әдетте біріктіру үшін 10 итерация жеткілікті. Бастапқы центроидтар keep_existing , static_subset , random_subset , static_spread немесе random_spread алгоритмдерінің бірі арқылы таратылады . Егер тұқым_режимі keep_existing мәніне тең болса , пайдаланушы енгізу ретінде центроидтық матрицаны беруі керек . Мен
dietary_survey_IBS деректеріндегі өлшемдердің санын PCA ( principal құрамдас талдау ), атап айтқанда stats бумасындағы princomp функциясы , нәтижесінде алынған кластерлердің екі өлшемді сызбасын көрсетуге болады.
pca_dat = stats::princomp(dat)$scores[, 1:2]
km = KMeans_arma(pca_dat, clusters = 2, n_iter = 10, seed_mode = "random_subset",
verbose = T, CENTROIDS = NULL)
pr = predict_KMeans(pca_dat, km)
table(dietary_survey_IBS$class, pr)
class(km) = 'matrix'
plot_2d(data = pca_dat, clusters = as.vector(pr), centroids_medoids = as.matrix(km))
KMeans_rcpp
Жоғарыда айтылғандай, KMeans_rcpp функциясы KMeans_arma функциясына қарағанда кейбір қосымша функцияларды ұсынады :
ол бірнеше инициализацияға мүмкіндік береді ( OpenMP параллельді болуы мүмкін)
optimum_init , quantile_init , кездейсоқ немесе kmeans ++ инициализацияларына қосымша CENTROIDS параметрінде центроидтарды көрсетуге болады
num_init , max_iters және tol параметрлерімен реттеуге болады.
егер num_init > 1 болса, KMeans_rcpp ең жақсы инициализация атрибуттарын квадрат ішіндегі кластер сомасындағы қателік критерийін пайдалана отырып қайтарады
алгоритм қайтарады келесі атрибуттар : кластерлер, анық емес_кластерлер ( егер бұлыңғыр = РАҚ болса), центроидтар, жалпы_SSE , ең жақсы_бастапқылау , әр_кластерге_ WCSS , әрбір_кластерге_қарау , .SS_DIV_жалпы.SS арасындағы
KMeans_rcpp туралы қосымша мәліметтерді пакеттік құжаттамада табуға болады. Мен векторлық кванттау мысалында және OpenImageR бумасын пайдалана отырып , KMeans_rcpp әртүрлі параметрлерін суреттеймін .
library(OpenImageR)
path = 'istockphoto-850201098-612x612.jpg'
im = readImage(path)
# сначала изменим размер картинки, чтобы уменьшить количество измерений
im = resizeImage(im, 75, 75, method = 'bilinear')
imageShow(im) # вывод исходного изображения
im2 = apply(im, 3, as.vector)
# кластеризация с KMeans_rcpp
km_rc = KMeans_rcpp(im2, clusters = 5, num_init = 5, max_iters = 100,
initializer = 'optimal_init', threads = 1, verbose = F)
km_rc$between.SS_DIV_total.SS
Атрибут арасында.SS_DIV_total.SS тең ( жалпы_SSE - қосынды ( WCSS_per_cluster )) / total_SSE . Кластерлеуде үлгі болмаса, квадраттардың орындалатын сомасы квадраттардың жалпы сомасының өте аз бөлігі болады, ал егер between.SS_DIV_total.SS төлсипаты 1,0 -ге жақын болса, мәндер жақсы
кластерленеді .
getcent = km_rc$centroids
getclust = km_rc$clusters
new_im = getcent[getclust, ] # каждое значение ассоциируется с ближайшим центроидом
dim(new_im) = c(nrow(im), ncol(im), 3) # обратное преобразование к трехмерной картинке
imageShow(new_im)
кластерлердің оңтайлы санын анықтау үшін Optimal_Clusters_KMeans функциясын (ол жанама түрде KMeans_rcpp пайдаланады) пайдалануға болады . Қол жетімді осындай критерийлер : дисперсия_түсіндірілді , WCSSE (квадраттың-қателік-кластер-қосындысы - квадраттардың қосындысы - қателер - кластер ішіндегі ) , ұқсастық , силуэт , бұрмалау_fK , AIC , BIC Және Adjusted_Rsquared . Пакеттік құжаттамада әрбір критерий бойынша қосымша ақпарат бар.
Келесі код мысалы " Таңдау" мақаласында толық сипатталған distortion_fK шартын пайдаланады. К -дегі К- дегенді білдіреді кластерлеу , Фам ., Димов ., Нгуен ., (2004)» («К-дағы К таңдауы кластерлеуді білдіреді»).
opt = Optimal_Clusters_KMeans(im2, max_clusters = 10, plot_clusters = T,
verbose = F, criterion = 'distortion_fK', fK_threshold = 0.85)
Бекітілген шектен төмен мәндерді (мұнда fK_threshold = 0,85) кластерлеуге ұсынуға болады. Дегенмен, бірнеше оңтайлы кластерлеу бар, сондықтан f(K) тек кластерлердің санын болжау үшін пайдаланылуы керек, бірақ бұл мәнді қабылдау немесе қабылдамауды түптеп келгенде пайдаланушы шешеді.
К-шағын топтардағы әдісті білдіреді
Мини-топтық k-орталары әдісі классикалық k-орташа алгоритмінің вариациясы болып табылады. Бұл әсіресе үлкен деректер жиындары үшін пайдалы, өйткені мақсат функциясын оңтайландыру үшін бүкіл жиынтықты пайдаланудың орнына (k-орталардағы сияқты) кездейсоқ деректер мәндерінің шағын популяциялары алынады.
Достарыңызбен бөлісу: |