Definitive Guide to Hierarchical Clustering with Python and Scikit-Learn PlatoBlockchain Data Intelligence. Vertical Search. Ai.

پائتھون اور سکِٹ لرن کے ساتھ ہیرارکیکل کلسٹرنگ کے لیے حتمی گائیڈ

تعارف

اس گائیڈ میں، ہم لاگو کرنے پر توجہ مرکوز کریں گے۔ Scikit-Learn کے ساتھ Hierarchical Clustering Algorithm مارکیٹنگ کا مسئلہ حل کرنے کے لیے۔

گائیڈ کو پڑھنے کے بعد، آپ سمجھ جائیں گے:

  • Hierarchical Clustering کا اطلاق کب کرنا ہے۔
  • یہ سمجھنے کے لیے ڈیٹاسیٹ کا تصور کیسے کریں کہ آیا یہ کلسٹرنگ کے لیے موزوں ہے۔
  • ڈیٹا سیٹ کی بنیاد پر فیچرز کو پری پروسیس کرنے اور نئی خصوصیات کو انجینئر کرنے کا طریقہ
  • PCA کا استعمال کرتے ہوئے ڈیٹاسیٹ کی جہت کو کیسے کم کیا جائے۔
  • گروپوں کو الگ کرنے کے لیے ڈینڈروگرام کا استعمال اور پڑھنے کا طریقہ
  • ڈینڈروگرامس اور کلسٹرنگ الگورتھم پر منسلک کرنے کے مختلف طریقے اور فاصلاتی میٹرکس کیا ہیں
  • جمع کرنے والی اور تقسیم کرنے والی کلسٹرنگ کی حکمت عملی کیا ہیں اور وہ کیسے کام کرتی ہیں۔
  • Scikit-Learn کے ساتھ Agglomerative Hierarchical Clustering کو کیسے نافذ کیا جائے۔
  • کلسٹرنگ الگورتھم سے نمٹنے کے دوران اکثر مسائل کیا ہیں اور انہیں کیسے حل کیا جائے۔

نوٹ: آپ اس گائیڈ میں موجود تمام کوڈ پر مشتمل نوٹ بک ڈاؤن لوڈ کر سکتے ہیں۔ یہاں.

پریرتا

ایک ایسے منظر نامے کا تصور کریں جس میں آپ ڈیٹا سائنس ٹیم کا حصہ ہیں جو مارکیٹنگ ڈیپارٹمنٹ کے ساتھ انٹرفیس کرتی ہے۔ مارکیٹنگ کچھ عرصے سے صارفین کی خریداری کا ڈیٹا اکٹھا کر رہی ہے، اور وہ جمع کیے گئے ڈیٹا کی بنیاد پر سمجھنا چاہتے ہیں، اگر گاہکوں کے درمیان مماثلت. یہ مماثلتیں صارفین کو گروپوں میں تقسیم کرتی ہیں اور کسٹمر گروپس کا ہونا مہمات، پروموشنز، تبادلوں، اور بہتر کسٹمر تعلقات بنانے میں مدد کرتا ہے۔

کیا کوئی ایسا طریقہ ہے جس سے آپ یہ تعین کرنے میں مدد کر سکیں کہ کون سے گاہک ملتے جلتے ہیں؟ ان میں سے کتنے ایک ہی گروہ سے تعلق رکھتے ہیں؟ اور کتنے مختلف گروہ ہیں؟

ان سوالات کا جواب دینے کا ایک طریقہ استعمال کرنا ہے۔ clustering کے الگورتھم، جیسے K-Means، DBSCAN، Hierarchical Clustering، وغیرہ۔ عام اصطلاحات میں، کلسٹرنگ الگورتھم ڈیٹا پوائنٹس کے درمیان مماثلت پاتے ہیں اور انہیں گروپ کرتے ہیں۔

اس صورت میں، ہمارا مارکیٹنگ ڈیٹا کافی چھوٹا ہے۔ ہمارے پاس صرف 200 صارفین کے بارے میں معلومات ہیں۔ مارکیٹنگ ٹیم پر غور کرتے ہوئے، یہ ضروری ہے کہ ہم انہیں واضح طور پر یہ سمجھائیں کہ کلسٹرز کی تعداد کی بنیاد پر فیصلے کیسے کیے گئے، اس لیے انہیں یہ سمجھانا کہ الگورتھم دراصل کیسے کام کرتا ہے۔

چونکہ ہمارا ڈیٹا چھوٹا ہے اور وضاحت ایک اہم عنصر ہے۔، ہم فائدہ اٹھا سکتے ہیں۔ درجہ بندی کلسٹرنگ اس مسئلے کو حل کرنے کے لیے۔ اس عمل کو بھی کہا جاتا ہے۔ درجہ بندی کا کلسٹرنگ تجزیہ (HCA).

HCA کا ایک فائدہ یہ ہے کہ یہ قابل تشریح ہے اور چھوٹے ڈیٹا سیٹس پر اچھی طرح کام کرتا ہے۔

اس منظر نامے میں دھیان میں رکھنے والی ایک اور بات یہ ہے کہ HCA ایک ہے۔ غیر زیر نگرانی الگورتھم ڈیٹا کو گروپ کرتے وقت، ہمارے پاس اس بات کی تصدیق کرنے کا کوئی طریقہ نہیں ہوگا کہ ہم صحیح طریقے سے شناخت کر رہے ہیں کہ صارف کا تعلق کسی مخصوص گروپ سے ہے (ہم گروپس کو نہیں جانتے)۔ ہمارے نتائج کا موازنہ کرنے کے لیے ہمارے لیے کوئی لیبل نہیں ہیں۔ اگر ہم نے گروپوں کی صحیح شناخت کی ہے، تو اس کی تصدیق بعد میں مارکیٹنگ ڈیپارٹمنٹ سے روزانہ کی بنیاد پر کی جائے گی (جیسا کہ میٹرکس جیسے ROI، تبادلوں کی شرح وغیرہ سے ماپا جاتا ہے)۔

اب جب کہ ہم اس مسئلے کو سمجھ گئے ہیں جسے ہم حل کرنے کی کوشش کر رہے ہیں اور اسے کیسے حل کرنا ہے، ہم اپنے ڈیٹا پر ایک نظر ڈالنا شروع کر سکتے ہیں!

مختصر تحقیقی ڈیٹا کا تجزیہ

نوٹ: آپ اس گائیڈ میں استعمال کردہ ڈیٹا سیٹ ڈاؤن لوڈ کر سکتے ہیں۔ یہاں.

ڈیٹاسیٹ ڈاؤن لوڈ کرنے کے بعد، نوٹس کریں کہ یہ a CSV (کوما سے الگ کردہ اقدار) فائل کو بلایا shopping-data.csv. ڈیٹا کو تلاش کرنا اور اس میں ہیرا پھیری کرنا آسان بنانے کے لیے، ہم اسے a میں لوڈ کریں گے۔ DataFrame پانڈوں کا استعمال کرتے ہوئے:

import pandas as pd


path_to_file = 'home/projects/datasets/shopping-data.csv'
customer_data = pd.read_csv(path_to_file)

مارکیٹنگ نے کہا کہ اس نے 200 صارفین کے ریکارڈ جمع کیے ہیں۔ ہم چیک کر سکتے ہیں کہ آیا ڈاؤن لوڈ کردہ ڈیٹا 200 قطاروں کے ساتھ مکمل ہے۔ shape وصف. یہ ہمیں بتائے گا کہ ہمارے پاس بالترتیب کتنی قطاریں اور کالم ہیں:

customer_data.shape

اس کے نتائج:

(200, 5)

زبردست! ہمارا ڈیٹا 200 قطاروں کے ساتھ مکمل ہے۔ (کلائنٹ کے ریکارڈ) اور ہمارے پاس 5 کالم بھی ہیں۔ (خصوصیات). یہ دیکھنے کے لیے کہ مارکیٹنگ ڈیپارٹمنٹ نے صارفین سے کن خصوصیات کو جمع کیا ہے، ہم کالم کے نام کے ساتھ دیکھ سکتے ہیں۔ columns وصف. ایسا کرنے کے لیے، عمل کریں:

customer_data.columns

اوپر والا اسکرپٹ واپس آتا ہے:

Index(['CustomerID', 'Genre', 'Age', 'Annual Income (k$)',
       'Spending Score (1-100)'],
      dtype='object')

