Կլաստերավորման մեթոդներ SciPy-ի հետ
Կլաստերավորումը տեխնիկա է մեքենայական ուսուցման և տվյալների գիտության մեջ, որը ներառում է տվյալների համանման կետերի կամ առարկաների խմբավորումը կլաստերների կամ ենթաբազմությունների մեջ: Կլաստերավորման նպատակն է գտնել օրինաչափություններ և կառուցվածքներ տվյալների մեջ, որոնք կարող են անմիջապես ակնհայտ չլինել, և խմբավորել առնչվող տվյալների կետերը, որոնք կարող են օգտագործվել հետագա վերլուծության համար: Այս հոդվածում մենք պատրաստվում ենք տեսնել, թե ինչպես կարելի է իրականացնել կլաստերավորում SciPy գրադարանի օգնությամբ:
SciPy-ն մեզ տրամադրում է տարբեր գիտական հաշվողական գործիքներ՝ թվային ինտեգրում, օպտիմալացում, գծային հանրահաշիվ, ազդանշանի մշակում և այլն առաջադրանքներ կատարելու համար: Այն օգտագործվում է հետազոտողների, գիտնականների, ինժեներների և տվյալների վերլուծաբանների կողմից՝ իրենց աշխատանքում բարդ հաշվարկներ և վերլուծություններ կատարելու համար: Այն կառուցված է NumPy-ի վերևում և բաղկացած է կլաստերավորման ենթամոդուլից:
Կլաստերավորման որոշ ալգորիթմներ, որոնք կարող են իրականացվել SciPy-ի միջոցով, հետևյալն են.
K-միջոցներ − Այստեղ նպատակն է տվյալների բազան բաժանել k կլաստերների, որտեղ k-ն ֆիքսված թիվ է, և յուրաքանչյուր տվյալների կետ պատկանում է մի կլաստերի, որի միջինը (կամ կենտրոնաձևը) ամենամոտն է դրան:
Հիերարխիկ - Այստեղ մենք ստեղծում ենք կլաստերների հիերարխիա, որը կարող է ներկայացվել որպես դենդրոգրամ: Դրանք հետագայում բաժանվում են 2 տեսակի, որոնք են՝ ագլոմերատիվ կլաստերավորումը և բաժանարար կլաստերավորումը:
Այս մեթոդներից յուրաքանչյուրն ունի իր ուժեղ և թույլ կողմերը, և որոնցից օգտվելու ընտրությունը կախված կլինի տվյալների բնութագրերից և խմբավորման նպատակներից: Sikit-learn գրադարանը տրամադրում է նաև կլաստերավորման ալգորիթմներ՝ ավելի առաջադեմ առանձնահատկություններով, ինչպիսիք են Gaussian Mixture Model-ը, Bayesian Gaussian Mixture Model-ը և այլն:
K-Means Clustering SciPy-ի հետ
K-Means ալգորիթմն աշխատում է՝ սկզբում պատահականորեն վերագրելով k ցենտրոիդներ տվյալների շտեմարանին, այնուհետև կրկնվող տվյալների կետերը վերանշանակելով ամենամոտ ցենտրոիդին և թարմացնելով ցենտրոիդը՝ հիմնվելով նոր կլաստերի վրա: Այս գործընթացը կրկնվում է այնքան ժամանակ, մինչև կլաստերները միանան կամ հասնենք կրկնությունների առավելագույն քանակին: SciPy գրադարանը ապահովում է k-means ալգորիթմի իրականացում scipy.cluster.vq մոդուլում:
Օգտագործված տվյալների հավաքածուն (kmeans_dataset.csv) հասանելի է այստեղ:
Օրինակ
import pandas as pd
df = pd.read_csv("kmeans_dataset.csv")
X = df.values
from scipy.cluster.vq import kmeans,vq
# number of clusters
k = 4
# compute k-means clustering
centroids,_ = kmeans(X,k)
# a cluster for each data point
clusters,_ = vq(X,centroids)
# Plotting the data points in the clusters
import matplotlib.pyplot as plt
colors = ['r','g','b','y']
for i in range(k):
# select only data observations with cluster label == i
ds = X[np.where(clusters==i)]
# plot the data observations
plt.scatter(ds[:,0],ds[:,1],c=colors[i])
# plot the centroids
plt.scatter(centroids[i,0],centroids[i,1],marker='x',s=200, c='black')
plt.show()
Արդյունք
Վերոնշյալ կոդը կխմբավորի տվյալների կետերը 4 կլաստերների և գծագրելու է տվյալների կետերը տարբեր գույներով՝ ըստ իրենց կլաստերի նշանակման: Կլաստերային ցենտրոիդները ներկայացված են «x» մարկերներով:
Կարելի է հարմարեցնել կլաստերների քանակը՝ ձեր տվյալներին և խնդրին համապատասխան:
Այս օրինակում ես օգտագործել եմ տվյալների հավաքածուն, որի հղումը տրված է վերևում, այնուհետև օգտագործել եմ k-means ալգորիթմը՝ արդյունքները հավաքելու և պատկերացնելու համար:
Հիշեք, որ k-means ալգորիթմը զգայուն է սկզբնական պայմանների նկատմամբ, ուստի արդյունքները կարող են տարբեր լինել, եթե այն գործարկեք մի քանի անգամ տարբեր սկզբնական ցենտրոիդներով:
Հիերարխիկ կլաստերավորում SciPy-ի հետ
Հիերարխիկ կլաստերավորումը կլաստերավորման մեթոդ է, որը ստեղծում է կլաստերների հիերարխիա, որտեղ յուրաքանչյուր կլաստեր նախորդի ենթաբազմություն է: Հիերարխիան ներկայացված է որպես ծառի նման կառուցվածք, որը կոչվում է դենդրոգրամ: Դա հզոր մեթոդ է տվյալների մեծ հավաքածուների կառուցվածքը ուսումնասիրելու և պատկերացնելու համար: Այնուամենայնիվ, այն կարող է հաշվողականորեն թանկ լինել մեծ տվյալների հավաքածուների համար և զգայուն լինել օգտագործվող կապի մեթոդի նկատմամբ:
Օրինակ
from scipy.cluster.hierarchy import linkage, dendrogram, cut_tree
# sample data points
data = [[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]]
# create linkage matrix
Z = linkage(data, method='ward')
# create dendrogram
dendrogram(Z)
# cut the dendrogram at a threshold to obtain clusters
clusters = cut_tree(Z, height=2)
import matplotlib.pyplot as plt
plt.figure()
dendrogram(Z, labels = ["data1","data2","data3","data4","data5","data6"])
plt.show()
Արդյունք
Վերոնշյալ կոդը կխմբավորի տվյալների կետերը կլաստերների մեջ՝ օգտագործելով կապի մեթոդը՝ «ward», որը նվազագույնի է հասցնում կապվող կլաստերների միջև հեռավորությունների տարբերությունը: Դենդրոգրամի ֆունկցիան օգտագործվում է դենդրոգրամի գծագրման համար, որը հիերարխիկ կլաստերի լուծման վիզուալիզացիա է։ cut_tree ֆունկցիան օգտագործվում է դենդրոգրամից կլաստերները տվյալ շեմին հանելու համար։ cut_tree ֆունկցիայի ելքը յուրաքանչյուր տվյալների կետի կլաստերի պիտակների ցանկն է: Հնարավոր է նաև պատկերացնել դենդրոգրամը՝ օգտագործելով matplotlib գրադարանը և հարմարեցնել արտաքին տեսքը, օրինակ՝ գծերի գույնը և չափը, պիտակները և այլն:
Եզրակացություն
SciPy-ը հասանելի չէ բոլոր տեսակի կլաստերավորման համար, սակայն արդյունավետ է k-means-ը, ինչպես նաև հիերարխիկ կլաստերիավորումը: SciPy-ի k-means ալգորիթմը պարզ և արդյունավետ մեթոդ է տվյալների բազան ֆիքսված թվով կլաստերների բաժանելու համար: Հիերարխիկ կլաստերավորումը մեթոդ է, որը ստեղծում է կլաստերների հիերարխիա, որտեղ յուրաքանչյուր կլաստեր նախորդի ենթաբազմություն է: Լայնորեն օգտագործվող ալգորիթմները, ինչպիսիք են DBSCAN-ը, չեն կարող իրականացվել SciPy-ի միջոցով:
Հետևաբար, եթե դուք փնտրում եք կլաստերավորման ալգորիթմների լայն շրջանակ՝ նախնական մշակման, գնահատման և ավելի ճկունության համար ներկառուցված աջակցությամբ, scikit-learn-ը լավագույն ընտրությունն է: