Python اور Scikit-Learn PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ بے ترتیب جنگلات کے لیے فیچر کی اہمیت حاصل کریں۔ عمودی تلاش۔ عی

Python اور Scit-Learn کے ساتھ بے ترتیب جنگلات کے لیے فیچر کی اہمیت حاصل کریں۔

تعارف

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

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

Random Forests کا استعمال کرتے وقت یاد رکھنے کی ایک اہم بات یہ ہے کہ درختوں کی تعداد ایک ہائپر پیرامیٹر ہے اور ماڈل چلانے سے پہلے اس کی وضاحت کی جائے گی۔

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

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

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

ایسا کرنے کے لیے، آئیے ضروری لائبریریاں درآمد کریں، پامر پینگوئنز ڈیٹاسیٹ کو لوڈ کریں، ڈیٹا کو تقسیم کریں، ماڈل بنائیں، خصوصیت کی اہمیت حاصل کریں، اور انہیں پلاٹ کرنے کے لیے Seaborn کا استعمال کریں! ہم ڈیٹا، ای ڈی اے، یا خود ماڈل پر زیادہ غور نہیں کریں گے – یہ سرشار گائیڈ کا موضوع ہیں۔

نوٹ: آپ ڈیٹا سیٹ سے ڈاؤن لوڈ کر سکتے ہیں۔ GitHub کے یا براہ راست کوڈ سے۔

لائبریریاں درآمد کرنا

آئیے کچھ لائبریریاں درآمد کرکے شروع کریں جو ہم استعمال کریں گے:


import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier


raw_data_url = "https://gist.githubusercontent.com/cassiasamp/197b4e070f5f4da890ca4d226d088d1f/raw/38c9d4906ed121481b4dc201fa2004f2b3d0065f/penguins.csv"
df = pd.read_csv(raw_data_url)

ڈیٹا کی تقسیم

آئیے تربیت اور جانچ کے لیے ڈیٹا کو تقسیم کرتے ہیں:


df = df.dropna().drop("rowid", axis=1)


y = df["species"]
X = df[["bill_length_mm", "bill_depth_mm", "flipper_length_mm"]]


X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

خصوصیت کی اہمیت حاصل کرنا

آخر میں - ہم ایک ماڈل کو تربیت دے سکتے ہیں اور خصوصیت کی اہمیت کو اس کے ساتھ برآمد کر سکتے ہیں:


rf = RandomForestClassifier()


rf.fit(X_train, y_train)


rf.feature_importances_

یہ نتائج:

array([0.41267633, 0.30107056, 0.28625311])

وہ فیچر ویلیوز ہیں، فیچر کے نام دیکھنے کے لیے، چلائیں:


rf.feature_names_in_

اس کے نتیجے میں ہر خصوصیت کے متعلقہ نام نکلتا ہے:

array(['bill_length_mm', 'bill_depth_mm', 'flipper_length_mm'],
      dtype=object)

اس کا مطلب یہ ہے کہ اس مخصوص ماڈل کے لیے پیگوئن کلاسز کا فیصلہ کرنے کے لیے سب سے اہم خصوصیت تھی۔ bill_length_mm!

اہمیت اس پیمائش سے متعلق ہے کہ ہر نوڈ اسپلٹ میں ڈیٹا کو کتنی اچھی طرح سے الگ کیا جا رہا ہے - اس معاملے میں، پیمائش کی طرف سے دیا جاتا ہے گنی انڈیکس۔ - گنی ویلیو کا وزن اس بات سے کیا جاتا ہے کہ استعمال کرتے وقت کتنی قطاریں تقسیم کی گئی ہیں۔ bill_length_mm خصوصیت اور جوڑ میں 100 سے زیادہ درختوں کا اوسط۔ ان اقدامات کا نتیجہ نکلتا ہے۔ 0.41267633، یا اس معاملے میں 40٪ سے زیادہ۔

تصور کی خصوصیت کی اہمیت

اہمیت کی اقدار کی نمائندگی کرنے کا ایک عام طریقہ بار چیٹس کا استعمال ہے۔ آئیے پہلے فیچر کے ناموں اور ان کی متعلقہ اہمیت کے ساتھ ایک ڈیٹا فریم بنائیں، اور پھر Seaborn's کا استعمال کرتے ہوئے ان کا تصور کریں۔ barplot():


importances_df = pd.DataFrame({"feature_names" : rf.feature_names_in_, 
                               "importances" : rf.feature_importances_})
                             

g = sns.barplot(x=importances_df["feature_names"], 
                y=importances_df["importances"])
g.set_title("Feature importances", fontsize=14);                          

