Python တွင် k-means clustering- step-by-step ဥပမာ


machine learning တွင် အသုံးအများဆုံး အစုလိုက်အပြုံလိုက် အယ်လဂိုရီသမ်များထဲမှ တစ်ခုကို k-means အစုအဝေးပြုလုပ်ခြင်း ဟုခေါ်သည်။

K ဆိုသည်မှာ အစုအဝေးတစ်ခုစီကို K အစုအဝေးတစ်ခုသို့ ဒေတာအတွဲတစ်ခုမှ စူးစမ်းလေ့လာမှုတစ်ခုစီကို ထားရှိပေးသည့် နည်းလမ်းတစ်ခုဖြစ်သည်။

အဆုံးပန်းတိုင်မှာ အစုအဝေးတစ်ခုစီရှိ ရှုမြင်သုံးသပ်ချက်များသည် တစ်ခုနှင့်တစ်ခု အလွန်တူညီပြီး ကွဲပြားသောအစုအဝေးများတွင် လေ့လာမှုများသည် တစ်ခုနှင့်တစ်ခု အလွန်ကွာခြားသော်လည်း K အစုအဝေးများ ရှိရန်ဖြစ်သည်။

လက်တွေ့တွင်၊ ကျွန်ုပ်တို့သည် K-Means အစုအဝေးပြုလုပ်ရန် အောက်ပါအဆင့်များကို အသုံးပြုသည်-

1. K အတွက် တန်ဖိုးတစ်ခုကို ရွေးပါ။

  • ပထမဦးစွာ၊ ကျွန်ုပ်တို့သည် ဒေတာတွင် ကျွန်ုပ်တို့သတ်မှတ်လိုသည့် အစုအဝေးမည်မျှရှိသည်ကို ဆုံးဖြတ်ရန် လိုအပ်သည်။ မကြာခဏဆိုသလို ကျွန်ုပ်တို့သည် K အတွက် မတူညီသောတန်ဖိုးများစွာကို စမ်းသပ်ပြီး ပေးထားသည့်ပြဿနာအတွက် အသင့်လျော်ဆုံးဖြစ်ပုံရသည့် အစုအဝေးအရေအတွက်ကို သိရှိနိုင်ရန် ရလဒ်များကို ခွဲခြမ်းစိတ်ဖြာရန် လိုအပ်ပါသည်။

2. စောင့်ကြည့်မှုတစ်ခုစီကို 1 မှ K မှ ကနဦးအစုအဝေးတစ်ခုသို့ ကျပန်းသတ်မှတ်ပါ။

3. အစုအဖွဲ့တာဝန်များ မပြောင်းလဲမချင်း အောက်ပါလုပ်ငန်းစဉ်များကို လုပ်ဆောင်ပါ။

  • K အစုအဝေးတစ်ခုစီအတွက်၊ အစုအဝေး၏ ဆွဲငင်အားဗဟိုကို တွက်ချက်ပါ။ ဤသည်မှာ kth အစုအဝေး၏ လေ့လာတွေ့ရှိချက်များအတွက် p- mean features ၏ vector မျှသာဖြစ်သည်။
  • စောင့်ကြည့်မှုတစ်ခုစီကို အနီးစပ်ဆုံး အလယ်ဗဟိုဖြင့် အစုအဝေးသို့ သတ်မှတ်ပေးပါ။ ဤတွင်၊ အနီးစပ်ဆုံး ကို Euclidean အကွာအဝေးကို အသုံးပြု၍ သတ်မှတ်သည်။

အောက်ပါ အဆင့်ဆင့် ဥပမာသည် sklearn module မှ KMeans လုပ်ဆောင်ချက်ကို အသုံးပြု၍ Python တွင် k-means အစုအဝေးကို မည်သို့လုပ်ဆောင်ရမည်ကို ပြသထားသည်။

အဆင့် 1: လိုအပ်သော module များကိုတင်သွင်းပါ။

