DBScan ալգորիթմի նկարազարդում հիպերպարամետրային թյունինգով (շառավիղ և աղմուկ):

Կլաստերավորումը կարևոր թեմա է զբաղվածության մեջ, քանի որ այն օգնում է մեզ կրճատել գործառույթների քանակը որոշ տիպաբանության, որոշ կլաստերների, որոնք, եթե տվյալները թույլ են տալիս մեզ, կարող են մեզ ավելի շատ տեղեկություններ տալ մեր հետաքրքրող թեմայի վերաբերյալ: Տվյալների գիտության գրականության մեջ այն սովորաբար ներկայացվում է որպես չափումների կրճատման տեխնիկա, բայց գիտության մեջ կամ նույնիսկ տվյալների գիտության մեջ այն կարող է բացահայտել տվյալների մեջ որոշ լրացուցիչ օրինաչափություն, որն առաջին հայացքից ակնհայտ չէ:

Պատկերացրեք, որ դուք ունեք որոշ առանձնահատկություններ որոշ ուսանողների վերաբերյալ. նրանց գնահատականները, նրանց անհատականության գծերը, նրանց կարողությունների միավորները, նրանց մոտիվացիան: Կլաստերավորումը կարող է ձեզ բացահայտել (ան) հաջողակ ուսանողների բոլորովին նոր տեսակներ (դա կարող է լինել բարձր կարողություններով և ցածր մոտիվացիա ունեցող մեկը՝ թերհասնող, բայց միևնույն ժամանակ կարող է լինել բարձր մոտիվացիա ունեցող և իսկապես լավ գնահատականներով, բայց ցածր կարողություններ ունեցող մեկը՝ գերազանցող։ ): Դա կարելի է անել պարզապես կլաստերի միջոցով, մինչդեռ մեր կլաստերի անունները (overachiever, underachiever) հիմնականում կլաստերի մեկնաբանություններ են:

K-կլաստերավորում

Կլաստերավորման ամենահայտնի ալգորիթմը K-clustering-ն է: K-means կլաստերներն աշխատում են տվյալների կենտրոնական մասերը սկզբնավորելով և այնուհետև դասակարգում են տվյալները ըստ հեռավորության որոշ չափումների (օրինակ՝ Էվկլիդեսյան): Կլաստերավորման այս ալգորիթմի հետևի կողմն այն է, որ մենք պետք է ապրիորի ենթադրենք կլաստերների թիվը, բայց հետո կարող ենք ստուգել տարբեր լուծումների լավության չափը (այսինքն՝ k-կլաստերների թիվը)՝ համեմատելով կլաստերների և կլաստերների միջև տարբերությունը: Որքան մեծ է հարաբերակցությունը կլաստերների միջև հսկայական շեղումների օգտին, լուծումն ավելի լավ է: Այս համեմատաբար պարզ վերլուծությունը կարող է տալ շատ կարևոր բիզնես արժեքի պատկերացումներ՝ որոշ երևույթների (օրինակ՝ հաճախորդներ, ապրանքներ և այլն) բնութագրերը և տիպաբանությունը ավելի լավ հասկանալու առումով: Լուծումների երկու տեսակ՝ երկու և երեք կլաստերներով, հայտնի Iris տվյալների բազայի վրա՝

km = KMeans(n_clusters=2, 
            init='random', 
            n_init=10, 
            max_iter=300,
            tol=1e-04,
            random_state=0)
y_km = km.fit_predict(df.iloc[:,0:3])
y_km = pd.DataFrame(y_km, columns=['two_clasters_solution'])
df = pd.merge(df, y_km, how = 'inner', left_index = True, right_index=True)
km_3 = KMeans(n_clusters=3, 
            init='random', 
            n_init=10, 
            max_iter=300,
            tol=1e-04,
            random_state=0)

y_km_3 = km_3.fit_predict(df.iloc[:,0:3])
y_km_3 = pd.DataFrame(y_km_3, columns=['three_clasters_solution'])
df = pd.merge(df, y_km_3, how = 'inner', left_index = True, right_index=True)

Տիրույթի լավ իմացությամբ՝ ՄԱԿ-ի փորձագետը հեշտությամբ կմեկնաբանի 1-ին կլաստերը որպես setosa, 2-րդ կլաստերը որպես Iris flower versicolor (Perunika սերբերեն) և 3-րդ՝ Iris virginica:

DBScan

DBscan-ը կլաստերավորման ալգորիթմ է, բայց այն, ի տարբերություն K-means-ի, չունի ցենտրոիդներ, ուստի այն ավելի զգայուն է հատկանիշների միջև կապերի ոչ գծային օրինաչափությունների նկատմամբ, որոնք մենք ցանկանում ենք խմբավորել և բացահայտել թաքնված օրինաչափությունները: Այսպիսով, DBScan-ն օգտագործում է տվյալների շառավիղը և խմբային արժեքները, եթե դրանք պատկանում են որոշ վարկած շառավիղի տարածքին: Եկեք նայենք.

Պատկերացրեք, որ մենք ունենք այսպիսի տվյալ. Ակնհայտ է, որ այս օրինակի համար (վերցված Սեբաստիան Ռաշկայի շատ լավ գրքից, Python մեքենայական ուսուցման համար), մենք պետք է տվյալների օրինաչափություն ձևավորենք, բայց մենք պետք է ենթադրենք բավականաչափ զգայուն շառավղային պարամետր (eps em>) յուրաքանչյուր լուսինը գրավելու համար.

from sklearn.cluster import DBSCAN
features, moon_type = make_moons(n_samples=300, noise=0.01, random_state=0)
df = pd.DataFrame(features, columns=['x', 'y'])
moon = pd.DataFrame(moon_type, columns=['moon_type'])
df = df.merge(moon, left_index=True, right_index=True)
db = DBSCAN(eps=0.35, min_samples=5, metric='euclidean')
y_db = db.fit_predict(features)
db_clusters = pd.DataFrame(y_db, columns=['db_clusters'])
df = df.merge(db_clusters, left_index=True, right_index=True)

Բայց, իհարկե, ավելի աղմկոտ տվյալների դեպքում ձեր DBScan ալգորիթմին կարող է պահանջվել ավելի փոքր շառավիղ, բայց դա կարող է հանգեցնել այլ տեսակի սխալի, կամ նաև մեծ շառավիղը կարող է նաև սխալ առաջացնել (տե՛ս վերևի օրինակը, երկու դեպքում էլ օգտագործվում է նույնը աղմուկի պարամետր):

Համապատասխան շառավիղ գտնելը կարող է դժվար լինել, և գուցե լրացուցիչ օպտիմալացման կարիք: Այս խաղալիքի օրինակի համար մենք օգտագործել ենք բիրտ ուժի մոտեցումը տարբեր աղմուկի և շառավղային հիպերպարամետրերով նկարազարդման նպատակով: Լավագույն լուծումը կարելի է տեսնել այստեղ.

Իրական իրավիճակում սովորաբար հիմնավոր ճշմարտությունը հայտնի չէ, ինչը ևս մեկ անգամ ուշադրություն է դարձնում բիզնեսի և տիրույթի գիտելիքներին:

DBScan-ով այս հեշտ և հետաքրքիր խաղի ամբողջական սցենարը կարելի է գտնել այստեղ: Վայելե՛ք։