Machine Learning Melodies – Telegram
Machine Learning Melodies
215 subscribers
28 photos
3 files
5 links
توی این کانال، من تجربیات و علایق شخصی‌ام رو در زمینه ماشین لرنینگ، موسیقی و چند چیز دیگه به اشتراک می‌گذارم
Download Telegram
در باب شکست
نیچه میگفت آنچه ما را نکشد قوی‌ترمان می‌کند، اما او سال‌های پایانی عمر خویش را در جنون گذراند. ذهن انسان شکننده تر از آن چیزی بود که نیچه میگفت. روان ما ابزار ظریفی است که به راحتی شکسته می شود و هرگز واقعا ترمیم نمی شود. سنگینی شکست های مکرر نیز می تواند اراده انسان را خم کند و بشکند. شکست، زمانی که اغلب به اندازه کافی تجربه شود، به یک پیشگو تبدیل می شود و تمام تلاش های ما را تحت الشعاع قرار می دهد. ناامیدکننده است اما مفهوم بیرون آمدن قوی تر از چالش‌ها اغلب فقط یک مکانیسم مقابله است. ما از این مکانیسم مقابله ای استقبال می کنیم زیرا جایگزین آن - پذیرش شکنندگی اساسی ما - بسیار دردناک‌تر است که نمی توان به آن فکر کرد. راه حل، اگر هم وجود داشته باشد، ما را از دور دست به سخره میگیرد. به نظر می رسد راه حل این است که بپذیریم راه حلی وجود ندارد. راستی کوبنده ترین شکست، درک آهسته این است که ما تبدیل به آن چیزی شده ایم که زمانی تحقیر می کردیم...

امیر موسوی
👍3🔥1💩1💯1
صبح بخیر
اینجا پاتوق منه. اینم قهوه Godfather هست😊
1
Golf_Play_Dataset.csv
304 B
یه دیتاست براتون ساختم. این شامل 10 سطر هست. حاوی فیچرهای کیفی و متغیر هدف PlayGolf. میخوام decision tree رو برای این دیتاست برسی کنیم
🤩1
من یه decision tree رو برای دیتاست بالا پلات کردم. ما یکسری node داریم. هر node یه decision point رو بر اساس یه فیچر نشون میده. و اولین decision point در واقع root node نامیده میشه. شاخه های-Branches هر نود (اون نود نه😁) مقادیر ممکن هر فیچر رو نشون میده. برگها (end nodes) هم final decision (class) رو نشون میده. که در این مورد yes یا no هست. رنگها majority class رو در هر نود نشون میده. نودهای تیره تر نشون دهنده خلوص بیشتر از همون کلاس هست(نمونه های بیشتر از همون کلاس).
🤩1
میخوام در مورد چندتا چیز جالب حرف بزنم. یکیش رابطه بین Entropy و probability هست که نمودارش رو پلات کردم. در این پلات محور x نشون دهنده احتمال وقوع یه رویداد دودویی هست (مثل پرتاب سکه). محور y نشون دهنده آنتروپی هست. آنتروپی عدم قطعیت یا بی نظمی توی سیستم رو اندازه گیری می کنه. زمانی که احتمال یه رویداد 0.5 باشه (حداکثر عدم قطعیت) بیشترین مقدار و زمانی که احتمال 0 یا 1 باشه (بدون عدم قطعیت) کمترین اونه. حداکثر آنتروپی زمانی رخ می‌ده که احتمالات برابر باشن. یعنی 0.5 برای شیر و 0.5 برای روباه (بر فرض که یه روی سکه شیره و روی دیگه روباه!)
💯1
Machine Learning Melodies
میخوام در مورد چندتا چیز جالب حرف بزنم. یکیش رابطه بین Entropy و probability هست که نمودارش رو پلات کردم. در این پلات محور x نشون دهنده احتمال وقوع یه رویداد دودویی هست (مثل پرتاب سکه). محور y نشون دهنده آنتروپی هست. آنتروپی عدم قطعیت یا بی نظمی توی سیستم…
حالا جالب میشه بدونید چطور محاسبه شده. طبق فرمول زیر. ابتدا با probabilities = np.linspace(0.01, 0.99, 100) یه رنج از احتمالات رو ساختم. بعد با فرمول آنتروپی مقدار آنتروپی سیستم رو محاسبه کردم. در حالت های مختلف. مثلا حالتی که احتمال شیر اومدن 0.1 و احتمال روباه اومدن 1منهای 0.1 باشه. من در مورد آنتروپی سیستم بالاتر صحبت کرده بودم. میتونید مطالعه کنید.
entropy = -probabilities * np.log2(probabilities) - (1 - probabilities) * np.log2(1 - probabilities)
💯1
در مورد 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 معیار دیگری هست که برای اندازه گیری ناخالصی یه گره توی درخت تصمیم استفاده میشه. اغلب به عنوان جایگزینی برای آنتروپی در مسایل طبقه بندی استفاده میشه.
💯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 به صراحت تلاش میکنه تا تمایز بین کلاس‌ها را مدل‌سازی کنه.
💯1
ایده برای پژوهش: فاین تیون کردن CLIP بر روی تصاویر پزشکی
بیایید برسی کنیم. CLIP یه مدل Multimodal و مخفف عبارت Contrastive Language-Image Pre-Training هست. CLIP با استفاده از میلیون ها پیر تصویر و توضیحات متنی مربوط به اونها ترین شده. یاد میگیره که تصاویر رو با متن مناسب مطابقت بده. ایده کلیدی پشت CLIP "یادگیری متضاد" هست. به این معناست که با مقایسه و تقابل پیرها یاد میگیره. سعی میکنه پیرهای مثبت (مثل تصویر یک گربه و کلمه "گربه") رو در یک representation space به هم نزدیک‌تر کنه در حالی که پیرهای منفی (مثل تصویر یک گربه و کلمه "ماشین") رو از هم دورتر میکنه. از اونجایی که CLIP از حجم وسیعی از داده‌های متنوع یاد میگیره میتونه طیف گسترده‌ای از تصاویر و متن رو درک کنه.
نکته مهم اینه که CLIP میتونه تسکهای رو انجام بده که هرگز به صراحت برای اونها آموزش داده نشده-zero shot learning. به عنوان مثال، اگه از اون بخوایید تصاویر «یک سیب قرمز» رو پیدا کنه، حتی اگر قبلا اون عبارت رو ندیده باشه میتونه این کار رو انجام بده. یعنی قدرت تعمیم بسیار بالایی داره.
ایده ای که میخوام بهتون بدم اینه که میتونیم اونو برای تصاویر پزشکی فاین تیون کنید. اینکار بسیار ارزشمنده. میتونه با تطبیق تصاویر با توضیحات پزشکی مرتبط به پزشکان توی تشخیص بیماری ها کمک کنه. اما اهمیت موضوع بر میگرده به zero shot learning. متخصصان پزشکی اغلب با شرایط جدید یا نادری مواجه میشن که ممکنه در دیتاست های آموزشی به خوبی مستند نشده باشن. یه مدل CLIP فاین تیون شده میتونه از توانایی یادگیری شات صفر خودش برای شناسایی و ارایه اطلاعات مرتبط در مورد این شرایط بر اساس درک پیشرفته‌اش استفاده کنه.
1👎1
Audio
God was cold to my hopes 😊
👍3👎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 استفاده نکنیم👇
👍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)