ဦးစွာ၊ ကျွန်ုပ်တို့သည် k-means အစုအဝေးပြုလုပ်ရန် လိုအပ်မည့် module အားလုံးကို တင်သွင်းပါမည်-

 import pandas as pd
import numpy as np
import matplotlib. pyplot as plt
from sklearn. cluster import KMeans
from sklearn. preprocessing import StandardScaler

အဆင့် 2: DataFrame ကိုဖန်တီးပါ။

ထို့နောက်၊ မတူညီသော ဘတ်စကက်ဘောကစားသမား 20 အတွက် အောက်ပါ variable သုံးခုပါဝင်သော DataFrame တစ်ခုကို ဖန်တီးပါမည်။

  • အမှတ်များ
  • ကူညီကြပါ
  • ခုန်ပေါက်သည်။

အောက်ပါ ကုဒ်သည် ဤပန်ဒါ DataFrame ဖန်တီးပုံကို ပြသသည် ။

 #createDataFrame
df = pd. DataFrame ({' points ': [18, np.nan, 19, 14, 14, 11, 20, 28, 30, 31,
                              35, 33, 29, 25, 25, 27, 29, 30, 19, 23],
                   ' assists ': [3, 3, 4, 5, 4, 7, 8, 7, 6, 9, 12, 14,
                               np.nan, 9, 4, 3, 4, 12, 15, 11],
                   ' rebounds ': [15, 14, 14, 10, 8, 14, 13, 9, 5, 4,
                                11, 6, 5, 5, 3, 8, 12, 7, 6, 5]})

#view first five rows of DataFrame
print ( df.head ())

   points assists rebounds
0 18.0 3.0 15
1 NaN 3.0 14
2 19.0 4.0 14
3 14.0 5.0 10
4 14.0 4.0 8

ဤမက်ထရစ်သုံးခုအပေါ် အခြေခံ၍ အလားတူသရုပ်ဆောင်များကို အုပ်စုဖွဲ့ရန် k-Means ကို အသုံးပြုပါမည်။

အဆင့် 3- DataFrame ကို ရှင်းလင်းပြီး ပြင်ဆင်ပါ။

ထို့နောက် အောက်ပါအဆင့်များကို လုပ်ဆောင်ပါမည်။

  • မည်သည့်ကော်လံတွင်မဆို NaN တန်ဖိုးများပါသည့် အတန်းများကို ချရန် dropna() ကို သုံးပါ။
  • 0 mean နှင့် 1 ၏ စံသွေဖည်မှုရှိရန် variable တစ်ခုစီကို StandardScaler() ကိုသုံးပါ။

အောက်ပါကုဒ်သည် ၎င်းကိုပြုလုပ်နည်းကို ပြသသည်-

 #drop rows with NA values in any columns
df = df. dropna ()

#create scaled DataFrame where each variable has mean of 0 and standard dev of 1
scaled_df = StandardScaler(). fit_transform (df)

#view first five rows of scaled DataFrame
print (scaled_df[:5])

[[-0.86660275 -1.22683918 1.72722524]
 [-0.72081911 -0.96077767 1.45687694]
 [-1.44973731 -0.69471616 0.37548375]
 [-1.44973731 -0.96077767 -0.16521285]
 [-1.88708823 -0.16259314 1.45687694]]

မှတ်ချက် – k-means algorithm နှင့် ကိုက်ညီသောအခါတွင် ကိန်းရှင်တစ်ခုစီသည် တူညီသောအရေးပါမှု ရှိစေရန် ကျွန်ုပ်တို့ အတိုင်းအတာကို အသုံးပြုပါသည်။ မဟုတ်ပါက၊ အကျယ်ပြန့်ဆုံးသော ကိန်းရှင်များသည် သြဇာလွှမ်းမိုးမှု လွန်ကဲနေပေလိမ့်မည်။

အဆင့် 4- အကောင်းဆုံး အစုအဝေးအရေအတွက်ကို ရှာပါ။

Python တွင် k-means အစုအဝေးကို လုပ်ဆောင်ရန်၊ ကျွန်ုပ်တို့သည် sklearn module မှ KMeans လုပ်ဆောင်ချက်ကို အသုံးပြုနိုင်သည်။