یہاں، ہم دیکھتے ہیں کہ مارکیٹنگ نے ایک پیدا کیا ہے۔ CustomerID، جمع کیا Genre, Age, Annual Income (ہزاروں ڈالر میں)، اور ایک Spending Score 1 گاہکوں میں سے ہر ایک کے لئے 100 سے 200 تک جا رہا ہے۔ جب ان سے وضاحت طلب کی گئی تو انہوں نے کہا کہ میں اقدار Spending Score کالم اس بات کی نشاندہی کرتا ہے کہ ایک شخص مال میں 1 سے 100 کے پیمانے پر کتنی بار رقم خرچ کرتا ہے۔ دوسرے لفظوں میں، اگر کسی گاہک کا اسکور 0 ہے، تو یہ شخص کبھی پیسہ خرچ نہیں کرتا، اور اگر اسکور 100 ہے، تو ہم نے ابھی دیکھا ہے۔ سب سے زیادہ خرچ کرنے والا.

آئیے اپنے ڈیٹا سیٹ میں صارفین کی خرچ کرنے کی عادات کا معائنہ کرنے کے لیے اس سکور کی تقسیم پر ایک سرسری نظر ڈالتے ہیں۔ وہیں پانڈا hist() طریقہ مدد میں آتا ہے:

customer_data['Spending Score (1-100)'].hist()

IMG

ہسٹگرام کو دیکھ کر ہم دیکھتے ہیں کہ 35 سے زیادہ صارفین کے درمیان اسکور ہیں۔ 40 اور 60، پھر 25 سے کم کے درمیان اسکور ہیں۔ 70 اور 80. تو ہمارے زیادہ تر صارفین ہیں۔ متوازن خرچ کرنے والے، اس کے بعد اعتدال سے زیادہ خرچ کرنے والے۔ ہم یہ بھی دیکھ سکتے ہیں کہ اس کے بعد ایک لائن ہے۔ 0، تقسیم کے بائیں طرف، اور 100 سے پہلے ایک اور لائن، تقسیم کے دائیں طرف۔ ان خالی جگہوں کا شاید یہ مطلب ہے کہ تقسیم میں غیر خرچ کرنے والے شامل نہیں ہیں، جن کا اسکور ہوگا 0، اور یہ کہ اسکور کے ساتھ کوئی زیادہ خرچ کرنے والے بھی نہیں ہیں۔ 100.

اس بات کی تصدیق کرنے کے لیے کہ آیا یہ سچ ہے، ہم تقسیم کی کم از کم اور زیادہ سے زیادہ قدروں کو دیکھ سکتے ہیں۔ ان اقدار کو وضاحتی اعدادوشمار کے حصے کے طور پر آسانی سے پایا جا سکتا ہے، لہذا ہم استعمال کر سکتے ہیں۔ describe() دیگر عددی اقدار کی تقسیم کی تفہیم حاصل کرنے کا طریقہ:


customer_data.describe().transpose()

یہ ہمیں ایک ٹیبل دے گا جہاں سے ہم اپنے ڈیٹاسیٹ کی دیگر اقدار کی تقسیم پڑھ سکتے ہیں:

 						count 	mean 	std 		min 	25% 	50% 	75% 	max
CustomerID 				200.0 	100.50 	57.879185 	1.0 	50.75 	100.5 	150.25 	200.0
Age 					200.0 	38.85 	13.969007 	18.0 	28.75 	36.0 	49.00 	70.0
Annual Income (k$) 		200.0 	60.56 	26.264721 	15.0 	41.50 	61.5 	78.00 	137.0
Spending Score (1-100) 	200.0 	50.20 	25.823522 	1.0 	34.75 	50.0 	73.00 	99.0

ہمارے مفروضے کی تصدیق ہوتی ہے۔ دی min کی قدر Spending Score is 1 اور زیادہ سے زیادہ ہے 99. تو ہمارے پاس نہیں ہے۔ 0 or 100 اسکور خرچ کرنے والے آئیے پھر ٹرانسپوزڈ کے دوسرے کالموں پر ایک نظر ڈالتے ہیں۔ describe ٹیبل. کو دیکھتے وقت mean اور std کالم، ہم اس کے لیے دیکھ سکتے ہیں۔ Age la mean is 38.85 اور std تقریبا ہے 13.97. کے لیے بھی ایسا ہی ہوتا ہے۔ Annual Incomeایک ساتھ mean of 60.56 اور std 26.26، کے لئے Spending Score ایک mean of 50 اور std of 25.82. تمام خصوصیات کے لیے، mean معیاری انحراف سے بہت دور ہے، جو اشارہ کرتا ہے۔ ہمارے ڈیٹا میں بہت زیادہ تغیر ہے۔.

بہتر طور پر سمجھنے کے لیے کہ ہمارا ڈیٹا کس طرح مختلف ہوتا ہے، آئیے پلاٹ کرتے ہیں۔ Annual Income تقسیم:

customer_data['Annual Income (k$)'].hist()

جو ہمیں دے گا:

IMG

ہسٹوگرام میں نوٹ کریں کہ ہمارا زیادہ تر ڈیٹا، 35 سے زیادہ صارفین، نمبر کے قریب مرکوز ہے۔ 60، ہم پر mean, in the horizontal axis. But what happens as we move towards the ends of the distribution? When going towards the left, from the $60.560 mean, the next value we will encounter is $34.300 – the mean ($60.560) minus the standard variation ($26.260). If we go further away to the left of our data distribution a similar rule applies, we subtract the standard variation ($26.260) from the current value ($34.300). Therefore, we’ll encounter a value of $8.040. Notice how our data went from $60k to $8k quickly. It is “jumping” $26.260 each time – varying a lot, and that is why we have such high variability.

IMG

کلسٹرنگ تجزیہ میں اعداد و شمار کا تغیر اور سائز اہم ہے کیونکہ زیادہ تر کلسٹرنگ الگورتھم کے فاصلے کی پیمائش ڈیٹا کی شدت کے لیے حساس ہوتی ہے۔ سائز میں فرق اعداد و شمار کی اصل گروپ بندی کو مسخ کرکے، ایک نقطہ کو دوسرے سے قریب یا زیادہ دور دکھا کر کلسٹرنگ کے نتائج کو تبدیل کر سکتا ہے۔

اب تک، ہم نے اپنے ڈیٹا کی شکل، اس کی کچھ تقسیم، اور وضاحتی اعدادوشمار دیکھے ہیں۔ پانڈوں کے ساتھ، ہم اپنے ڈیٹا کی اقسام کی فہرست بھی بنا سکتے ہیں اور دیکھ سکتے ہیں کہ آیا ہماری تمام 200 قطاریں بھری ہوئی ہیں یا کچھ null اقدار:

customer_data.info()

اس کے نتائج:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 200 entries, 0 to 199
Data columns (total 5 columns):
 #   Column                  Non-Null Count  Dtype 
---  ------                  --------------  ----- 
 0   CustomerID              200 non-null    int64 
 1   Genre                   200 non-null    object
 2   Age                     200 non-null    int64 
 3   Annual Income (k$)      200 non-null    int64 
 4   Spending Score (1-100)  200 non-null    int64 
dtypes: int64(4), object(1)
memory usage: 7.9+ KB

یہاں، ہم دیکھ سکتے ہیں کہ وہاں نہیں ہیں۔ null اعداد و شمار میں اقدار اور یہ کہ ہمارے پاس صرف ایک واضح کالم ہے - Genre. اس مرحلے پر، یہ ضروری ہے کہ ہم ذہن میں رکھیں کہ کلسٹرنگ ماڈل میں کن خصوصیات کو شامل کرنا دلچسپ لگتا ہے۔ اگر ہم اپنے ماڈل میں جنر کالم شامل کرنا چاہتے ہیں، تو ہمیں اس کی اقدار کو تبدیل کرنے کی ضرورت ہوگی۔ دو ٹوک کرنے کے لئے عدلیہ.

آئیے کہ کس طرح Genre ہمارے ڈیٹا کی پہلی 5 اقدار پر فوری جھانک کر بھرا جاتا ہے:

customer_data.head() 

اس کے نتائج:

    CustomerID 	Genre 	Age 	Annual Income (k$) 	Spending Score (1-100)
0 	1 			Male 	19 		15 					39
1 	2 			Male 	21 		15 					81
2 	3 			Female 	20 		16 					6
3 	4 			Female 	23 		16 					77
4 	5 			Female 	31 		17 					40

ایسا لگتا ہے کہ اس کے پاس صرف ہے۔ Female اور Male اقسام. ہم اس کے ساتھ اس کی منفرد اقدار پر ایک نظر ڈال کر اس کا یقین کر سکتے ہیں۔ unique:

customer_data['Genre'].unique()

یہ ہمارے مفروضے کی تصدیق کرتا ہے:

array(['Male', 'Female'], dtype=object)

