Ierarxik klasterlash


ULASHISH

Ierarxik klasterlash

Ierarxik klasterlash - bu ma’lumotlar nuqtalarini klasterlash uchun nazoratsiz o‘rganish usuli. Algoritm ma’lumotlar orasidagi farqlarni o‘lchash orqali klasterlarni yaratadi. Nazoratsiz o‘rganish, modelni o‘rgatish shart emasligini anglatadi va bizga "maqsadli" o‘zgaruvchi kerak emas. Ushbu usul har qanday ma’lumotlarda alohida ma’lumotlar nuqtalari o‘rtasidagi munosabatni ko‘rish va izohlash uchun ishlatilishi mumkin.

Bu yerda biz ma’lumotlar nuqtalarini guruhlash uchun ierarxik klasterlashdan foydalanamiz va dendrogramma va scatter chizmasi yordamida klasterlarni vizualizatsiya qilamiz.


U qanday ishlaydi?

Biz aglomerativ klasterlashdan foydalanamiz, bu pastdan yuqoriga yondashuvga amal qiladigan ierarxik klasterlash turi. Biz har bir ma’lumot nuqtasini o‘z klasteri sifatida ko‘rib chiqishni boshlaymiz. Keyin, biz kattaroq klasterlarni yaratish uchun ular orasidagi eng qisqa masofaga ega bo‘lgan klasterlarni birlashtiramiz. Ushbu qadam barcha ma’lumotlar nuqtalarini o‘z ichiga olgan bitta katta klaster hosil bo‘lguncha takrorlanadi.

Ierarxik klasterlash bizdan ham masofa, ham bog‘lanish usulini tanlashni talab qiladi. Biz evklid masofasidan va klasterlar orasidagi tafovutni minimallashtirishga harakat qiladigan Ward bog‘lanish usulidan foydalanamiz.

Misol

Ba’zi ma’lumotlar nuqtalarini vizualizatsiya qilishdan boshlang:

import numpy as np import matplotlib.pyplot as plt x = [4, 5, 10, 4, 3, 11, 14 , 6, 10, 12] y = [21, 19, 24, 17, 16, 25, 24, 22, 21, 21] plt.scatter(x, y) plt.show()

Natija

Misolni ishga tushirish »

Endi biz evklid masofasidan foydalangan holda palata bog‘lanishini hisoblaymiz va uni dendrogramma yordamida tasavvur qilamiz:

Misol

import numpy as np import matplotlib.pyplot as plt from scipy.cluster.hierarchy import dendrogram, linkage x = [4, 5, 10, 4, 3, 11, 14 , 6, 10, 12] y = [21, 19, 24, 17, 16, 25, 24, 22, 21, 21] data = list(zip(x, y)) linkage_data = linkage(data, method='ward', metric='euclidean') dendrogram(linkage_data) plt.show()

Natija

Misolni ishga tushirish »
Here, we do the same thing with Python’s scikit-learn library. Then, visualize on a 2-dimensional plot:

Misol

import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import AgglomerativeClustering x = [4, 5, 10, 4, 3, 11, 14 , 6, 10, 12] y = [21, 19, 24, 17, 16, 25, 24, 22, 21, 21] data = list(zip(x, y)) hierarchical_cluster = AgglomerativeClustering(n_clusters=2, linkage='ward') labels = hierarchical_cluster.fit_predict(data) plt.scatter(x, y, c=labels) plt.show()

Natija

Misolni ishga tushirish »


Misol tushuntirildi

Sizga kerak bo‘lgan modullarni import qiling.

import numpy as np
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import dendrogram, linkage
from sklearn.cluster import AgglomerativeClustering

Matplotlib moduli haqida bizning "Matplotlib o‘quv qo‘llanmamizdan bilib olishingiz mumkin.

SciPy moduli haqida bizning SciPy o‘quv qo‘llanmamizdan bilib olishingiz mumkin.

NumPy - bu Python-da massivlar va matritsalar bilan ishlash uchun kutubxona, siz NumPy moduli haqida bizning NumPy qo‘llanmamizda bilib olishingiz mumkin.

scikit-learn - bu mashinani o‘rganish uchun mashhur kutubxona.

Ma’lumotlar to‘plamida ikkita o‘zgaruvchiga o‘xshash massivlarni yarating. E’tibor bering, biz bu yerda faqat ikkita o‘zgaruvchidan foydalansak ham, bu usul istalgan miqdordagi o‘zgaruvchilar bilan ishlaydi:

x = [4, 5, 10, 4, 3, 11, 14 , 6, 10, 12]
y = [21, 19, 24, 17, 16, 25, 24, 22, 21, 21]

Ma’lumotlarni nuqtalar to‘plamiga aylantiring:

data = list(zip(x, y))
print(data)

Natija:

[(4, 21), (5, 19), (10, 24), (4, 17), (3, 16), (11, 25), (14, 24), (6, 22), (10, 21), (12, 21)]

Barcha turli nuqtalar orasidagi bog‘lanishni hisoblang. Bu yerda biz oddiy evklid masofa o‘lchovi va klasterlar orasidagi tafovutni minimallashtirishga intiladigan Uord bog‘lanishidan foydalanamiz.

linkage_data = linkage(data, method='ward', metric='euclidean')

Nihoyat, natijalarni dendrogrammada chizing. Ushbu chizma bizga pastdan (alohida nuqtalar) tepaga (barcha ma’lumotlar nuqtalaridan iborat bitta klaster) klasterlar ierarxiyasini ko‘rsatadi.

plt.show() bizga shunchaki bog‘lanish ma’lumotlarini emas, balki dendrogrammani tasavvur qilish imkonini beradi.

dendrogram(linkage_data)
plt.show()

Natija:

Scikit-learn kutubxonasi bizga ierarxik klasterlashdan boshqa usulda foydalanish imkonini beradi. Birinchidan, biz 2 klaster va Ward aloqasi bilan AgglomerativeClustering sinfini ishga tushiramiz.

hierarchical_cluster = AgglomerativeClustering(n_clusters=2, linkage='ward')

Biz tanlagan klasterlar soni bo‘yicha belgilangan parametrlar yordamida klasterlarni hisoblash uchun ma’lumotlarimizga .fit_predict usulini chaqirish mumkin.

labels = hierarchical_cluster.fit_predict(data) print(labels)

Natija:

[0 0 1 0 0 1 1 0 1 1]

Nihoyat, ierarxik klasterlash usuli bo‘yicha har bir indeksga tayinlangan teglar yordamida bir xil ma’lumotlarni chizib, nuqtalarni ranglantirsak, har bir nuqta tayinlangan klasterni ko‘rishimiz mumkin:

plt.scatter(x, y, c=labels)
plt.show()

Natija:


W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!