ဤလုပ်ဆောင်ချက်သည် အောက်ပါအခြေခံ syntax ကိုအသုံးပြုသည်-

KMeans(init=’random’၊ n_clusters=8၊ n_init=10၊ random_state=None)

ရွှေ-

  • init- က နဦးနည်းပညာကို ထိန်းချုပ်သည်။
  • n_clusters : လေ့လာတွေ့ရှိချက်များကို နေရာချရန် အစုအဝေးအရေအတွက်။
  • n_init : လုပ်ဆောင်ရန် ကနဦးလုပ်ဆောင်မှု အရေအတွက်။ မူရင်းမှာ k-means algorithm ကို 10 ကြိမ် run ပြီး အနိမ့်ဆုံး SSE ဖြင့် ပြန်ပေးခြင်းဖြစ်သည်။
  • Random_state : algorithm ရလဒ်များကို ပြန်ထုတ်ပေးရန် သင်ရွေးချယ်နိုင်သော ကိန်းပြည့်တန်ဖိုးတစ်ခု။

ဤလုပ်ဆောင်ချက်အတွက် အရေးကြီးဆုံး အကြောင်းပြချက်မှာ n_clusters ဖြစ်သည်၊ ၎င်းသည် အစုလိုက်အပြုံလိုက်မည်မျှရှိသည်ကို သတ်မှတ်ပေးသည်။

သို့ရာတွင်၊ အစုအဝေးမည်မျှအကောင်းဆုံးဖြစ်မည်ကို ကျွန်ုပ်တို့ကြိုတင်မသိရသောကြောင့် မော်ဒယ်၏ SSE (နှစ်ထပ်ကိန်းအမှားများ) ကိုပြသသည့် ဂရပ်တစ်ခုဖန်တီးရန် လိုအပ်ပါသည်။

ပုံမှန်အားဖြင့်၊ ကျွန်ုပ်တို့သည် ဤဇာတ်ကွက်အမျိုးအစားကို ဖန်တီးသောအခါ၊ စတုရန်းများပေါင်းလဒ်သည် “ကွေးသည်” သို့မဟုတ် အဆင့်မှစတင်သွားသည့် “ ဒူး” ကို ရှာသည်။ ၎င်းသည် ယေဘုယျအားဖြင့် အကောင်းဆုံးအစုအဝေးများဖြစ်သည်။

အောက်ဖော်ပြပါ ကုဒ်သည် x-axis နှင့် y-axis ပေါ်ရှိ အစုအစည်းများ၏ အရေအတွက်ကို ပြသသည့် ဤကွက်အမျိုးအစားကို ဖန်တီးနည်းကို ပြသသည်-

 #initialize kmeans parameters
kmeans_kwargs = {
" init ": " random ",
" n_init ": 10,
" random_state ": 1,
}

#create list to hold SSE values for each k
sse = []
for k in range(1, 11):
    kmeans = KMeans(n_clusters=k, ** kmeans_kwargs)
    kmeans. fit (scaled_df)
    sse. append (kmeans.inertia_)

#visualize results
plt. plot (range(1, 11), sse)
plt. xticks (range(1, 11))
plt. xlabel (" Number of Clusters ")
plt. ylabel (“ SSE ”)
plt. show () 

ဤဂရပ်တွင်၊ k = 3 ပြွတ် များတွင် အကွေးအကောက် သို့မဟုတ် “ ဒူး” ရှိနေသည်ကို တွေ့ရပါသည်။

ထို့ကြောင့်၊ နောက်တဆင့်တွင် ကျွန်ုပ်တို့၏ k-Means အစုလိုက်ပုံစံကို ကိုက်ညီသောအခါတွင် အစုအဖွဲ့ 3 ခုကို အသုံးပြုပါမည်။