اب تک، ہم جانتے ہیں کہ ہمارے پاس صرف دو انواع ہیں، اگر ہم اس خصوصیت کو اپنے ماڈل پر استعمال کرنے کا ارادہ رکھتے ہیں، Male میں تبدیل کیا جا سکتا ہے۔ 0 اور Female کرنے کے لئے 1. انواع کے درمیان تناسب کو چیک کرنا بھی ضروری ہے، یہ دیکھنے کے لیے کہ آیا وہ متوازن ہیں۔ ہم اس کے ساتھ کر سکتے ہیں۔ value_counts() طریقہ اور اس کی دلیل normalize=True کے درمیان فیصد دکھانے کے لیے Male اور Female:

customer_data['Genre'].value_counts(normalize=True)

یہ نتائج:

Female    0.56
Male      0.44
Name: Genre, dtype: float64

ہمارے ڈیٹاسیٹ میں 56% خواتین اور 44% مرد ہیں۔ ان کے درمیان فرق صرف 16% ہے، اور ہمارا ڈیٹا 50/50 نہیں بلکہ ہے۔ کافی متوازن کسی پریشانی کا سبب نہ بنے۔ اگر نتائج 70/30، 60/40 تھے، تو اس تناسب کو مزید متوازن بنانے کے لیے یا تو مزید ڈیٹا اکٹھا کرنے یا ڈیٹا بڑھانے کی کسی قسم کی تکنیک کو استعمال کرنے کی ضرورت پڑ سکتی تھی۔

اب تک، تمام خصوصیات لیکن Age، مختصر طور پر دریافت کیا گیا ہے۔ کس فکر میں Ageصارفین کو ان کی عمر کے گروپوں کی بنیاد پر تقسیم کرنے کے قابل ہونے کے لیے اسے ڈبوں میں تقسیم کرنا عموماً دلچسپ ہوتا ہے۔ اگر ہم ایسا کرتے ہیں، تو ہمیں اپنے ماڈل میں شامل کرنے سے پہلے عمر کے زمروں کو ایک نمبر میں تبدیل کرنے کی ضرورت ہوگی۔ اس طرح، 15-20 سال کے زمرے کو استعمال کرنے کے بجائے، ہم شمار کریں گے کہ اس میں کتنے گاہک ہیں۔ 15-20 زمرہ، اور یہ ایک نئے کالم میں ایک نمبر ہوگا۔ 15-20.

مشورہ: In this guide, we present only brief exploratory data analysis. But you can go further and you should go further. You can see if there are income differences and scoring differences based on genre and age. This not only enriches the analysis but leads to better model results. To go deeper into Exploratory Data Analysis, check out the EDA باب "ہینڈ آن ہاؤس پرائس کی پیشن گوئی - Python میں مشین لرننگ" گائیڈڈ پروجیکٹ۔

اس بات پر قیاس کرنے کے بعد کہ دونوں واضح – یا واضح ہونے کے ساتھ کیا کیا جا سکتا ہے – Genre اور Age کالم، آئیے اس بات کا اطلاق کرتے ہیں جس پر بات کی گئی ہے۔

انکوڈنگ متغیرات اور فیچر انجینئرنگ

آئیے تقسیم کرکے شروع کریں۔ Age گروپوں میں جو 10 میں مختلف ہوتے ہیں، تاکہ ہمارے پاس 20-30، 30-40، 40-50، وغیرہ ہوں۔ چونکہ ہمارا سب سے کم عمر صارف 15 سال کا ہے، اس لیے ہم 15 سے شروع ہو کر 70 پر ختم ہو سکتے ہیں، جو کہ ڈیٹا میں سب سے پرانے صارف کی عمر ہے۔ 15 سے شروع، اور 70 پر ختم ہونے والے، ہمارے پاس 15-20، 20-30، 30-40، 40-50، 50-60، اور 60-70 وقفے ہوں گے۔

گروپ یا بن Age ان وقفوں میں اقدار، ہم پانڈا استعمال کر سکتے ہیں۔ cut() انہیں ڈبوں میں کاٹنے اور پھر ڈبوں کو ایک نئے میں تفویض کرنے کا طریقہ Age Groups کالم:

intervals = [15, 20, 30, 40, 50, 60, 70]
col = customer_data['Age']
customer_data['Age Groups'] = pd.cut(x=col, bins=intervals)


customer_data['Age Groups'] 

اس کے نتائج:

0      (15, 20]
1      (20, 30]
2      (15, 20]
3      (20, 30]
4      (30, 40]
         ...   
195    (30, 40]
196    (40, 50]
197    (30, 40]
198    (30, 40]
199    (20, 30]
Name: Age Groups, Length: 200, dtype: category
Categories (6, interval[int64, right]): [(15, 20] < (20, 30] < (30, 40] < (40, 50] < (50, 60] < (60, 70]]

نوٹ کریں کہ کالم کی قدروں کو دیکھتے وقت، ایک لائن بھی موجود ہے جو بتاتی ہے کہ ہمارے پاس 6 زمرے ہیں اور تمام بائنڈ ڈیٹا کے وقفے دکھاتے ہیں۔ اس طرح، ہم نے اپنے سابقہ ​​عددی ڈیٹا کی درجہ بندی کی ہے اور ایک نیا بنایا ہے۔ Age Groups کو نمایاں کریں.

اور ہمارے ہر زمرے میں کتنے گاہک ہیں؟ ہم کالم کو گروپ کرکے اور اس کے ساتھ قدروں کو گن کر جلدی جان سکتے ہیں۔ groupby() اور count():

customer_data.groupby('Age Groups')['Age Groups'].count()

اس کے نتائج:

Age Groups
(15, 20]    17
(20, 30]    45
(30, 40]    60
(40, 50]    38
(50, 60]    23
(60, 70]    17
Name: Age Groups, dtype: int64

یہ معلوم کرنا آسان ہے کہ زیادہ تر صارفین کی عمریں 30 سے ​​40 سال کے درمیان ہیں، اس کے بعد 20 سے 30 کے درمیان اور پھر 40 سے 50 کے درمیان کے صارفین ہیں۔ یہ مارکیٹنگ ڈیپارٹمنٹ کے لیے بھی اچھی معلومات ہے۔

اس وقت، ہمارے پاس دو واضح متغیرات ہیں، Age اور Genre، جسے ہمیں اپنے ماڈل میں استعمال کرنے کے قابل ہونے کے لیے اعداد میں تبدیل کرنے کی ضرورت ہے۔ اس تبدیلی کو کرنے کے بہت سے مختلف طریقے ہیں – ہم پانڈا استعمال کریں گے۔ get_dummies() وہ طریقہ جو ہر وقفہ اور صنف کے لیے ایک نیا کالم بناتا ہے اور پھر اس کی اقدار کو 0s اور 1s سے بھرتا ہے- اس قسم کے آپریشن کو کہا جاتا ہے۔ ایک گرم انکوڈنگ. آئیے دیکھتے ہیں کہ یہ کیسا لگتا ہے:


customer_data_oh = pd.get_dummies(customer_data)

customer_data_oh 

یہ ہمیں نتیجہ خیز جدول کا پیش نظارہ دے گا:

IMG

آؤٹ پٹ کے ساتھ، یہ دیکھنے کے لئے آسان ہے کہ کالم Genre کالموں میں تقسیم کیا گیا تھا - Genre_Female اور Genre_Male. جب گاہک عورت ہو، Genre_Female مساوی ہے 1، اور جب گاہک مرد ہوتا ہے تو یہ برابر ہوتا ہے۔ 0.

اس کے علاوہ، Age Groups کالم کو 6 کالموں میں تقسیم کیا گیا تھا، ہر وقفہ کے لیے ایک، جیسے Age Groups_(15, 20], Age Groups_(20, 30]، اور اسی طرح. اسی طرح جیسے Genre, جب گاہک کی عمر 18 سال ہے، Age Groups_(15, 20] قدر ہے 1 اور دیگر تمام کالموں کی قدر ہے۔ 0.

۔ فائدہ ایک گرم انکوڈنگ کالم کی اقدار کی نمائندگی کرنے میں سادگی ہے، یہ سمجھنا سیدھا ہے کہ کیا ہو رہا ہے - جبکہ نقصان یہ ہے کہ اب ہم نے 8 اضافی کالم بنائے ہیں، جو کالم ہمارے پاس پہلے سے موجود تھے۔

انتباہ: اگر آپ کے پاس ڈیٹا سیٹ ہے جس میں ایک گرم انکوڈ شدہ کالموں کی تعداد قطاروں کی تعداد سے زیادہ ہے، تو بہتر ہے کہ ڈیٹا کی جہت کے مسائل سے بچنے کے لیے انکوڈنگ کا دوسرا طریقہ استعمال کریں۔

ون-ہاٹ انکوڈنگ ہمارے ڈیٹا میں 0s کا اضافہ بھی کرتی ہے، جس سے یہ زیادہ ویرل ہو جاتا ہے، جو کچھ الگورتھم کے لیے ایک مسئلہ ہو سکتا ہے جو ڈیٹا اسپارسٹی کے لیے حساس ہوتے ہیں۔