مشورہ: معلومات پیش کرتے وقت ایک اچھا عمل یہ ہے کہ اقدار کو چڑھتے یا نزولی ترتیب میں ترتیب دیا جائے۔ اس صورت میں، ڈیٹا پہلے سے ہی ترتیب دیا گیا ہے، جس میں پہلی قدر پہلی ہے جو ہم جاننا چاہتے ہیں۔ جب یہ معاملہ نہیں ہے، تو آپ ڈیٹا فریم کے ساتھ آرڈر کر سکتے ہیں۔ sort_values. یہ کسی بھی کالم پر صعودی یا نزولی ترتیب میں کیا جا سکتا ہے: importances_df.sort_values(by="importances", ascending=False).

اس پہلے پلاٹ کو دیکھتے ہوئے، ہر خصوصیت کی اہمیت کی قدر کی تشریح کرنا مشکل ہے۔ یہ واضح ہے کہ بل کی لمبائی دیگر دو سلاخوں سے بڑی ہے، لیکن بالکل ایسا نہیں ہے۔ bill_depth_mm کے برابر ہے 0.30107056، اور یہ کہ flipper_length_mm 0.28625311 ہے۔ لہذا، اس پہلے چارٹ کو ہر بار کی قدر ظاہر کرکے بہتر بنایا جا سکتا ہے۔ یہ سیبورن تک رسائی حاصل کرکے کیا جاسکتا ہے۔ containers چیز. یہ ہر بار کی معلومات کو ذخیرہ کرتا ہے اور اقدار کو بار لیبل کے طور پر منتقل کرتا ہے:

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

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names")
g.set_title("Feature importances", fontsize=14)
for value in g.containers:
    g.bar_label(value)

Python اور Scikit-Learn PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ بے ترتیب جنگلات کے لیے فیچر کی اہمیت حاصل کریں۔ عمودی تلاش۔ عی

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

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names")
                

sns.despine(bottom=True, left=True)
g.set_title("Feature importances", fontsize=14)
for value in g.containers:
    g.bar_label(value)

Python اور Scikit-Learn PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ بے ترتیب جنگلات کے لیے فیچر کی اہمیت حاصل کریں۔ عمودی تلاش۔ عی

چارٹ پڑھنے میں آسان معلوم ہوتا ہے، لیکن X-axis پر ٹکیاں تیرتی دکھائی دیتی ہیں اور ہمارے پاس پہلے سے ہی سلاخوں کے ساتھ قدریں موجود ہیں، لہذا ہم اسے ہٹا سکتے ہیں۔ xticks:

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names")
sns.despine(bottom=True, left=True)


g.set(xticks=[])
g.set_title("Feature importances", fontsize=14)
for value in g.containers:
    g.bar_label(value)

Python اور Scikit-Learn PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ بے ترتیب جنگلات کے لیے فیچر کی اہمیت حاصل کریں۔ عمودی تلاش۔ عی

دھیان دیں کہ کس طرح ٹِکس کو ہٹانے کے بعد، Y اور X لیبلز کو پڑھنا تھوڑا مشکل ہے۔ Y- لیبل، feature_names، عمودی ہے اور ایکس محور میں، صرف ہیں۔ importances. چونکہ عنوان پہلے ہی بتاتا ہے کہ چارٹ کا ہے۔ خصوصیت کی اہمیت، ہم محور کے لیبلز کو بھی ہٹا سکتے ہیں:

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names")
sns.despine(bottom=True, left=True)
g.set_title("Feature importances", fontsize=14)
g.set(xticks=[])


g.set(xlabel=None)
g.set(ylabel=None)
for value in g.containers:
    g.bar_label(value)

Python اور Scikit-Learn PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ بے ترتیب جنگلات کے لیے فیچر کی اہمیت حاصل کریں۔ عمودی تلاش۔ عی

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

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

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names",
                
                
                palette="mako")
sns.despine(bottom=True, left=True)
g.set_title("Feature importances", fontsize=14)
g.set(xticks=[])
g.set(xlabel=None)
g.set(ylabel=None)
for value in g.containers:
    g.bar_label(value, 
                padding=2) 

Python اور Scikit-Learn PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ بے ترتیب جنگلات کے لیے فیچر کی اہمیت حاصل کریں۔ عمودی تلاش۔ عی

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

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names", 
                palette="mako")
sns.despine(bottom=True, left=True)
g.set_title("The penguin's bill length was the most important feature for species classification (RF base model)", fontsize=14)
g.set(xticks=[])
g.set(xlabel=None)
g.set(ylabel=None)
for value in g.containers:
    g.bar_label(value, padding=2)

یہ خصوصیت کی اہمیت کے چارٹ کا حتمی نتیجہ ہے:

Python اور Scikit-Learn PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ بے ترتیب جنگلات کے لیے فیچر کی اہمیت حاصل کریں۔ عمودی تلاش۔ عی

نتیجہ

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

ٹائم اسٹیمپ:

سے زیادہ Stackabuse