မှတ်ချက် – လက်တွေ့ကမ္ဘာတွင်၊ အသုံးပြုရန် အစုအဝေးအရေအတွက်ကို ရွေးချယ်ရန် ဤကြံစည်မှုနှင့် ဒိုမိန်းကျွမ်းကျင်မှုပေါင်းစပ်မှုကို အသုံးပြုရန် အကြံပြုထားသည်။

အဆင့် 5- Optimal K ဖြင့် K-Means အစုအဝေးကို လုပ်ဆောင်ပါ။

အောက်ပါကုဒ်သည် k -3 အတွက် အကောင်းဆုံးတန်ဖိုးကို အသုံးပြု၍ ဒေတာအတွဲပေါ်တွင် k-ဆိုလိုရင်း အစုအဝေးကို မည်သို့လုပ်ဆောင်ရမည်ကို ပြသသည်-

 #instantiate the k-means class, using optimal number of clusters
kmeans = KMeans(init=" random ", n_clusters= 3 , n_init= 10 , random_state= 1 )

#fit k-means algorithm to data
kmeans. fit (scaled_df)

#view cluster assignments for each observation
kmeans. labels_

array([1, 1, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0]) 

ရလဒ်ဇယားသည် DataFrame ရှိ ကြည့်ရှုမှုတစ်ခုစီအတွက် အစုလိုက်တာဝန်များကို ပြသသည်။

ဤရလဒ်များကို အဓိပ္ပာယ်ဖွင့်ဆိုရန် ပိုမိုလွယ်ကူစေရန်၊ ကစားသမားတစ်ဦးစီ၏ အစုအဝေးတာဝန်ကို ပြသသည့် DataFrame တွင် ကော်လံတစ်ခုကို ထည့်နိုင်သည်-

 #append cluster assingments to original DataFrame
df[' cluster '] = kmeans. labels_

#view updated DataFrame
print (df)

points assists rebounds cluster
0 18.0 3.0 15 1
2 19.0 4.0 14 1
3 14.0 5.0 10 1
4 14.0 4.0 8 1
5 11.0 7.0 14 1
6 20.0 8.0 13 1
7 28.0 7.0 9 2
8 30.0 6.0 5 2
9 31.0 9.0 4 0
10 35.0 12.0 11 0
11 33.0 14.0 6 0
13 25.0 9.0 5 0
14 25.0 4.0 3 2
15 27.0 3.0 8 2
16 29.0 4.0 12 2
17 30.0 12.0 7 0
18 19.0 15.0 6 0
19 23.0 11.0 5 0

အစုအဝေး ကော်လံတွင် ကစားသမားတစ်ဦးစီမှ သတ်မှတ်ထားသော အစုနံပါတ် (0၊ 1 သို့မဟုတ် 2) ပါရှိသည်။

တူညီသော အစုအဝေးမှ ပိုင်ဆိုင်သည့် ကစားသမားများသည် အမှတ်များကူညီပေးခြင်း နှင့် ပြန်လှန်ခြင်း ကော်လံများအတွက် ခန့်မှန်းခြေတူညီသော တန်ဖိုးများရှိသည်။

မှတ်ချက်sklearnKMeans လုပ်ဆောင်ချက်အတွက် စာရွက်စာတမ်းအပြည့်အစုံကို ဤနေရာတွင် ရှာနိုင်သည်။

ထပ်လောင်းအရင်းအမြစ်များ

အောက်ပါ သင်ခန်းစာများသည် Python တွင် အခြားသော အသုံးများသော အလုပ်များကို မည်သို့လုပ်ဆောင်ရမည်ကို ရှင်းပြသည်-

Python တွင် linear regression လုပ်နည်း
Python တွင် Logistic Regression ကို မည်သို့လုပ်ဆောင်မည်နည်း။
Python တွင် K-Fold အပြန်အလှန် validation လုပ်ဆောင်နည်း

မှတ်ချက်တစ်ခုထည့်ပါ။

သင့် email လိပ်စာကို ဖော်ပြမည် မဟုတ်ပါ။ လိုအပ်သော ကွက်လပ်များကို * ဖြင့်မှတ်သားထားသည်