ہماری کلسٹرنگ کی ضروریات کے لیے، ایسا لگتا ہے کہ ایک گرم انکوڈنگ کام کرتی ہے۔ لیکن ہم یہ دیکھنے کے لیے ڈیٹا کی منصوبہ بندی کر سکتے ہیں کہ آیا واقعی ہمارے لیے کلسٹر کرنے کے لیے الگ الگ گروپس موجود ہیں۔

بنیادی پلاٹنگ اور جہت میں کمی

ہمارے ڈیٹاسیٹ میں 11 کالم ہیں، اور کچھ ایسے طریقے ہیں جن سے ہم اس ڈیٹا کو دیکھ سکتے ہیں۔ پہلا اسے 10 جہتوں میں پلاٹ کرکے ہے (اس کے ساتھ اچھی قسمت)۔ دس کیونکہ Customer_ID کالم پر غور نہیں کیا جا رہا ہے۔ دوسرا ہماری ابتدائی عددی خصوصیات کی منصوبہ بندی کرنا ہے، اور تیسرا اپنی 10 خصوصیات کو 2 میں تبدیل کرنا ہے – اس لیے جہتی کمی کو انجام دینا۔

ڈیٹا کے ہر جوڑے کو پلاٹ کرنا

چونکہ 10 جہتوں کا منصوبہ بنانا قدرے ناممکن ہے، اس لیے ہم دوسرے نقطہ نظر کے ساتھ جانے کا انتخاب کریں گے - ہم اپنی ابتدائی خصوصیات کو پلاٹ کریں گے۔ ہم اپنے کلسٹرنگ تجزیہ کے لیے ان میں سے دو کا انتخاب کر سکتے ہیں۔ ایک طریقہ جس سے ہم اپنے تمام ڈیٹا جوڑوں کو ملا کر دیکھ سکتے ہیں وہ ہے Seaborn کے ساتھ pairplot():

import seaborn as sns


customer_data = customer_data.drop('CustomerID', axis=1)

sns.pairplot(customer_data)

جو دکھاتا ہے:

IMG

ایک نظر میں، ہم بکھرے ہوئے پلاٹوں کو دیکھ سکتے ہیں جو بظاہر ڈیٹا کے گروپس ہیں۔ ایک جو دلچسپ لگتا ہے وہ ہے سکیٹر پلاٹ جو یکجا کرتا ہے۔ Annual Income اور Spending Score. نوٹ کریں کہ دیگر متغیر سکیٹر پلاٹس کے درمیان کوئی واضح علیحدگی نہیں ہے۔ زیادہ سے زیادہ، ہم یہ بتا سکتے ہیں کہ پوائنٹس کے دو الگ الگ ارتکاز ہیں۔ Spending Score vs Age scatterplot

پر مشتمل دونوں scatterplots Annual Income اور Spending Score بنیادی طور پر ایک جیسے ہیں. ہم اسے دو بار دیکھ سکتے ہیں کیونکہ x اور y محور کا تبادلہ ہوا تھا۔ ان میں سے کسی پر ایک نظر ڈالنے سے، ہم دیکھ سکتے ہیں کہ پانچ مختلف گروہ کیا دکھائی دیتے ہیں۔ آئیے سیبورن کے ساتھ صرف ان دو خصوصیات کو پلاٹ کریں۔ scatterplot() قریب سے دیکھنے کے لیے:

sns.scatterplot(x=customer_data['Annual Income (k$)'],
                y=customer_data['Spending Score (1-100)'])

IMG

قریب سے دیکھ کر، ہم یقینی طور پر ڈیٹا کے 5 مختلف گروپس میں فرق کر سکتے ہیں۔ ایسا لگتا ہے کہ ہمارے صارفین کو اس بنیاد پر کلسٹر کیا جا سکتا ہے کہ وہ ایک سال میں کتنا کماتے ہیں اور کتنا خرچ کرتے ہیں۔ یہ ہمارے تجزیہ میں ایک اور متعلقہ نکتہ ہے۔ یہ ضروری ہے کہ ہم اپنے کلائنٹس کو گروپ کرنے کے لیے صرف دو خصوصیات کو مدنظر رکھ رہے ہیں۔ ان کے بارے میں ہمارے پاس کوئی اور معلومات مساوات میں داخل نہیں ہو رہی ہیں۔ اس سے تجزیہ کا مطلب ہوتا ہے – اگر ہم جانتے ہیں کہ ایک کلائنٹ کتنا کماتا اور خرچ کرتا ہے، تو ہم آسانی سے اپنی مطلوبہ مماثلتیں تلاش کر سکتے ہیں۔

IMG

یہ بہت اچھا ہے! اب تک، ہمارے پاس اپنا ماڈل بنانے کے لیے پہلے سے ہی دو متغیر ہیں۔ اس کی نمائندگی کرنے کے علاوہ، یہ ماڈل کو آسان، پارسائی، اور زیادہ قابل وضاحت بھی بناتا ہے۔

بہترین طرز عمل، صنعت کے لیے منظور شدہ معیارات، اور چیٹ شیٹ کے ساتھ Git سیکھنے کے لیے ہمارے ہینڈ آن، عملی گائیڈ کو دیکھیں۔ گوگلنگ گٹ کمانڈز کو روکیں اور اصل میں سیکھ یہ!

نوٹ: ڈیٹا سائنس عام طور پر ممکن حد تک آسان طریقوں کی حمایت کرتا ہے۔ نہ صرف اس لیے کہ کاروبار کے لیے وضاحت کرنا آسان ہے، بلکہ اس لیے بھی کہ یہ زیادہ سیدھا ہے – 2 خصوصیات اور قابل وضاحت ماڈل کے ساتھ، یہ واضح ہے کہ ماڈل کیا کر رہا ہے اور کیسے کام کر رہا ہے۔

PCA استعمال کرنے کے بعد ڈیٹا پلاٹ کرنا

ایسا لگتا ہے کہ ہمارا دوسرا نقطہ نظر شاید بہترین ہے، لیکن آئیے اپنے تیسرے نقطہ نظر پر بھی ایک نظر ڈالیں۔ یہ اس وقت کارآمد ہو سکتا ہے جب ہم ڈیٹا کو پلاٹ نہیں کر سکتے کیونکہ اس میں بہت زیادہ جہتیں ہیں، یا جب ڈیٹا کا کوئی ارتکاز یا گروپوں میں واضح علیحدگی نہ ہو۔ جب وہ حالات پیش آتے ہیں، تو یہ تجویز کیا جاتا ہے کہ ڈیٹا کے طول و عرض کو ایک طریقہ کار سے کم کرنے کی کوشش کریں۔ پرنسپل اجزاء کا تجزیہ (پی سی اے).

نوٹ: زیادہ تر لوگ تصور سے پہلے جہتی کمی کے لیے PCA استعمال کرتے ہیں۔ اور بھی طریقے ہیں جو کلسٹرنگ سے پہلے ڈیٹا ویژولائزیشن میں مدد کرتے ہیں، جیسے شور کے ساتھ ایپلی کیشنز کی کثافت پر مبنی مقامی کلسٹرنگ (DBSCAN) اور سیلف آرگنائزنگ میپس (SOM) کلسٹرنگ دونوں کلسٹرنگ الگورتھم ہیں، لیکن ڈیٹا ویژولائزیشن کے لیے بھی استعمال کیے جا سکتے ہیں۔ چونکہ کلسٹرنگ تجزیہ کا کوئی سنہری معیار نہیں ہے، اس لیے مختلف تصورات اور مختلف الگورتھم کا موازنہ کرنا ضروری ہے۔

PCA زیادہ سے زیادہ معلومات کو محفوظ رکھنے کی کوشش کرتے ہوئے ہمارے ڈیٹا کے طول و عرض کو کم کر دے گا۔ آئیے پہلے اس بارے میں اندازہ لگائیں کہ PCA کیسے کام کرتا ہے، اور پھر ہم منتخب کر سکتے ہیں کہ ہم اپنے ڈیٹا کو کتنے ڈیٹا ڈائمینشنز تک کم کریں گے۔

خصوصیات کے ہر جوڑے کے لیے، PCA دیکھتا ہے کہ آیا ایک متغیر کی بڑی قدریں دوسرے متغیر کی بڑی قدروں سے مطابقت رکھتی ہیں، اور یہ کم قدروں کے لیے بھی ایسا ہی کرتا ہے۔ لہذا، یہ بنیادی طور پر حساب کرتا ہے کہ خصوصیت کی قدریں ایک دوسرے سے کتنی مختلف ہوتی ہیں – ہم اسے کہتے ہیں۔ ہم آہنگی. اس کے بعد ان نتائج کو ایک میٹرکس میں ترتیب دیا جاتا ہے، ایک حاصل کرتے ہوئے ہم آہنگی میٹرکس.

