در این فصل چه یاد میگیری#
تا اینجا همیشه دربارهٔ گذشته حرف زدی: این داده چه میگوید. حالا سؤال عوض میشود — آیا میتوانی چیزی را که ندیدهای پیشبینی کنی؟ یک لپتاپِ تازه با این مشخصات، چند قیمت میخورد؟ در این فصل هیچ کدی نمینویسی که مدل بسازد؛ بهجایش دقیقاً میفهمی یادگیری ماشین چیست، با چه چیزی فرق دارد، و چهار کلمهای را یاد میگیری که تا آخرِ این دوره و کلِ ژرفا هر روز بهکارشان میبری.

آخر این فصل میتوانی:
- بگویی یادگیری ماشین دقیقاً با برنامهنویسیِ معمولی چه فرقی دارد
featureوlabelرا در هر مسئلهای تشخیص بدهی- تفاوتِ
supervisedوunsupervisedرا بگویی - تفاوتِ
regressionوclassificationرا بگویی - بگویی چرا «مدل خوب است» بدونِ یک عدد، یک جملهٔ بیمعناست
قبل از شروع#
از ترمِ ۲: جدولِ تمیز، groupby، همبستگی، و مهمتر از همه: قانونِ «اول داده را ببین».
سلولِ راهاندازی: همان laptops_clean.csv ترمِ ۲.
📓 نوتبوک: نوتبوک این فصل را در Colab باز کن — همهٔ کدهای این فصل آماده و بهترتیب داخلش هست.
۱. تفاوت با برنامهنویسیِ معمولی#
در همهٔ کدهایی که تا اینجا نوشتی، الگو یکی بود: تو قاعده را مینوشتی، کامپیوتر روی داده اجرایش میکرد.
def is_expensive(price):
"""قاعده را «من» نوشتم: هر چیزی بالای ۳۰ میلیون گران است."""
return price > 30_000_000
print(is_expensive(45_000_000))
print(is_expensive(12_000_000))
True
False
آن عددِ ۳۰ میلیون را من انتخاب کردم. کامپیوتر فقط اجرایش کرد.
یادگیری ماشین جهتش برعکس است: تو نمونه میدهی، کامپیوتر قاعده را پیدا میکند.
| برنامهنویسیِ معمولی | یادگیری ماشین | |
|---|---|---|
| ورودیِ تو | قاعده + داده | داده + جوابِ درست |
| خروجی | جواب | قاعده (مدل) |
| کِی بهکار میآید | قاعده را میدانی | قاعده را نمیدانی، ولی نمونه داری |
و همینجا اولین قضاوتِ حرفهای را یاد میگیری: اگر قاعده را میدانی، مدل نساز. برای «آیا این عدد از ۳۰ میلیون بیشتر است؟» یک if بنویس. یادگیری ماشین وقتی بهکار میآید که قاعده را نمیدانی و نوشتنش هم شدنی نیست — مثلاً «قیمتِ منصفانهٔ این لپتاپ چقدر است؟» که به دهها عامل و برهمکنششان بستگی دارد.
💡 نکته: بخشِ بزرگی از پروژههای شکستخوردهٔ یادگیری ماشین مسائلی بودهاند که یک قاعدهٔ ساده حلشان میکرد. مدل، پیچیدگی اضافه میکند و باید هزینهاش را با دقتِ بیشتر پس بدهد. این سؤال را همیشه اول بپرس.
۲. feature و label#
import pandas as pd
df = pd.read_csv("laptops_clean.csv")
features = df[["year", "ram_gb"]]
label = df["price"]
print("شکل features:", features.shape)
print("شکل label:", label.shape)
print(features.head(3))
شکل features: (238, 2)
شکل label: (238,)
year ram_gb
0 2021 32.0
1 2019 16.0
2 2024 8.0
دو کلمهٔ کلیدیِ کلِ این حوزه:
feature— چیزی که میدانی و به مدل میدهی. اینجا سال و حافظه. هر ستونی که ورودیِ مدل است، یکfeatureاست.label— چیزی که میخواهی پیشبینی کنی. اینجا قیمت. به آنtargetهم میگویند.
و یک قراردادِ نامی که در همهٔ کدهای دنیا میبینی: مجموعهٔ featureها را X مینامند (بزرگ، چون جدول است) و labelها را y (کوچک، چون یک ستون است). این قرارداد از ریاضی میآید و در کلِ scikit-learn و PyTorch یکسان است.
شکلها را نگاه کن: X دوبعدی است (238, 2) و y تکبعدی (238,). هر دو باید تعدادِ ردیفِ یکسان داشته باشند — این اولین چیزی است که وقتی خطا گرفتی باید چک کنی.
🌱 ریشهاش کجاست: یک مدل در واقع یک تابع است: چند ورودی میگیرد و یک خروجی میدهد. تفاوتش با تابعهای فصلِ ۷ ترمِ ۱ فقط این است که کسی بدنهاش را ننوشته — از داده ساخته شده. ریشه، ترم ۴ فصل ۱ — تابع: ماشینِ ورودی-خروجی همین ایده را از پایه میسازد.
قبل از ادامه، جواب بده: میخواهی پیشبینی کنی یک مشتری اشتراکش را تمدید میکند یا نه. feature و label کداماند؟ جواب: label همان «تمدید کرد یا نه» است — چیزی که میخواهی حدس بزنی. featureها هر چیزی است که قبل از آن لحظه میدانی: مدتِ عضویت، تعدادِ ورود در ماهِ گذشته، مبلغِ پرداختی. و هر چیزی که فقط بعد از تمدید معلوم میشود، feature نیست — استفاده از آن، همان اشتباهی است که فصلِ ۴ کاملاً به آن اختصاص دارد.
۳. دو نوعِ اصلیِ مسئله#
df["is_expensive"] = df["price"] > df["price"].median()
print("پیشبینی خودِ قیمت (regression):", df["price"].head(3).tolist())
print("پیشبینی گران/ارزان (classification):", df["is_expensive"].head(3).tolist())
print(df["is_expensive"].value_counts().to_dict())
پیشبینی خودِ قیمت (regression): [58500000, 23400000, 54200000]
پیشبینی گران/ارزان (classification): [True, False, True]
{True: 119, False: 119}
regression— وقتیlabelیک عدد پیوسته است: قیمت، دما، مدتِ تحویل.classification— وقتیlabelیک دسته است: گران/ارزان، اسپم/غیراسپم، کدامیک از پنج برند.
همان داده میتواند هر دو باشد — به سؤالت بستگی دارد، نه به داده. اینجا از روی همان ستونِ قیمت یک ستونِ دستهای ساختیم.
✅ چک کن: دو دستهٔ
TrueوFalseباید دقیقاً برابر باشند (۱۱۹ و ۱۱۹). اگر نابرابر شدند، یعنی بهجایmedianاز عددِ ثابتی بهعنوان مرز استفاده کردهای.
توجه کن دو دسته دقیقاً ۱۱۹ و ۱۱۹ شدند، چون مرز را روی میانه گذاشتیم. این تصادفی نیست و در فصلِ ۶ میبینی چرا این انتخاب مهم است.
۴. supervised و unsupervised#
آنچه تا اینجا گفتیم supervised است: برای هر ردیفِ آموزشی، جوابِ درست را داری. مدل از روی جفتهای «ورودی ← جوابِ درست» یاد میگیرد.
unsupervised یعنی جوابِ درستی در کار نیست. فقط داده داری و میپرسی «چه ساختاری در این هست؟» — مثلاً «این ۲۳۸ آگهی به چند دستهٔ طبیعی تقسیم میشوند؟» بدونِ اینکه از قبل دستهها را تعریف کرده باشی.
supervised |
unsupervised |
|
|---|---|---|
| داده | X و y |
فقط X |
| سؤال | «y این ردیفِ تازه چیست؟» |
«چه ساختاری در X هست؟» |
| نمونه | پیشبینیِ قیمت، تشخیصِ اسپم | خوشهبندیِ مشتری، کاهشِ بُعد |
| ارزیابی | ساده: جوابِ درست را داری | سخت: معیارِ قطعی نداری |
کلِ این ترم supervised است، به یک دلیلِ صریح: وقتی جوابِ درست را داری، میتوانی صادقانه اندازه بگیری. و اندازهگیریِ صادقانه نخِ کلِ این دوره است.
۵. چرا «مدل خوب است» یک جملهٔ بیمعناست#
فرض کن مدلی ساختی و میگویی «خوب کار میکند». پنج سؤال بلافاصله میآید:
- چقدر خوب؟ یک عدد بده.
- با چه معیاری؟ میانگینِ خطا؟ درصدِ درست؟ کدام؟
- روی کدام داده؟ همان که با آن ساختی، یا دادهای که ندیده؟
- در برابرِ چه چیزی؟ بهتر از حدسِ ساده؟ چقدر بهتر؟
- چقدر پایدار؟ اگر داده کمی فرق کند، همان نتیجه را میدهد؟
هر پنج تا در فصلهای بعدی جوابِ دقیق میگیرند. ولی همین حالا باید بدانی که این پنج سؤال، خودِ کار هستند — نه یک بازبینیِ آخرِ کار. سه فصلِ بعد بهترتیب همینها را میسازند: فصلِ ۲ اولین مدل، فصلِ ۳ خطِ پایه (سؤالِ ۴)، و فصلِ ۴ سؤالِ ۳ که مهمترینشان است.
📏 اندازه بگیر: سه قانونِ ثابتِ این دوره را دوباره بخوان، چون از این فصل به بعد هر سه هر روز بهکار میآیند: «اول داده را ببین» — «اول یک خطِ پایه بساز» — «روی چیزی که مدل ندیده امتحان کن». ترمِ ۲ کاملاً دربارهٔ قانونِ اول بود. فصلِ ۳ قانونِ دوم است و فصلِ ۴ قانونِ سوم. اگر فقط همین سه را از این دوره ببری، از خیلی از کسانی که مدل میسازند جلوتری.
۶. یک خطای واقعی: شکلِ X اشتباه#
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(df["year"], df["price"])
ValueError: Expected a 2-dimensional container but got <class 'pandas.Series'>
instead. Pass a DataFrame containing a single row (i.e. single sample) or a
single column (i.e. single feature) instead.
df["year"] با یک کروشه یک Series میدهد — تکبعدی. ولی scikit-learn همیشه X را دوبعدی میخواهد، حتی وقتی فقط یک feature داری، چون طراحیاش این است که X جدول باشد.
راهِ درست، دو کروشه: df[["year"]]. همان تفاوتِ Series و DataFrame از ترمِ ۲ فصلِ ۳ — که حالا معلوم شد چرا مهم بود.
🔧 اگر کار نکرد: این خانوادهٔ خطا یکی از پرتکرارترینهای
scikit-learnاست و متنِ دقیقش به نسخه بستگی دارد: برای یکSeriesپیامِ بالا را میگیری و برای یک آرایهٔnumpyِ تکبعدی پیامِ قدیمیترِExpected 2D array, got 1D array insteadرا. هر دو یک چیز میگویند و یک راهِ حل دارند: یک کروشهٔ دیگر اضافه کن (یا برای آرایه،reshape(-1, 1)). عادت کن قبل از هرfit،X.shapeرا چاپ کنی — باید دو عدد داشته باشد.
🤖 از دستیارت بپرس: «سه مسئلهٔ واقعی نام ببر که بهنظر مناسبِ یادگیری ماشین میآیند ولی در واقع با یک قاعدهٔ ساده بهتر حل میشوند.» جوابش را با معیارِ بخشِ ۱ بسنج. این سؤال عمداً برعکسِ چیزی است که معمولاً میپرسند — و تشخیصِ اینکه کِی نباید مدل ساخت، بهاندازهٔ ساختنش مهارت است.
واژههای تازهٔ این فصل#
| کلمه | تلفظ به حروف فارسی | یعنی چه |
|---|---|---|
| feature | فیچِر | ستونی که به مدل میدهی؛ چیزی که میدانی |
| label / target | لِیبِل / تارگت | چیزی که میخواهی پیشبینی کنی |
| X / y | ایکس / وای | قراردادِ جهانی: جدولِ featureها / ستونِ label |
| regression | رگرسیون | پیشبینیِ یک عددِ پیوسته |
| classification | کلَسیفیکیشِن | پیشبینیِ یک دسته |
| supervised / unsupervised | سوپروایزد / آنسوپروایزد | با جوابِ درست / بدونِ جوابِ درست |
تمرینها
اول خودت فکر کن یا امتحان کن — بعد اینجا را باز کن.
در فصل بعد#
حالا واژهها را داری. فصلِ بعد اولین مدلِ واقعیات را میسازی — در سه خط کد — و اولین پیشبینیات را میگیری. و بلافاصله میبینی که آن سه خط، آسانترین بخشِ ماجراست: کارِ اصلی آنجاست که بپرسی این عددی که مدل داد، اصلاً خوب است یا نه.
به آخر این فصل رسیدی!
اگر ساختی و جواب داد، این دکمه مال توست.