Machine Learning Melodies – Telegram
Machine Learning Melodies
215 subscribers
28 photos
3 files
5 links
توی این کانال، من تجربیات و علایق شخصی‌ام رو در زمینه ماشین لرنینگ، موسیقی و چند چیز دیگه به اشتراک می‌گذارم
Download Telegram
حالا بیایید برای 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 استفاده نکنیم👇
👍5👎1
دیتاست iris رو لود میکنیم. 150 سمپل. 4 فیچر ورودی. و 3 کلاس داره.
👍3👎1
در اولین استپ mean vectors رو برای هر کلاس محاسبه میکنیم. اینها برای محاسبه within-class scatter matrix- S_W و Between-class scatter matrix- S_B ضروری هستن.
میبینید که برای هر کلاس بردارهای میانگین رو محاسبه کردم. 4 فیچر داریم بنابراین بعد هر کدوم 4 هست. میانگین فیچر اول. دوم. سوم و چهارم
👍3👎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 این جهت ها برای به حداکثر رسوندن جدایی بین کلاس های مختلف داده انتخاب میشن. مقادیر ویژه به ما میگن که هر بردار ویژه چقدر مهمه. بردارهای ویژه رو بر اساس مقادیر ویژه مربوطه به ترتیب نزولی مرتب میکنیم.
توی کد خط اول. برای حل معادله و بدست آوردن مقادیر ویژه و بردارهای ویژه از یه تابع استفاده میکنیم. سپس هر مقدار ویژه رو با بردار ویژه مربوطه جفت و مرتب میکنیم.
👍3👎1
ما بردارهای ویژه تاپ رو برای تشکیل یه ماتریس جدید انتخاب میکنیم. از W که برای تبدیل داده های خود استفاده میکنیم.
👍3👎1
و تبدیل میکنیم.
X_lda = X.dot(W)
نتیجه. ما ابعاد رو از 4 به 2 کاهش دادیم. بدون استفاده از sklearn
این کلاسیفیکیشن داده ها رو در کتگوری های مختلف آسونتر میکنه.
👍3👎1
بریم سراغ Principal Component Analysis -PCA 👇
حالا. PCA تکنیکی هست که برای کاهش ابعاد دیتاست های بزرگ. افزایش قابلیت تفسیر و در عین حال به حداقل رسوندن از دست دادن اطلاعات-information loss استفاده میشه. PCA روشی برای استخراج متغیرهای مهم (به شکل مولفه) از مجموعه ی بزرگی از متغیرهای موجود در یه دیتاست هست. همونطور که از اسمش پیداست میتونه مولفه‌های اصلی رو شناسایی کنه و به ما کمک میکنه تا به جای اینکه تمامی فیچرها رو مورد بررسی قرار بدیم یک سری فیچرهایی رو که ارزش بیشتری دارن تحلیل کنیم. هر بعد حاصل شده در فضای جدید یه ترکیب خطی از فیچرهای اصلی هست. مراحل pca شامل استاندارد کردن داده ها. محاسبه ماتریس کوواریانس. محاسبه مقادیر ویژه و بردارهای ویژه. مرتب سازی مقادیر ویژه و بردارهای ویژه. Project Data هست. بیایید توی کد ببینیم چطور انجام میشه
👍3👎1
با همون دیتاست iris کار میکنیم. با نرمال کردن دیتاست شروع میکنیم. PCA برای پیدا کردن principal components به ماتریس کوواریانس متکی هست. واریانس مربوط به یه متغیر هست در حالی که محاسبه کوواریانس ارتباط بین دو متغیر رو بوسیله پراکندگی‌هاشون نسبت به میانگین نشون میده. هر چه مقدار کوواریانس بین دو متغیر بزرگتر باشه میزان وابستگی خطی بین اونها بیشتره و برعکس.
بدون استانداردسازی فیچرهایی با مقیاس‌های بزرگ‌تر بر ماتریس کوواریانس مسلط میشن که باعث میشه PCA اهمیت بیشتری به این فیچرها بده و نتایج رو منحرف بکنه.
41👎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)
👍21👎1
نتیجه. ما بدون sklearn اومدیم و PCA انجام دادیم. ابعاد فیچرهارو از 4 به 2 کاهش دادیم
👏4👎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
Omide Eshgh
MohammadReza Shajarian
❤️
2🤬1💯1
در باب عشق
ما عشقی را که فکر می کنیم سزاوار آن هستیم، می پذیریم. عشقی که فکر می کنیم سزاوار آن هستیم اغلب منعکس کننده عمیق ترین زخم های ماست. این زخم های التیام نیافته ممکن است ما را به سوی شرکای با آسیب های حل نشده مشابه جذب کند. ضمیر ناخودآگاه ما ممکن است به دنبال بازسازی و حل آسیب های گذشته از طریق روابطمان باشد. عشقی که فکر می کنیم لایق آن هستیم، به طرز پیچیده ای با روایت های ناخودآگاه ما گره خورده است. و این درست است که فکر کنیم شفا تنها از طریق مواجهه با این مسایل حاصل می شود. ضمیر ناخودآگاه بدرستی ضرورت تجربه مجدد درد را برای التیام آن درک می کند. ناخودآگاه می داند که عشق می تواند یک درمانگر قدرتمند باشد. این روابط، اگرچه چالش برانگیز هستند، اما فرصت هایی برای رشد عمیق هستند. عشقی که فکر می کنیم سزاوار آن هستیم بازتابی از تلاش ناخودآگاه ما برای رسیدن به تمامیت (یافتن نیمه گمشده) است. یک شریک مناسب زخم های ما را می بیند و ما را نه با وجود آنها، بلکه به خاطر آنها دوست دارد. یک شریک مناسب ما را تشویق می کند تا تاریک ترین زوایای روان خود را کشف کنیم. یک شریک مناسب به ما کمک می‌کند تا آسیب‌های گذشته خود را به عنوان فرصت‌هایی برای رشد مجدد در نظر بگیریم. در حضور او ما شروع به بازنویسی روایات خود می کنیم و قدرت خود را باز پس میگیریم!

امیر موسوی
11🤮3💯1