After getting the covariance matrix, PCA tries to find a linear combination of features that best explains it – it fits linear models until it identifies the one that explains the زیادہ سے زیادہ فرق کی مقدار.

نوٹ: PCA ایک لکیری تبدیلی ہے، اور لکیریٹی ڈیٹا کے پیمانے پر حساس ہے۔ لہذا، PCA بہترین کام کرتا ہے جب تمام ڈیٹا کی قدریں ایک ہی پیمانے پر ہوں۔ یہ کالم کو گھٹا کر کیا جا سکتا ہے۔ مطلب اس کی اقدار سے اور نتیجہ کو اس کے معیاری انحراف سے تقسیم کرنا۔ اسے کہتے ہیں۔ ڈیٹا مانکیکرن. پی سی اے استعمال کرنے سے پہلے، یقینی بنائیں کہ ڈیٹا چھوٹا ہے! اگر آپ کو یقین نہیں ہے کہ کیسے، ہمارا پڑھیں "Python میں مشین لرننگ کے لیے Scikit-Learn کے ساتھ فیچر اسکیلنگ ڈیٹا"!

بہترین لائن (لکیری امتزاج) ملنے کے ساتھ، PCA اپنے محور کی سمت حاصل کرتا ہے، جسے کہتے ہیں eigenvectors، اور اس کے لکیری گتانک، eigenvalues. eigenvectors اور eigenvalues ​​کا مجموعہ - یا محور کی سمتیں اور coefficients - یہ ہیں پرنسپل اجزاء۔ of PCA. And that is when we can choose our number of dimensions based on the explained variance of each feature, by understanding which principal components we want to keep or discard based on how much variance they explain.

پرنسپل اجزاء حاصل کرنے کے بعد، PCA eigenvectors کو خصوصیات کا ایک ویکٹر بنانے کے لیے استعمال کرتا ہے جو ڈیٹا کو اصل محور سے لے کر پرنسپل اجزاء کے ذریعے دکھائے جانے والے ڈیٹا کو دوبارہ ترتیب دیتا ہے۔

نوٹ: یہاں ایک اہم تفصیل جس پر غور کرنا ہے وہ یہ ہے کہ، اپنی لکیری نوعیت کی وجہ سے، PCA زیادہ تر وضاحت شدہ تغیرات کو پہلے بنیادی اجزاء میں مرکوز کرے گا۔ لہذا، جب وضاحت کی گئی تبدیلی کو دیکھیں تو، عام طور پر ہمارے پہلے دو اجزاء کافی ہوں گے۔ لیکن کچھ معاملات میں یہ گمراہ کن ہو سکتا ہے – اس لیے کلسٹرنگ کرتے وقت مختلف پلاٹوں اور الگورتھم کا موازنہ کرتے رہنے کی کوشش کریں کہ آیا وہ ایک جیسے نتائج رکھتے ہیں۔

پی سی اے کو لاگو کرنے سے پہلے، ہمیں ان کے درمیان انتخاب کرنا ہوگا۔ Age کالم یا Age Groups ہمارے پہلے ایک گرم انکوڈ شدہ ڈیٹا میں کالم۔ چونکہ دونوں کالم ایک ہی معلومات کی نمائندگی کرتے ہیں، اس لیے اسے دو بار متعارف کروانا ہمارے ڈیٹا کے تغیر کو متاثر کرتا ہے۔ اگر Age Groups کالم منتخب کیا جاتا ہے، صرف ہٹا دیں Age پانڈوں کا استعمال کرتے ہوئے کالم drop() طریقہ اور اسے دوبارہ تفویض کریں۔ customer_data_oh متغیر:

customer_data_oh = customer_data_oh.drop(['Age'], axis=1)
customer_data_oh.shape 

Now our data has 10 columns, which means we can obtain one principal component by column and choose how many of them we will use by measuring how much introducing one new dimension explains more of our data variance.

آئیے ایسا کرتے ہیں Scikit-Learn کے ساتھ PCA. ہم ہر طول و عرض کے بیان کردہ تغیر کا حساب لگائیں گے، جس کے ذریعے دی گئی ہے۔ explained_variance_ratio_ ، اور پھر ان کی مجموعی رقم کے ساتھ دیکھیں cumsum() :

from sklearn.decomposition import PCA

pca = PCA(n_components=10)
pca.fit_transform(customer_data_oh)
pca.explained_variance_ratio_.cumsum()

ہماری مجموعی وضاحت کردہ تغیرات یہ ہیں:

array([0.509337  , 0.99909504, 0.99946364, 0.99965506, 0.99977937,
       0.99986848, 0.99993716, 1.        , 1.        , 1.        ])

ہم دیکھ سکتے ہیں کہ پہلی جہت 50% ڈیٹا کی وضاحت کرتی ہے، اور جب دوسری جہت کو ملایا جائے تو وہ 99% فیصد کی وضاحت کرتا ہے۔ اس کا مطلب ہے کہ پہلے 2 جہتیں پہلے ہی ہمارے 99% ڈیٹا کی وضاحت کرتی ہیں۔ لہذا ہم 2 اجزاء کے ساتھ ایک PCA لاگو کرسکتے ہیں، اپنے اصل اجزاء حاصل کرسکتے ہیں اور انہیں پلاٹ کرسکتے ہیں:

from sklearn.decomposition import PCA

pca = PCA(n_components=2)
pcs = pca.fit_transform(customer_data_oh)

pc1_values = pcs[:,0]
pc2_values = pcs[:,1]
sns.scatterplot(x=pc1_values, y=pc2_values)

IMG

پی سی اے کے بعد کا ڈیٹا پلاٹ اس پلاٹ سے بہت ملتا جلتا ہے جو پی سی اے کے بغیر ڈیٹا کے صرف دو کالم استعمال کر رہا ہے۔ غور کریں کہ جو پوائنٹس گروپس بنا رہے ہیں وہ قریب ہیں، اور PCA کے بعد پہلے کے مقابلے میں تھوڑا زیادہ مرتکز ہیں۔

IMG

ڈینڈروگرامس کے ساتھ درجہ بندی کی ساخت کا تصور کرنا

اب تک، ہم نے ڈیٹا کو دریافت کیا ہے، ایک گرم انکوڈ شدہ زمرہ دار کالم، فیصلہ کیا ہے کہ کون سے کالم کلسٹرنگ کے لیے موزوں ہیں، اور ڈیٹا کی جہت کو کم کیا ہے۔ پلاٹ اس بات کی نشاندہی کرتے ہیں کہ ہمارے ڈیٹا میں ہمارے پاس 5 کلسٹرز ہیں، لیکن ہمارے پوائنٹس کے درمیان تعلقات کو تصور کرنے اور کلسٹرز کی تعداد کا تعین کرنے میں مدد کرنے کا ایک اور طریقہ بھی ہے - ڈینڈرگرام (عام طور پر ڈینڈوگرام کے طور پر غلط ہجے)۔ ڈینڈرو کا مطلب ہے کہ درخت لاطینی میں

۔ ڈینڈرگرام ڈیٹاسیٹ میں پوائنٹس کو جوڑنے کا نتیجہ ہے۔ یہ درجہ بندی کے جھرمٹ کے عمل کی بصری نمائندگی ہے۔ اور درجہ بندی کے کلسٹرنگ کا عمل کیسے کام کرتا ہے؟ ٹھیک ہے… یہ منحصر ہے – شاید ایک ایسا جواب جو آپ نے پہلے ہی ڈیٹا سائنس میں بہت سنا ہے۔

ہیرارکیکل کلسٹرنگ کو سمجھنا

جب درجہ بندی کلسٹرنگ الگورتھم (HCA) پوائنٹس کو جوڑنا اور کلسٹرز تلاش کرنا شروع کر دیتا ہے، یہ پہلے پوائنٹس کو 2 بڑے گروپوں میں تقسیم کر سکتا ہے، اور پھر ان دو گروپوں میں سے ہر ایک کو چھوٹے 2 گروپوں میں تقسیم کر سکتا ہے، جس میں کل 4 گروپ ہوتے ہیں، جو کہ تفرقہ انگیز اور اپر سے نیچے نقطہ نظر.

متبادل طور پر، یہ اس کے برعکس بھی کر سکتا ہے - یہ تمام ڈیٹا پوائنٹس کو دیکھ سکتا ہے، 2 پوائنٹس تلاش کر سکتا ہے جو ایک دوسرے کے قریب ہیں، انہیں لنک کر سکتے ہیں، اور پھر دوسرے پوائنٹس کو تلاش کر سکتے ہیں جو ان منسلک پوائنٹس کے قریب ترین ہیں اور 2 گروپس کی تعمیر جاری رکھ سکتے ہیں۔ سے نیچے کے اوپر. جو ہے جمع کرنے والا نقطہ نظر ہم تیار کریں گے.

