در مورد Probability و frequency. اولی theoretical و دومی empirical هست. هر دو مفهوم از فرمول ریاضی یکسانی برای آنتروپی استفاده می کنن اما در contextهای مختلف اعمال میشن: یکی بر اساس مدل های نظری هست و دیگری بر اساس داده های مشاهده شده. توی درخت تصمیم برای یک گره معین آنتروپی بر اساس فرکانس هر کلاس در اون گره محاسبه میشه.
💯1
حالا بیایید با یه مثال بگم decision tree چطور کار میکنه. برای همون دیتاست بالا. ابتدا آنتروپی کل دیتاست رو محاسبه میکنیم.
Total samples: 10, Yes: 5, No: 5
آنتروپی کل دیتاست 1 هست. یعنی حداکثر بی نظمی. الگوریتم decision tree بدنبال تقسیم هایی هست که information gain رو به حداکثر برسونه (یا آنتروپی رو کاهش بده). در مورد information gain بالاتر صحبت کردم. الگوریتم تقسیم های مختلف رو با هر فیچر ارزیابی میکنه تا اون فیچری رو پیدا کنه که information gain رو حداکثر میکنه (information gain رو برای هر فیچر محاسبه میکنه). در شروع برای Outlook این حداکثر مقدار رو داره. بنابراین بعنوان root node انتخاب میشه. دیتاست بر اساس Outlook تقسیم میشه و شاخه های جدیدی برای Sunny، Overcast و Rain ایجاد میکنه. الگوریتم فرآیند رو برای هر شاخه تکرار میکنه، آنتروپی و information gain رو محاسبه میکنه تا بهترین تقسیمها رو در اون زیر مجموعهها پیدا کنه. درخت تصمیم تا زمانی که یکی از معیارهای توقف برآورده بشه رشد میکنه (به عنوان مثال، maximum depth, minimum samples per leaf, or no further information gain).
حالا ناخالصی جینی-Gini impurity معیار دیگری هست که برای اندازه گیری ناخالصی یه گره توی درخت تصمیم استفاده میشه. اغلب به عنوان جایگزینی برای آنتروپی در مسایل طبقه بندی استفاده میشه.
Total samples: 10, Yes: 5, No: 5
آنتروپی کل دیتاست 1 هست. یعنی حداکثر بی نظمی. الگوریتم decision tree بدنبال تقسیم هایی هست که information gain رو به حداکثر برسونه (یا آنتروپی رو کاهش بده). در مورد information gain بالاتر صحبت کردم. الگوریتم تقسیم های مختلف رو با هر فیچر ارزیابی میکنه تا اون فیچری رو پیدا کنه که information gain رو حداکثر میکنه (information gain رو برای هر فیچر محاسبه میکنه). در شروع برای Outlook این حداکثر مقدار رو داره. بنابراین بعنوان root node انتخاب میشه. دیتاست بر اساس Outlook تقسیم میشه و شاخه های جدیدی برای Sunny، Overcast و Rain ایجاد میکنه. الگوریتم فرآیند رو برای هر شاخه تکرار میکنه، آنتروپی و information gain رو محاسبه میکنه تا بهترین تقسیمها رو در اون زیر مجموعهها پیدا کنه. درخت تصمیم تا زمانی که یکی از معیارهای توقف برآورده بشه رشد میکنه (به عنوان مثال، maximum depth, minimum samples per leaf, or no further information gain).
حالا ناخالصی جینی-Gini impurity معیار دیگری هست که برای اندازه گیری ناخالصی یه گره توی درخت تصمیم استفاده میشه. اغلب به عنوان جایگزینی برای آنتروپی در مسایل طبقه بندی استفاده میشه.
💯1
بریم سراغ Linear Discriminant Analysis- LDA.
برای آموزش این موضوع ابتدا یه دیتاست مصنوعی با دو کلاس و 4 فیچر ساختم. دیتاست به گونه ای جنریت شد که در فضای ویژگی قابل تفکیک باشه. نمودار سمت چپ که پلات کردم داده های اصلی رو در فضای ویژگی با استفاده از دو فیچر اول نشون میده.
نمودار سمت راست داده ها رو پس از اعمال LDA نشون میده. LDA یه تکنیک کلاسیفیکیشن و کاهش ابعاد هست. برای یافتن ترکیبی خطی از فیچرهایی که دو یا چند کلاس رو جدا میکنن استفاده میشه. چطور کار میکنه؟ در ابتدا بردارهای میانگین رو باید محاسبه کنید. در واقع میانگین هر فیچر برای هر کلاس. مرحله بعد محاسبه Scatter Matrices هست. یه Within-Class Scatter Matrix (S_W) و یه Between-Class Scatter Matrix (S_B). اولی میزان انحراف نقاط داده در هر کلاس از میانگین کلاس مربوطه رو نشون میده. یه مقدار کوچکش نشون میده که نقاط یک کلاس به همدیگه نزدیک هستن. دومی نشون میده که میانگین کلاسها چقدر از میانگین کلی فاصله دارن. یه مقدار بزرگش نشون میده که میانگین های کلاس به خوبی از همدیگه جدا شدن. نقش LDA یافتن تبدیلی هست که اولی رو به حداقل برسونه و دومی رو به حداکثر برسونه. این منجر به یک فضای ویژگی جدید میشه که در اون کلاس ها متمایزتر هستن و طبقه بندی اونها آسونتره. بعد از محاسبه این دو ماتریس Discriminant Function -تابع تفکیک کننده محاسبه میشه. این تابع مسول یافتن ترکیب خطی بهینه از فیچرها هست که کلاسهارو در دیتاست به بهترین شکل جدا میکنه. هدف اصلی پیدا کردن یه محور جدید در فضای ویژگی هست که در اون نقاط دادههای کلاسهای مختلف تا حد امکان از هم دور باشن و در عین حال نقاط در همان کلاس تا حد ممکن نزدیک باشن. اینکار با مقادیر و بردارهای ویژه انجام میشه.
تصور کنید عکاسی هستید که در حال تلاش برای گرفتن عکس دسته جمعی از افراد دو تیم مختلف با پیراهن های رنگی مختلف هستید. در ابتدا مردم با هم قاطی میشن و به سختی میشه تمایز بین تیم ها رو دید. شما به اطراف حرکت میکنید و بهترین زاویه رو پیدا میکنید که از اون جدایی بین تیم ها بیشتر قابل مشاهده هست. این زاویه مربوط به یافتن بهترین جهت ها (بردارهای ویژه) در LDA هست. شما عکس رو از اون زاویه میگیرید، جایی که تیم ها به وضوح از هم جدا شدن. با محاسبه discriminant function شما در واقع دارید بهترین زاویه رو پیدا میکنید.
بعد از تبدیل دادهها به فضای جدید میتونیم از الگوریتمهای کلاسیفیکیشن ساده (مثل nearest neighbor) برای طبقهبندی نقاط داده جدید بر اساس موقعیت اونها در این فضای ویژگی جدید استفاده کنیم.
برخلاف PCA که بر به حداکثر رساندن واریانس بدون در نظر گرفتن لیبلهای کلاسها تمرکز میکنه. LDA به صراحت تلاش میکنه تا تمایز بین کلاسها را مدلسازی کنه.
برای آموزش این موضوع ابتدا یه دیتاست مصنوعی با دو کلاس و 4 فیچر ساختم. دیتاست به گونه ای جنریت شد که در فضای ویژگی قابل تفکیک باشه. نمودار سمت چپ که پلات کردم داده های اصلی رو در فضای ویژگی با استفاده از دو فیچر اول نشون میده.
نمودار سمت راست داده ها رو پس از اعمال LDA نشون میده. LDA یه تکنیک کلاسیفیکیشن و کاهش ابعاد هست. برای یافتن ترکیبی خطی از فیچرهایی که دو یا چند کلاس رو جدا میکنن استفاده میشه. چطور کار میکنه؟ در ابتدا بردارهای میانگین رو باید محاسبه کنید. در واقع میانگین هر فیچر برای هر کلاس. مرحله بعد محاسبه Scatter Matrices هست. یه Within-Class Scatter Matrix (S_W) و یه Between-Class Scatter Matrix (S_B). اولی میزان انحراف نقاط داده در هر کلاس از میانگین کلاس مربوطه رو نشون میده. یه مقدار کوچکش نشون میده که نقاط یک کلاس به همدیگه نزدیک هستن. دومی نشون میده که میانگین کلاسها چقدر از میانگین کلی فاصله دارن. یه مقدار بزرگش نشون میده که میانگین های کلاس به خوبی از همدیگه جدا شدن. نقش LDA یافتن تبدیلی هست که اولی رو به حداقل برسونه و دومی رو به حداکثر برسونه. این منجر به یک فضای ویژگی جدید میشه که در اون کلاس ها متمایزتر هستن و طبقه بندی اونها آسونتره. بعد از محاسبه این دو ماتریس Discriminant Function -تابع تفکیک کننده محاسبه میشه. این تابع مسول یافتن ترکیب خطی بهینه از فیچرها هست که کلاسهارو در دیتاست به بهترین شکل جدا میکنه. هدف اصلی پیدا کردن یه محور جدید در فضای ویژگی هست که در اون نقاط دادههای کلاسهای مختلف تا حد امکان از هم دور باشن و در عین حال نقاط در همان کلاس تا حد ممکن نزدیک باشن. اینکار با مقادیر و بردارهای ویژه انجام میشه.
تصور کنید عکاسی هستید که در حال تلاش برای گرفتن عکس دسته جمعی از افراد دو تیم مختلف با پیراهن های رنگی مختلف هستید. در ابتدا مردم با هم قاطی میشن و به سختی میشه تمایز بین تیم ها رو دید. شما به اطراف حرکت میکنید و بهترین زاویه رو پیدا میکنید که از اون جدایی بین تیم ها بیشتر قابل مشاهده هست. این زاویه مربوط به یافتن بهترین جهت ها (بردارهای ویژه) در LDA هست. شما عکس رو از اون زاویه میگیرید، جایی که تیم ها به وضوح از هم جدا شدن. با محاسبه discriminant function شما در واقع دارید بهترین زاویه رو پیدا میکنید.
بعد از تبدیل دادهها به فضای جدید میتونیم از الگوریتمهای کلاسیفیکیشن ساده (مثل nearest neighbor) برای طبقهبندی نقاط داده جدید بر اساس موقعیت اونها در این فضای ویژگی جدید استفاده کنیم.
برخلاف PCA که بر به حداکثر رساندن واریانس بدون در نظر گرفتن لیبلهای کلاسها تمرکز میکنه. LDA به صراحت تلاش میکنه تا تمایز بین کلاسها را مدلسازی کنه.
💯1
ایده برای پژوهش: فاین تیون کردن CLIP بر روی تصاویر پزشکی
بیایید برسی کنیم. CLIP یه مدل Multimodal و مخفف عبارت Contrastive Language-Image Pre-Training هست. CLIP با استفاده از میلیون ها پیر تصویر و توضیحات متنی مربوط به اونها ترین شده. یاد میگیره که تصاویر رو با متن مناسب مطابقت بده. ایده کلیدی پشت CLIP "یادگیری متضاد" هست. به این معناست که با مقایسه و تقابل پیرها یاد میگیره. سعی میکنه پیرهای مثبت (مثل تصویر یک گربه و کلمه "گربه") رو در یک representation space به هم نزدیکتر کنه در حالی که پیرهای منفی (مثل تصویر یک گربه و کلمه "ماشین") رو از هم دورتر میکنه. از اونجایی که CLIP از حجم وسیعی از دادههای متنوع یاد میگیره میتونه طیف گستردهای از تصاویر و متن رو درک کنه.
نکته مهم اینه که CLIP میتونه تسکهای رو انجام بده که هرگز به صراحت برای اونها آموزش داده نشده-zero shot learning. به عنوان مثال، اگه از اون بخوایید تصاویر «یک سیب قرمز» رو پیدا کنه، حتی اگر قبلا اون عبارت رو ندیده باشه میتونه این کار رو انجام بده. یعنی قدرت تعمیم بسیار بالایی داره.
ایده ای که میخوام بهتون بدم اینه که میتونیم اونو برای تصاویر پزشکی فاین تیون کنید. اینکار بسیار ارزشمنده. میتونه با تطبیق تصاویر با توضیحات پزشکی مرتبط به پزشکان توی تشخیص بیماری ها کمک کنه. اما اهمیت موضوع بر میگرده به zero shot learning. متخصصان پزشکی اغلب با شرایط جدید یا نادری مواجه میشن که ممکنه در دیتاست های آموزشی به خوبی مستند نشده باشن. یه مدل CLIP فاین تیون شده میتونه از توانایی یادگیری شات صفر خودش برای شناسایی و ارایه اطلاعات مرتبط در مورد این شرایط بر اساس درک پیشرفتهاش استفاده کنه.
بیایید برسی کنیم. CLIP یه مدل Multimodal و مخفف عبارت Contrastive Language-Image Pre-Training هست. CLIP با استفاده از میلیون ها پیر تصویر و توضیحات متنی مربوط به اونها ترین شده. یاد میگیره که تصاویر رو با متن مناسب مطابقت بده. ایده کلیدی پشت CLIP "یادگیری متضاد" هست. به این معناست که با مقایسه و تقابل پیرها یاد میگیره. سعی میکنه پیرهای مثبت (مثل تصویر یک گربه و کلمه "گربه") رو در یک representation space به هم نزدیکتر کنه در حالی که پیرهای منفی (مثل تصویر یک گربه و کلمه "ماشین") رو از هم دورتر میکنه. از اونجایی که CLIP از حجم وسیعی از دادههای متنوع یاد میگیره میتونه طیف گستردهای از تصاویر و متن رو درک کنه.
نکته مهم اینه که CLIP میتونه تسکهای رو انجام بده که هرگز به صراحت برای اونها آموزش داده نشده-zero shot learning. به عنوان مثال، اگه از اون بخوایید تصاویر «یک سیب قرمز» رو پیدا کنه، حتی اگر قبلا اون عبارت رو ندیده باشه میتونه این کار رو انجام بده. یعنی قدرت تعمیم بسیار بالایی داره.
ایده ای که میخوام بهتون بدم اینه که میتونیم اونو برای تصاویر پزشکی فاین تیون کنید. اینکار بسیار ارزشمنده. میتونه با تطبیق تصاویر با توضیحات پزشکی مرتبط به پزشکان توی تشخیص بیماری ها کمک کنه. اما اهمیت موضوع بر میگرده به zero shot learning. متخصصان پزشکی اغلب با شرایط جدید یا نادری مواجه میشن که ممکنه در دیتاست های آموزشی به خوبی مستند نشده باشن. یه مدل CLIP فاین تیون شده میتونه از توانایی یادگیری شات صفر خودش برای شناسایی و ارایه اطلاعات مرتبط در مورد این شرایط بر اساس درک پیشرفتهاش استفاده کنه.
⚡1👎1
Machine Learning Melodies
ایده برای پژوهش: فاین تیون کردن CLIP بر روی تصاویر پزشکی بیایید برسی کنیم. CLIP یه مدل Multimodal و مخفف عبارت Contrastive Language-Image Pre-Training هست. CLIP با استفاده از میلیون ها پیر تصویر و توضیحات متنی مربوط به اونها ترین شده. یاد میگیره که تصاویر…
https://huggingface.co/spaces/fffiloni/CLIP-Interrogator-2
فقط منظورش از black white pink رو نفهمیدم😁
فقط منظورش از black white pink رو نفهمیدم😁
👎2😁1
حالا بیایید برای Linear Discriminant Analysis -LDA یکم کد بزنیم.
ابتدا بدونیم که LDA ابعاد رو تا چه میزان کاهش میده؟ این ابعاد رو بر اساس تعداد کلاس های موجود در متغیر هدف کاهش میده. به طور خاص اگه k کلاس دارید، LDA ابعاد رو به k-1 کاهش میده. برای مثال دیتاست Iris دارای 4 فیچر اصلی (ابعاد): طول کاسبرگ، عرض کاسبرگ، طول گلبرگ و عرض گلبرگ هست. 3 کلاس Iris-setosa، Iris-versicolor، Iris-virginica داره. وقتی LDA رو اعمال میکنیم میخواییم این 4 بعد رو کاهش بدیم تا تجسم و کار با اون آسونتر بشه. از اونجایی که 3 کلاس وجود داره، LDA ابعاد رو به ابعاد 3-1 = 2 کاهش میده.
بطور دقیقتر بخوام بگم:
Reduced Dimensions = min(d , C−1)
جایی که C تعداد کلاسها و d تعداد فیچرهاست. توی مثال iris ابعاد به 2 کاهش پیدا میکنه (از 4 به 2. اما تعداد کلاسها همون 3 هست):
min(4,3−1)=min(4,2)=2
ادامه بدیم. میخواییم from scratch کد بزنیم. یعنی از sklearn برای LDA استفاده نکنیم👇
ابتدا بدونیم که LDA ابعاد رو تا چه میزان کاهش میده؟ این ابعاد رو بر اساس تعداد کلاس های موجود در متغیر هدف کاهش میده. به طور خاص اگه k کلاس دارید، LDA ابعاد رو به k-1 کاهش میده. برای مثال دیتاست Iris دارای 4 فیچر اصلی (ابعاد): طول کاسبرگ، عرض کاسبرگ، طول گلبرگ و عرض گلبرگ هست. 3 کلاس Iris-setosa، Iris-versicolor، Iris-virginica داره. وقتی LDA رو اعمال میکنیم میخواییم این 4 بعد رو کاهش بدیم تا تجسم و کار با اون آسونتر بشه. از اونجایی که 3 کلاس وجود داره، LDA ابعاد رو به ابعاد 3-1 = 2 کاهش میده.
بطور دقیقتر بخوام بگم:
Reduced Dimensions = min(d , C−1)
جایی که C تعداد کلاسها و d تعداد فیچرهاست. توی مثال iris ابعاد به 2 کاهش پیدا میکنه (از 4 به 2. اما تعداد کلاسها همون 3 هست):
min(4,3−1)=min(4,2)=2
ادامه بدیم. میخواییم from scratch کد بزنیم. یعنی از sklearn برای LDA استفاده نکنیم👇
👍5👎1
در استپ بعد باید Within-class scatter matrix و Between-class scatter matrix رو محاسبه کنیم. اولی پراکندگی نقاط داده رو درون هر کلاس ثبت میکنه. به حداقل رسوندن اون کمک میکنه تا نقاط هر کلاس به همدیگه نزدیکتر بشن. ماتریس دومی پراکندگی mean vectors کلاسهای مختلف رو ثبت میکنه. ماکزیمم کردن اون کمک میکنه که میانگین کلاسهای مختلف از هم دورتر بشن. LDA تلاش میکنه تا نسبت S B به S W رو به حداکثر برسونه بنابراین حداکثر قابلیت تفکیک کلاسی رو در فضای تبدیل شده به دست میاره. بطور خلاصه هدف low within-class variance و high between-class variance هست. من این دو ماتریس رو طبق فرمولشون محاسبه کردم. اگر سرچ کنید فرمولشون هست.
👍3👎1
حالا نوبت محاسبه مقادیر ویژه و بردارهای ویژه هست. این دو به شناسایی directions یا جهتها (تمایزکنندههای خطی- linear discriminants) کمک میکنن. بردارهای ویژه جهت هایی که تفکیک بین طبقات مختلف رو به حداکثر میرسونه رو نشون میده. مقادیر ویژه اهمیت هر جهت رو مشخص میکنه.
بردارهای ویژه رو به عنوان فلش هایی در نظر بگیرید که به جهات خاصی در فضای داده ما اشاره می کنن. توی LDA این جهت ها برای به حداکثر رسوندن جدایی بین کلاس های مختلف داده انتخاب میشن. مقادیر ویژه به ما میگن که هر بردار ویژه چقدر مهمه. بردارهای ویژه رو بر اساس مقادیر ویژه مربوطه به ترتیب نزولی مرتب میکنیم.
توی کد خط اول. برای حل معادله و بدست آوردن مقادیر ویژه و بردارهای ویژه از یه تابع استفاده میکنیم. سپس هر مقدار ویژه رو با بردار ویژه مربوطه جفت و مرتب میکنیم.
بردارهای ویژه رو به عنوان فلش هایی در نظر بگیرید که به جهات خاصی در فضای داده ما اشاره می کنن. توی LDA این جهت ها برای به حداکثر رسوندن جدایی بین کلاس های مختلف داده انتخاب میشن. مقادیر ویژه به ما میگن که هر بردار ویژه چقدر مهمه. بردارهای ویژه رو بر اساس مقادیر ویژه مربوطه به ترتیب نزولی مرتب میکنیم.
توی کد خط اول. برای حل معادله و بدست آوردن مقادیر ویژه و بردارهای ویژه از یه تابع استفاده میکنیم. سپس هر مقدار ویژه رو با بردار ویژه مربوطه جفت و مرتب میکنیم.
👍3👎1
حالا. PCA تکنیکی هست که برای کاهش ابعاد دیتاست های بزرگ. افزایش قابلیت تفسیر و در عین حال به حداقل رسوندن از دست دادن اطلاعات-information loss استفاده میشه. PCA روشی برای استخراج متغیرهای مهم (به شکل مولفه) از مجموعه ی بزرگی از متغیرهای موجود در یه دیتاست هست. همونطور که از اسمش پیداست میتونه مولفههای اصلی رو شناسایی کنه و به ما کمک میکنه تا به جای اینکه تمامی فیچرها رو مورد بررسی قرار بدیم یک سری فیچرهایی رو که ارزش بیشتری دارن تحلیل کنیم. هر بعد حاصل شده در فضای جدید یه ترکیب خطی از فیچرهای اصلی هست. مراحل pca شامل استاندارد کردن داده ها. محاسبه ماتریس کوواریانس. محاسبه مقادیر ویژه و بردارهای ویژه. مرتب سازی مقادیر ویژه و بردارهای ویژه. Project Data هست. بیایید توی کد ببینیم چطور انجام میشه
👍3👎1
با همون دیتاست iris کار میکنیم. با نرمال کردن دیتاست شروع میکنیم. PCA برای پیدا کردن principal components به ماتریس کوواریانس متکی هست. واریانس مربوط به یه متغیر هست در حالی که محاسبه کوواریانس ارتباط بین دو متغیر رو بوسیله پراکندگیهاشون نسبت به میانگین نشون میده. هر چه مقدار کوواریانس بین دو متغیر بزرگتر باشه میزان وابستگی خطی بین اونها بیشتره و برعکس.
بدون استانداردسازی فیچرهایی با مقیاسهای بزرگتر بر ماتریس کوواریانس مسلط میشن که باعث میشه PCA اهمیت بیشتری به این فیچرها بده و نتایج رو منحرف بکنه.
بدون استانداردسازی فیچرهایی با مقیاسهای بزرگتر بر ماتریس کوواریانس مسلط میشن که باعث میشه PCA اهمیت بیشتری به این فیچرها بده و نتایج رو منحرف بکنه.
❤4⚡1👎1
بعد از این نوبت محاسبه ماتریس کوواریانس هست. این ماتریس به ما کمک میکنه تا روابط بین فیچرهای مختلف در دیتاست رو درک کنیم. در مورد کوواریانس. اگر دو ویژگی با هم افزایش پیدا کنن کوواریانس اونها مثبته. اگر یکی افزایش و دیگری کاهش پیدا کنه کوواریانس اونها منفی هست. کوواریانس صفر هم به این معناست که تغییرات بین دو فیچر مستقل از هم هستن و همبستگی خاصی ندارن. ماتریس کوواریانس هم یه ماتریس مربعی هست که کوواریانس های بین جفت فیچرها توی دیتاست رو خلاصه میکنه.
این ماتریس به به شناسایی ترکیبی از فیچرها کمک میکنه که بیشترین اطلاعات رو در مورد ساختار دادهها دارن. این اطلاعات برای تعیین جهتها (مولفههای اصلی) که حداکثر واریانس توی دادهها رو (هدف اصلی PCA کاهش ابعاد داده ها در عین حفظ واریانس (اطلاعات) تا حد ممکنه) ثبت میکنن بسیار مهمه.
برای محاسبه:
cov_matrix = np.cov(X_standardized.T)
با این حال. خود ماتریس کوواریانس به طور مستقیم محورهای جدید بهینه (مولفه های اصلی) برای داده ها رو به ما نمیگه. پس ما به مقادیر ویژه و بردارهای ویژه نیاز داریم. بردارهای ویژه جهت ها (یا محورها) رو توی فضای ویژگی نشون میده. مقادیر ویژه نشون دهنده بزرگی واریانس در امتداد بردارهای ویژه مربوطه اونهاست. در واقع مولفه های اصلی بردارهای ویژه ماتریس کوواریانس هستن. مقادیر ویژه مرتبط با این بردارهای ویژه به ما میگن که چه مقدار واریانس توسط هر مولفه اصلی گرفته شده. برای محاسبه:
eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)
sorted_index = np.argsort(eigenvalues)[::-1]
sorted_eigenvalues = eigenvalues[sorted_index]
sorted_eigenvectors = eigenvectors[:, sorted_index]
حالا. k تعداد مولفه های اصلی-بردارهای ویژه هست که میخواییم نگه داریم:
k = 2
eigenvector_subset = sorted_eigenvectors[:, 0:k]
و دیتارو تبدیل میکنیم. مثل اینه که دوتا محور پیدا کردیم و دیتارو روی اون پروجکت کردیم:
X_reduced = np.dot(X_standardized, eigenvector_subset)
این ماتریس به به شناسایی ترکیبی از فیچرها کمک میکنه که بیشترین اطلاعات رو در مورد ساختار دادهها دارن. این اطلاعات برای تعیین جهتها (مولفههای اصلی) که حداکثر واریانس توی دادهها رو (هدف اصلی PCA کاهش ابعاد داده ها در عین حفظ واریانس (اطلاعات) تا حد ممکنه) ثبت میکنن بسیار مهمه.
برای محاسبه:
cov_matrix = np.cov(X_standardized.T)
با این حال. خود ماتریس کوواریانس به طور مستقیم محورهای جدید بهینه (مولفه های اصلی) برای داده ها رو به ما نمیگه. پس ما به مقادیر ویژه و بردارهای ویژه نیاز داریم. بردارهای ویژه جهت ها (یا محورها) رو توی فضای ویژگی نشون میده. مقادیر ویژه نشون دهنده بزرگی واریانس در امتداد بردارهای ویژه مربوطه اونهاست. در واقع مولفه های اصلی بردارهای ویژه ماتریس کوواریانس هستن. مقادیر ویژه مرتبط با این بردارهای ویژه به ما میگن که چه مقدار واریانس توسط هر مولفه اصلی گرفته شده. برای محاسبه:
eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)
sorted_index = np.argsort(eigenvalues)[::-1]
sorted_eigenvalues = eigenvalues[sorted_index]
sorted_eigenvectors = eigenvectors[:, sorted_index]
حالا. k تعداد مولفه های اصلی-بردارهای ویژه هست که میخواییم نگه داریم:
k = 2
eigenvector_subset = sorted_eigenvectors[:, 0:k]
و دیتارو تبدیل میکنیم. مثل اینه که دوتا محور پیدا کردیم و دیتارو روی اون پروجکت کردیم:
X_reduced = np.dot(X_standardized, eigenvector_subset)
👍2⚡1👎1
Derakht
Ebi - GahMusic.com
The seasons pass, each one a reminder that I am still here, still standing, but for how much longer? 😊
❤3🤬1💯1