اجتماعی درجہ بندی کے کلسٹرنگ کو انجام دینے کے اقدامات

اجتماعی نقطہ نظر کو بھی واضح کرنے کے لیے، کے اقدامات ہیں۔ اجتماعی درجہ بندی کلسٹرنگ (AHC) الگورتھم:

  1. شروع میں، ہر ڈیٹا پوائنٹ کو ایک کلسٹر سمجھیں۔ لہذا، شروع میں کلسٹرز کی تعداد K ہوگی - جبکہ K ڈیٹا پوائنٹس کی تعداد کی نمائندگی کرنے والا ایک عدد عدد ہے۔
  2. K-1 کلسٹرز کے نتیجے میں دو قریب ترین ڈیٹا پوائنٹس میں شامل ہو کر ایک کلسٹر بنائیں۔
  3. K-2 کلسٹرز کے نتیجے میں دو قریبی کلسٹرز میں شامل ہو کر مزید کلسٹرز بنائیں۔
  4. مندرجہ بالا تین مراحل کو اس وقت تک دہرائیں جب تک کہ ایک بڑا کلسٹر نہ بن جائے۔

نوٹ: آسان بنانے کے لیے، ہم مرحلہ 2 اور 3 میں "دو قریب ترین" ڈیٹا پوائنٹس کہہ رہے ہیں۔ لیکن پوائنٹس کو جوڑنے کے مزید طریقے ہیں جیسا کہ ہم تھوڑی دیر میں دیکھیں گے۔

If you invert the steps of the ACH algorithm, going from 4 to 1 – those would be the steps to *Divisive Hierarchical Clustering (DHC)*.

غور کریں کہ HCAs یا تو تقسیم کرنے والے اور اوپر سے نیچے، یا مجموعی اور نیچے سے اوپر ہوسکتے ہیں۔ اوپر سے نیچے DHC اپروچ بہترین کام کرتا ہے جب آپ کے پاس کم، لیکن بڑے کلسٹرز ہوں، اس لیے یہ کمپیوٹیشنل طور پر زیادہ مہنگا ہے۔ دوسری طرف، نیچے سے اوپر AHC اپروچ اس کے لیے موزوں ہے جب آپ کے پاس بہت سے چھوٹے کلسٹرز ہوں۔ یہ کمپیوٹیشنل طور پر آسان، زیادہ استعمال شدہ اور زیادہ دستیاب ہے۔

نوٹ: یا تو اوپر سے نیچے یا نیچے سے اوپر، کلسٹرنگ کے عمل کی ڈینڈروگرام کی نمائندگی ہمیشہ دو میں تقسیم کے ساتھ شروع ہوگی اور ہر ایک نقطہ امتیاز کے ساتھ ختم ہوگی، جب اس کا بنیادی ڈھانچہ بائنری درخت کا ہو جائے گا۔

آئیے ڈیٹا کے درجہ بندی کے تعلقات کو دیکھنے کے لیے اپنے کسٹمر ڈیٹا ڈینڈروگرام کی منصوبہ بندی کریں۔ اس بار، ہم استعمال کریں گے scipy ہمارے ڈیٹاسیٹ کے لیے ڈینڈروگرام بنانے کے لیے لائبریری:

import scipy.cluster.hierarchy as shc
import matplotlib.pyplot as plt

plt.figure(figsize=(10, 7))
plt.title("Customers Dendrogram")


selected_data = customer_data_oh.iloc[:, 1:3]
clusters = shc.linkage(selected_data, 
            method='ward', 
            metric="euclidean")
shc.dendrogram(Z=clusters)
plt.show()

اسکرپٹ کا آؤٹ پٹ اس طرح لگتا ہے:

IMG

مندرجہ بالا اسکرپٹ میں، ہم نے اپنے پوائنٹس کے ساتھ کلسٹرز اور ذیلی کلسٹرز بنائے ہیں، اس بات کی وضاحت کی ہے کہ ہمارے پوائنٹس کیسے منسلک ہوں گے ( ward طریقہ)، اور پوائنٹس کے درمیان فاصلے کی پیمائش کیسے کریں (کا استعمال کرکے euclidean میٹرک)۔

ڈینڈروگرام کے پلاٹ کے ساتھ، ڈی ایچ سی اور اے ایچ سی کے بیان کردہ عمل کو تصور کیا جا سکتا ہے۔ اوپر سے نیچے کے نقطہ نظر کو دیکھنے کے لیے ڈینڈروگرام کے اوپر سے شروع کریں اور نیچے جائیں، اور اس کے برعکس کریں، نیچے سے شروع کریں اور اوپر کی طرف بڑھیں تاکہ نیچے سے اوپر کے نقطہ نظر کو تصور کریں۔

ربط کے طریقے

لنکج کے بہت سے دوسرے طریقے ہیں، ان کے کام کرنے کے بارے میں مزید سمجھ کر، آپ اپنی ضروریات کے لیے مناسب طریقہ منتخب کر سکیں گے۔ اس کے علاوہ، ان میں سے ہر ایک کو لاگو کرنے پر مختلف نتائج برآمد ہوں گے۔ کلسٹرنگ تجزیہ میں کوئی مقررہ اصول نہیں ہے، اگر ممکن ہو تو مسئلہ کی نوعیت کا مطالعہ کریں تاکہ یہ معلوم ہو سکے کہ کون سا اس کے بہترین فٹ بیٹھتا ہے، مختلف طریقوں کی جانچ کریں، اور نتائج کا معائنہ کریں۔

تعلق کے کچھ طریقے یہ ہیں:

  • سنگل ربط: بھی کہا جاتا ہے۔ قریبی پڑوسی (NN). کلسٹرز کے درمیان فاصلہ ان کے قریبی اراکین کے درمیان فاصلے سے بیان کیا جاتا ہے۔

IMG

  • مکمل ربط: بھی کہا جاتا ہے۔ سب سے دور پڑوسی (FN), فاسٹسٹ پوائنٹ الگورتھم، یا ووور ہیز الگورتھم. کلسٹرز کے درمیان فاصلہ ان کے سب سے دور اراکین کے درمیان فاصلے سے بیان کیا جاتا ہے۔ یہ طریقہ حسابی طور پر مہنگا ہے۔

IMG

  • اوسط تعلق: اس نام سے بہی جانا جاتاہے UPGMA (ریتھ میٹک وسط کے ساتھ غیر وزنی جوڑی گروپ کا طریقہ). ہر کلسٹر کے پوائنٹس کی تعداد کا فیصد دونوں کلسٹرز کے پوائنٹس کی تعداد کے حوالے سے شمار کیا جاتا ہے اگر وہ ضم ہو گئے تھے۔

IMG

  • وزنی ربط: اس نام سے بہی جانا جاتاہے ڈبلیو پی جی ایم اے (ریتھمیٹک وسط کے ساتھ وزنی جوڑی گروپ کا طریقہ). دو کلسٹرز کے انفرادی پوائنٹس چھوٹے اور بڑے کلسٹر کے درمیان مجموعی فاصلے میں حصہ ڈالتے ہیں۔
  • سینٹروڈ ربط: بھی کہا جاتا ہے۔ UPGMC (Centroids کا استعمال کرتے ہوئے غیر وزنی جوڑی گروپ کا طریقہ). تمام پوائنٹس (سینٹرائڈ) کے وسط سے متعین ایک نقطہ ہر کلسٹر کے لیے شمار کیا جاتا ہے اور کلسٹرز کے درمیان فاصلہ ان کے متعلقہ سینٹروائڈز کے درمیان فاصلہ ہے۔

IMG

  • وارڈ کا ربط: اس نام سے بہی جانا جاتاہے MISSQ (مربع کے مجموعے کا کم سے کم اضافہ). یہ دو کلسٹرز کے درمیان فاصلہ بتاتا ہے، مربعوں کی غلطی (ESS) کے مجموعہ کی گنتی کرتا ہے، اور چھوٹے ESS کی بنیاد پر یکے بعد دیگرے کلسٹرز کا انتخاب کرتا ہے۔ وارڈ کا طریقہ ہر قدم پر ESS کے اضافے کو کم سے کم کرنے کی کوشش کرتا ہے۔ لہذا، غلطی کو کم سے کم.

IMG

فاصلاتی میٹرکس

ربط کے علاوہ، ہم سب سے زیادہ استعمال ہونے والے فاصلاتی میٹرکس کی بھی وضاحت کر سکتے ہیں:

  • یوکلیڈین: بھی کہا جاتا ہے۔ پائتھاگورین یا سیدھی لائن فاصلے. یہ خلا میں دو پوائنٹس کے درمیان فاصلے کی گنتی کرتا ہے، ان کے درمیان سے گزرنے والے لائن سیگمنٹ کی لمبائی کی پیمائش کر کے۔ یہ Pythagorean تھیوریم کا استعمال کرتا ہے اور فاصلے کی قدر نتیجہ ہے۔ (C) مساوات کا:

$$
c^2 = a^2 + b^2۔
$$

  • مین ہٹن: بھی کہا جاتا ہے سٹی بلاک، ٹیکسی فاصلے. یہ دو پوائنٹس کے تمام جہتوں میں اقدامات کے درمیان مطلق فرق کا مجموعہ ہے۔ اگر وہ طول و عرض دو ہیں، تو یہ ایک بلاک پر چلتے وقت دائیں اور پھر بائیں بنانے کے مترادف ہے۔

IMG

  • منکووسکی: یہ Euclidean اور Manhattan دونوں کے فاصلوں کا عمومی ہونا ہے۔ یہ منکووسکی میٹرک کی ترتیب کے مطلق فرق کی بنیاد پر فاصلوں کا حساب لگانے کا ایک طریقہ ہے۔ p. اگرچہ اس کی تعریف کسی کے لیے کی گئی ہے۔ p> 0، یہ شاذ و نادر ہی 1، 2، اور ∞ (لامحدود) کے علاوہ دیگر اقدار کے لیے استعمال ہوتا ہے۔ منکوسکی فاصلہ مین ہٹن کے فاصلے کے برابر ہے جب p = 1۔, اور یوکلیڈین فاصلے کے طور پر ایک ہی جب p = 2۔.

$$
Dleft(X,Yright) = left(sum_{i=1}^n |x_i-y_i|^pright)^{frac{1}{p}}
$$

IMG

  • Chebyshev: اس نام سے بہی جانا جاتاہے بساط فاصلے. یہ منکووسکی فاصلے کا انتہائی معاملہ ہے۔ جب ہم انفینٹی کو پیرامیٹر کی قدر کے طور پر استعمال کرتے ہیں۔ p (p = ∞)، ہم ایک میٹرک کے ساتھ ختم ہوتے ہیں جو فاصلے کو نقاط کے درمیان زیادہ سے زیادہ مطلق فرق کے طور پر بیان کرتا ہے۔
  • جیب التمام: یہ پوائنٹس کی دو ترتیبوں، یا ویکٹرز کے درمیان کونیی کوزائن فاصلہ ہے۔ کوزائن مماثلت ویکٹر کی ڈاٹ کی پیداوار ہے جو ان کی لمبائی کی پیداوار سے تقسیم ہوتی ہے۔
  • جیکارڈ: پوائنٹس کے محدود سیٹوں کے درمیان مماثلت کی پیمائش کرتا ہے۔ اس کی تعریف ہر سیٹ (چوراہے) میں مشترکہ پوائنٹس میں پوائنٹس کی کل تعداد (کارڈینیلٹی) کے طور پر کی جاتی ہے، جس کو دونوں سیٹوں (یونین) کے کل پوائنٹس کے پوائنٹس کی کل تعداد (کارڈینیلٹی) سے تقسیم کیا جاتا ہے۔
  • جینسن-شینن: Kullback-Leibler divergence پر مبنی۔ یہ پوائنٹس کی امکانی تقسیم پر غور کرتا ہے اور ان تقسیموں کے درمیان مماثلت کی پیمائش کرتا ہے۔ یہ امکانی نظریہ اور شماریات کا ایک مقبول طریقہ ہے۔

ہم نے منتخب کیا ہے وارڈ اور یوکلیڈین ڈینڈروگرام کے لیے کیونکہ یہ سب سے زیادہ استعمال شدہ طریقہ اور میٹرک ہیں۔ وہ عام طور پر اچھے نتائج دیتے ہیں کیونکہ وارڈ کی غلطیوں کو کم کرنے کی بنیاد پر پوائنٹس کو جوڑتا ہے، اور یوکلیڈین نچلے جہتوں میں اچھی طرح کام کرتا ہے۔

اس مثال میں، ہم مارکیٹنگ ڈیٹا کی دو خصوصیات (کالم) اور 200 مشاہدات یا قطاروں کے ساتھ کام کر رہے ہیں۔ چونکہ مشاہدات کی تعداد خصوصیات کی تعداد (200> 2) سے زیادہ ہے، ہم ایک کم جہتی جگہ میں کام کر رہے ہیں۔

جب خصوصیات کی تعداد (F) مشاہدات کی تعداد سے بڑا ہے۔ (ن) - زیادہ تر کے طور پر لکھا جاتا ہے۔ f >> N، اس کا مطلب ہے کہ ہمارے پاس ایک ہے۔ اعلی جہتی جگہ.

اگر ہم مزید اوصاف کو شامل کریں، لہذا ہمارے پاس 200 سے زیادہ خصوصیات ہیں، تو یوکلیڈین فاصلہ بہت اچھی طرح سے کام نہیں کر سکتا، کیونکہ اسے ایک بہت بڑی جگہ میں تمام چھوٹے فاصلوں کی پیمائش کرنے میں دشواری کا سامنا کرنا پڑے گا جو صرف بڑا ہوتا ہے۔ دوسرے الفاظ میں، یوکلیڈین فاصلاتی نقطہ نظر کو اعداد و شمار کے ساتھ کام کرنے میں مشکلات کا سامنا کرنا پڑتا ہے۔ کفایت شعاری. یہ ایک مسئلہ ہے جسے کہا جاتا ہے۔ جہتی کی لعنت. فاصلے کی قدریں اتنی چھوٹی ہو جائیں گی، جیسے کہ وہ بڑی جگہ میں "پتلا" ہو جائیں، جب تک وہ 0 نہ ہو جائیں تب تک مسخ ہو جائیں۔

نوٹ: اگر آپ کا کبھی کسی ڈیٹاسیٹ سے سامنا ہوتا ہے۔ f >> p، آپ شاید دیگر فاصلاتی میٹرکس استعمال کریں گے، جیسے کہ مہالانوبس فاصلے. متبادل طور پر، آپ استعمال کر کے ڈیٹا سیٹ کے طول و عرض کو بھی کم کر سکتے ہیں۔ پرنسپل اجزاء کا تجزیہ (پی سی اے). یہ مسئلہ بار بار ہوتا ہے خاص طور پر جب حیاتیاتی ترتیب کے اعداد و شمار کو کلسٹر کیا جاتا ہے۔

ہم نے پہلے ہی میٹرکس، روابط، اور ان میں سے ہر ایک ہمارے نتائج کو کیسے متاثر کر سکتا ہے اس پر بات کر چکے ہیں۔ آئیے اب ڈینڈروگرام تجزیہ کو جاری رکھیں اور دیکھتے ہیں کہ یہ ہمیں ہمارے ڈیٹاسیٹ میں کلسٹرز کی تعداد کا اشارہ کیسے دے سکتا ہے۔

ڈینڈروگرام میں کلسٹرز کی دلچسپ تعداد تلاش کرنا سب سے بڑی افقی جگہ تلاش کرنے کے مترادف ہے جس میں کوئی عمودی لائنیں نہیں ہیں (سب سے لمبی عمودی لائنوں والی جگہ)۔ اس کا مطلب ہے کہ کلسٹرز کے درمیان زیادہ علیحدگی ہے۔

ہم ایک افقی لکیر کھینچ سکتے ہیں جو اس طویل ترین فاصلے سے گزرتی ہے:

plt.figure(figsize=(10, 7))
plt.title("Customers Dendogram with line")
clusters = shc.linkage(selected_data, 
            method='ward', 
            metric="euclidean")
shc.dendrogram(clusters)
plt.axhline(y = 125, color = 'r', linestyle = '-')

IMG

افقی لکیر کا پتہ لگانے کے بعد، ہم گنتے ہیں کہ ہماری عمودی لکیریں اس سے کتنی بار پار ہوئیں – اس مثال میں، 5 بار۔ لہذا 5 ان کلسٹرز کی تعداد کا ایک اچھا اشارہ لگتا ہے جن کے درمیان سب سے زیادہ فاصلہ ہے۔

نوٹ: ڈینڈروگرام کو صرف ایک حوالہ کے طور پر سمجھا جانا چاہئے جب کلسٹرز کی تعداد کو منتخب کرنے کے لیے استعمال کیا جائے۔ یہ آسانی سے اس نمبر کو حاصل کر سکتا ہے اور مکمل طور پر تعلق اور فاصلے کی پیمائش کی قسم سے متاثر ہوتا ہے۔ گہرائی سے کلسٹر تجزیہ کرتے وقت، یہ مشورہ دیا جاتا ہے کہ مختلف روابط اور میٹرکس کے ساتھ ڈینڈرگرامس کو دیکھیں اور پہلی تین لائنوں کے ساتھ پیدا ہونے والے نتائج کو دیکھیں جن میں کلسٹرز کے درمیان سب سے زیادہ فاصلہ ہے۔

ایک اجتماعی درجہ بندی کے کلسٹرنگ کو نافذ کرنا

اصل ڈیٹا کا استعمال

So far we’ve calculated the suggested number of clusters for our dataset that corroborate with our initial analysis and our PCA analysis. Now we can create our agglomerative hierarchical clustering model using Scikit-Learn AgglomerativeClustering اور اس کے ساتھ مارکیٹنگ پوائنٹس کے لیبل معلوم کریں۔ labels_:

from sklearn.cluster import AgglomerativeClustering

clustering_model = AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward')
clustering_model.fit(selected_data)
clustering_model.labels_

اس کے نتائج:

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

اس مقام تک پہنچنے کے لیے ہم نے کافی تحقیق کی ہے۔ اور ان لیبلز کا کیا مطلب ہے؟ یہاں، ہمارے پاس اپنے ڈیٹا کے ہر پوائنٹ پر 0 سے 4 تک گروپ کے طور پر لیبل لگا ہوا ہے:

data_labels = clustering_model.labels_
sns.scatterplot(x='Annual Income (k$)', 
                y='Spending Score (1-100)', 
                data=selected_data, 
                hue=data_labels,
                pallete="rainbow").set_title('Labeled Customer Data')

IMG

یہ ہمارا آخری کلسٹرائزڈ ڈیٹا ہے۔ آپ کلر کوڈڈ ڈیٹا پوائنٹس کو پانچ کلسٹرز کی شکل میں دیکھ سکتے ہیں۔

نیچے دائیں طرف ڈیٹا پوائنٹس (لیبل: 0, جامنی ڈیٹا پوائنٹس) ان صارفین سے تعلق رکھتے ہیں جن کی تنخواہیں زیادہ ہیں لیکن کم خرچ۔ یہ وہ گاہک ہیں جو اپنا پیسہ احتیاط سے خرچ کرتے ہیں۔

اسی طرح، اوپر دائیں طرف صارفین (لیبل: 2، گرین ڈیٹا پوائنٹس)، وہ صارفین ہیں جن کی تنخواہیں اور زیادہ خرچ ہوتے ہیں۔ یہ وہ قسم کے صارفین ہیں جن کو کمپنیاں نشانہ بناتی ہیں۔

درمیان میں گاہک (لیبل: 1, blue data points) وہ ہیں جو اوسط آمدنی اور اوسط اخراجات کے ساتھ ہیں۔ صارفین کی سب سے زیادہ تعداد اس زمرے سے تعلق رکھتی ہے۔ کمپنیاں ان صارفین کو بھی نشانہ بنا سکتی ہیں اس حقیقت کو دیکھتے ہوئے کہ وہ بڑی تعداد میں ہیں۔

نیچے بائیں طرف صارفین (لیبل: 4, red) وہ گاہک ہیں جن کی تنخواہیں کم ہیں اور اخراجات کم ہیں، وہ پروموشنز دے کر اپنی طرف متوجہ ہو سکتے ہیں۔

اور آخر میں، اوپری بائیں طرف کے صارفین (لیبل: 3اورنج ڈیٹا پوائنٹس) زیادہ آمدنی اور کم خرچ والے ہیں، جو مثالی طور پر مارکیٹنگ کے ذریعے ہدف بنائے جاتے ہیں۔

پی سی اے کا نتیجہ استعمال کرنا

اگر ہم ایک مختلف منظر نامے میں تھے، جس میں ہمیں ڈیٹا کی جہت کو کم کرنا تھا۔ ہم آسانی سے کلسٹرائزڈ پی سی اے کے نتائج کو بھی پلاٹ کر سکتے ہیں۔ یہ ایک اور مجموعی کلسٹرنگ ماڈل بنا کر اور ہر پرنسپل جز کے لیے ڈیٹا لیبل حاصل کر کے کیا جا سکتا ہے:

clustering_model_pca = AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward')
clustering_model_pca.fit(pcs)

data_labels_pca = clustering_model_pca.labels_

sns.scatterplot(x=pc1_values, 
                y=pc2_values,
                hue=data_labels_pca,
                palette="rainbow").set_title('Labeled Customer Data Reduced with PCA')

IMG

مشاہدہ کریں کہ دونوں کے نتائج بہت ملتے جلتے ہیں۔ بنیادی فرق یہ ہے کہ اصل اعداد و شمار کے ساتھ پہلا نتیجہ سمجھانا بہت آسان ہے۔ یہ دیکھنا واضح ہے کہ صارفین کو ان کی سالانہ آمدنی اور اخراجات کے اسکور کے لحاظ سے پانچ گروپوں میں تقسیم کیا جا سکتا ہے۔ جب کہ، پی سی اے کے نقطہ نظر میں، ہم اپنی تمام خصوصیات کو مدنظر رکھتے ہیں، جتنا ہم ان میں سے ہر ایک کے ذریعہ بیان کردہ تغیرات کو دیکھ سکتے ہیں، یہ سمجھنا مشکل تصور ہے، خاص طور پر جب مارکیٹنگ ڈیپارٹمنٹ کو رپورٹ کرتے ہیں۔

کم از کم ہمیں اپنے ڈیٹا کو تبدیل کرنا ہوگا، اتنا ہی بہتر۔

اگر آپ کے پاس ایک بہت بڑا اور پیچیدہ ڈیٹاسیٹ ہے جس میں آپ کو کلسٹرنگ سے پہلے جہتی کمی کو انجام دینا ہوگا - PCA کے استعمال کا بیک اپ لینے اور عمل کی وضاحت کو بڑھانے کے لیے ہر ایک فیچر اور ان کی باقیات کے درمیان خطی تعلقات کا تجزیہ کرنے کی کوشش کریں۔ فی جوڑی فیچرز کا ایک لکیری ماڈل بنا کر، آپ یہ سمجھنے کے قابل ہو جائیں گے کہ فیچرز کیسے آپس میں تعامل کرتے ہیں۔

اگر ڈیٹا کا حجم اتنا بڑا ہے، تو فیچرز کے جوڑے بنانا ناممکن ہو جاتا ہے، اپنے ڈیٹا کا ایک نمونہ منتخب کریں، جتنا ممکن ہو متوازن اور عام تقسیم کے قریب ہو اور پہلے نمونے پر تجزیہ کریں، اسے سمجھیں، ٹھیک ٹیون اسے - اور اسے بعد میں پورے ڈیٹاسیٹ پر لاگو کریں۔

آپ ہمیشہ اپنے ڈیٹا کی نوعیت کے مطابق کلسٹرنگ ویژولائزیشن کی مختلف تکنیکوں کا انتخاب کر سکتے ہیں (لکیری، غیر لکیری) اور اگر ضروری ہو تو ان سب کو یکجا یا جانچ سکتے ہیں۔

نتیجہ

جب بغیر لیبل والے ڈیٹا کی بات آتی ہے تو کلسٹرنگ تکنیک بہت آسان ہوسکتی ہے۔ چونکہ حقیقی دنیا میں زیادہ تر ڈیٹا کو لیبل نہیں کیا جاتا ہے اور ڈیٹا کی تشریح پر زیادہ لاگت آتی ہے، اس لیے کلسٹرنگ کی تکنیکوں کو بغیر لیبل والے ڈیٹا کو لیبل کرنے کے لیے استعمال کیا جا سکتا ہے۔

اس گائیڈ میں، ہم ڈیٹا سائنس کا ایک حقیقی مسئلہ لے کر آئے ہیں، کیونکہ کلسٹرنگ تکنیکیں زیادہ تر مارکیٹنگ کے تجزیہ (اور حیاتیاتی تجزیہ میں بھی) استعمال ہوتی ہیں۔ ہم نے ایک اچھے درجہ بندی کے کلسٹرنگ ماڈل تک پہنچنے کے لیے بہت سے تفتیشی اقدامات کی بھی وضاحت کی ہے اور ڈینڈروگرامس کو کیسے پڑھا جائے اور سوال کیا کہ کیا PCA ایک ضروری قدم ہے۔ ہمارا بنیادی مقصد یہ ہے کہ کچھ خرابیاں اور مختلف منظرنامے جن میں ہم درجہ بندی کے جھرمٹ کو تلاش کرسکتے ہیں ان کا احاطہ کیا گیا ہے۔

مبارک کلسٹرنگ!

ٹائم اسٹیمپ:

سے زیادہ Stackabuse