import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
# تولید دیتاست مصنوعی برای بیماری قلبی
# این دیتاست شامل 1000 نمونه و 20 ویژگی است، از جمله 2 ویژگی مهم
X, y = make_classification(n_samples=1000, n_features=20, n_informative=5, n_redundant=10, random_state=42)
# تقسیم دادهها به مجموعههای آموزش و آزمایش
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# ایجاد مدل درخت تصمیم
clf = DecisionTreeClassifier(random_state=42)
clf.fit(X_train, y_train)
# ارزیابی مدل
print("Accuracy on test set:", clf.score(X_test, y_test))
# رسم درخت
fig, ax = plt.subplots(figsize=(20, 10)) # اندازهی دلخواه برای رسم
tree.plot_tree(clf, filled=True, ax=ax)
# نمایش درخت
plt.show()
گفتم شاید براتون جالب باشه این میاد و بعد اجرای یک درخت اونو رسم میکنه
اینطوری میتونید نحوه عملکرد درخت رو گرافیکی ببینید نه فقط نتیجه توی ترمینال
(Chat gpt)
👍5🔥1
پارت ۱: مقدمه و توضیحات کلی درباره الگوریتم KNN 🎯🔍
۱.۱ معرفی الگوریتم KNN 🤖📊
K-Nearest Neighbors (KNN) یکی از سادهترین و در عین حال قدرتمندترین الگوریتمهای یادگیری ماشین در دسته طبقهبندی (Classification) و رگرسیون (Regression) است. این الگوریتم بدون نیاز به یادگیری پیچیده، فقط با بررسی همسایههای نزدیک، دادههای جدید را طبقهبندی میکند! 🚀
💡 KNN چگونه کار میکند؟
✅ مرحله ۱: یک داده جدید دریافت میشود که باید برچسبگذاری شود.
✅ مرحله ۲: فاصله آن داده با همه نقاط دادههای آموزشی محاسبه میشود. 📏
✅ مرحله ۳: K عدد از نزدیکترین همسایهها انتخاب میشوند. 🏡
✅ مرحله ۴: در طبقهبندی (Classification)، رأیگیری انجام شده و کلاسی که بیشترین رأی را دارد، انتخاب میشود. 📊✅
✅ مرحله ۵: در رگرسیون (Regression)، میانگین مقادیر همسایهها محاسبه شده و مقدار نهایی پیشبینی میشود. 🔢🔍
✳ نکته مهم: KNN به هیچ مدل پیچیدهای نیاز ندارد و فقط دادههای قبلی را برای تصمیمگیری بررسی میکند، به همین دلیل به آن یادگیری بر پایه نمونه (Instance-Based Learning) هم گفته میشود. 🔄
۱.۲ KNN در مسائل مولتیکلاس کلاسیفیکیشن 🎯🎨
KNN یکی از بهترین گزینهها برای مسائل طبقهبندی چندکلاسه (Multi-Class Classification) است! 💡 در این نوع مسائل، مدل باید دادهها را به بیش از دو کلاس مختلف تخصیص دهد.
🔹 مثال واقعی: فرض کنید یک مدل بخواهد نوع یک گل را بر اساس ویژگیهای آن پیشبینی کند. در اینجا سه کلاس داریم:
🌸 Setosa
🌺 Versicolor
🌻 Virginica
اگر یک گل جدید با ویژگیهای ناشناخته داده شود، KNN بررسی میکند که نزدیکترین گلهای مشابه از چه نوعی هستند و بر اساس اکثریت آراء، کلاس مناسب را انتخاب میکند. 🌱🌿
۱.۳ مزایا و معایب الگوریتم KNN ⚖️
🔷 مزایای KNN ✅
✅ سادگی و شهودی بودن – این الگوریتم بسیار ساده و قابل فهم است. 📚
✅ دقت بالا در بسیاری از مسائل – در صورتی که مقدار K مناسب انتخاب شود، KNN عملکرد بسیار خوبی دارد. 🎯
✅ عدم نیاز به یادگیری پیچیده – نیازی به آموزش مدل ندارد و فقط بر اساس دادههای موجود پیشبینی میکند. 🔄
🔶 معایب KNN ❌
❌ محاسبات سنگین برای دادههای حجیم – در صورتی که حجم دادههای آموزشی بزرگ باشد، پیدا کردن K همسایه نزدیکتر میتواند زمانبر باشد. ⏳🔍
❌ حساسیت به دادههای نامرتبط – در صورت وجود ویژگیهای غیرضروری، عملکرد مدل کاهش پیدا میکند. 🔻
۱.۴ چرا KNN را انتخاب کنیم؟ 🤔💡
📌 اگر به دنبال یک الگوریتم ساده، قدرتمند و مؤثر برای طبقهبندی چندکلاسه هستید، KNN یک انتخاب عالی است! 🎯
📌 این الگوریتم به راحتی در مسائل واقعی مثل تشخیص بیماریها، فیلتر کردن ایمیلهای اسپم، پیشبینی نوع محصول و حتی تشخیص چهره! استفاده میشود. 📊🔍
جمعبندی پارت ۱:
✅ KNN یک الگوریتم مبتنی بر شباهت است که دادههای جدید را بر اساس K همسایه نزدیک آن دستهبندی میکند.
✅ این الگوریتم برای مسائل طبقهبندی چندکلاسه بسیار مؤثر است و در بسیاری از مسائل دنیای واقعی کاربرد دارد.
✅ انتخاب مقدار K بسیار مهم است، زیرا مقدار نامناسب میتواند عملکرد مدل را تحت تأثیر قرار دهد.
[لینک کانال ما]
🔥 در پارت بعدی، نحوه آمادهسازی دادهها و پیشپردازش آنها را بررسی خواهیم کرد! 🔥
📌 منتظر پارت ۲ باشید... 🚀✨
#یادگیری_ماشین 🤖 #KNN 📊 #هوش_مصنوعی #طبقه_بندی #MachineLearning #AI #کلاسیفیکیشن 🎯
۱.۱ معرفی الگوریتم KNN 🤖📊
K-Nearest Neighbors (KNN) یکی از سادهترین و در عین حال قدرتمندترین الگوریتمهای یادگیری ماشین در دسته طبقهبندی (Classification) و رگرسیون (Regression) است. این الگوریتم بدون نیاز به یادگیری پیچیده، فقط با بررسی همسایههای نزدیک، دادههای جدید را طبقهبندی میکند! 🚀
💡 KNN چگونه کار میکند؟
✅ مرحله ۱: یک داده جدید دریافت میشود که باید برچسبگذاری شود.
✅ مرحله ۲: فاصله آن داده با همه نقاط دادههای آموزشی محاسبه میشود. 📏
✅ مرحله ۳: K عدد از نزدیکترین همسایهها انتخاب میشوند. 🏡
✅ مرحله ۴: در طبقهبندی (Classification)، رأیگیری انجام شده و کلاسی که بیشترین رأی را دارد، انتخاب میشود. 📊✅
✅ مرحله ۵: در رگرسیون (Regression)، میانگین مقادیر همسایهها محاسبه شده و مقدار نهایی پیشبینی میشود. 🔢🔍
✳ نکته مهم: KNN به هیچ مدل پیچیدهای نیاز ندارد و فقط دادههای قبلی را برای تصمیمگیری بررسی میکند، به همین دلیل به آن یادگیری بر پایه نمونه (Instance-Based Learning) هم گفته میشود. 🔄
۱.۲ KNN در مسائل مولتیکلاس کلاسیفیکیشن 🎯🎨
KNN یکی از بهترین گزینهها برای مسائل طبقهبندی چندکلاسه (Multi-Class Classification) است! 💡 در این نوع مسائل، مدل باید دادهها را به بیش از دو کلاس مختلف تخصیص دهد.
🔹 مثال واقعی: فرض کنید یک مدل بخواهد نوع یک گل را بر اساس ویژگیهای آن پیشبینی کند. در اینجا سه کلاس داریم:
🌸 Setosa
🌺 Versicolor
🌻 Virginica
اگر یک گل جدید با ویژگیهای ناشناخته داده شود، KNN بررسی میکند که نزدیکترین گلهای مشابه از چه نوعی هستند و بر اساس اکثریت آراء، کلاس مناسب را انتخاب میکند. 🌱🌿
۱.۳ مزایا و معایب الگوریتم KNN ⚖️
🔷 مزایای KNN ✅
✅ سادگی و شهودی بودن – این الگوریتم بسیار ساده و قابل فهم است. 📚
✅ دقت بالا در بسیاری از مسائل – در صورتی که مقدار K مناسب انتخاب شود، KNN عملکرد بسیار خوبی دارد. 🎯
✅ عدم نیاز به یادگیری پیچیده – نیازی به آموزش مدل ندارد و فقط بر اساس دادههای موجود پیشبینی میکند. 🔄
🔶 معایب KNN ❌
❌ محاسبات سنگین برای دادههای حجیم – در صورتی که حجم دادههای آموزشی بزرگ باشد، پیدا کردن K همسایه نزدیکتر میتواند زمانبر باشد. ⏳🔍
❌ حساسیت به دادههای نامرتبط – در صورت وجود ویژگیهای غیرضروری، عملکرد مدل کاهش پیدا میکند. 🔻
۱.۴ چرا KNN را انتخاب کنیم؟ 🤔💡
📌 اگر به دنبال یک الگوریتم ساده، قدرتمند و مؤثر برای طبقهبندی چندکلاسه هستید، KNN یک انتخاب عالی است! 🎯
📌 این الگوریتم به راحتی در مسائل واقعی مثل تشخیص بیماریها، فیلتر کردن ایمیلهای اسپم، پیشبینی نوع محصول و حتی تشخیص چهره! استفاده میشود. 📊🔍
جمعبندی پارت ۱:
✅ KNN یک الگوریتم مبتنی بر شباهت است که دادههای جدید را بر اساس K همسایه نزدیک آن دستهبندی میکند.
✅ این الگوریتم برای مسائل طبقهبندی چندکلاسه بسیار مؤثر است و در بسیاری از مسائل دنیای واقعی کاربرد دارد.
✅ انتخاب مقدار K بسیار مهم است، زیرا مقدار نامناسب میتواند عملکرد مدل را تحت تأثیر قرار دهد.
[لینک کانال ما]
🔥 در پارت بعدی، نحوه آمادهسازی دادهها و پیشپردازش آنها را بررسی خواهیم کرد! 🔥
📌 منتظر پارت ۲ باشید... 🚀✨
#یادگیری_ماشین 🤖 #KNN 📊 #هوش_مصنوعی #طبقه_بندی #MachineLearning #AI #کلاسیفیکیشن 🎯
Telegram
Python3
🎓 آموزش و پروژههای Python
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
پارت ۲: آمادهسازی دادهها و پیشپردازش در KNN 🔍📊
۲.۱ چرا پیشپردازش دادهها در KNN مهم است؟ 🤔⚙️
الگوریتم KNN کاملاً بر اساس محاسبه فاصله بین نقاط کار میکند، پس دادههای نامرتب یا ناسازگار میتوانند روی دقت مدل تأثیر منفی بگذارند. 😱 به همین دلیل، قبل از اجرای مدل، باید دادهها را پیشپردازش (Preprocessing) کنیم.
✅ چرا پیشپردازش مهم است؟
🔹 ویژگیهای نامربوط میتوانند باعث شوند که KNN تصمیم اشتباهی بگیرد. ❌
🔹 ویژگیهایی که مقیاس متفاوتی دارند ممکن است مدل را تحت تأثیر قرار دهند. مثلاً اگر یک ویژگی در مقیاس 0 تا 1 و ویژگی دیگر در مقیاس 1000 تا 100000 باشد، ویژگی بزرگتر اهمیت بیشتری خواهد داشت که ممکن است نادرست باشد! 😵📏
🔹 دادههای پرت (Outliers) ممکن است عملکرد KNN را مختل کنند. ⚠️
پس حالا بریم سراغ مراحل آمادهسازی دادهها! 🚀
۲.۲ مراحل پیشپردازش دادهها برای KNN 📊🔧
💡 ۱. بارگذاری دیتاست 📥
اولین قدم، بارگذاری مجموعه داده (Dataset) است. در اینجا از مجموعه داده Iris استفاده میکنیم که اطلاعات مربوط به سه نوع گل مختلف را دارد. 🌸🌺🌻
📌 این دیتاست شامل ۴ ویژگی است:
🔹 طول کاسبرگ (sepal length)
🔹 عرض کاسبرگ (sepal width)
🔹 طول گلبرگ (petal length)
🔹 عرض گلبرگ (petal width)
🔹 و ۳ کلاس مختلف برای انواع گل که مقدار
💡 ۲. بررسی دادههای ناقص و حذف آنها ⚠️
قبل از ادامه، باید مطمئن شویم که دادههای گمشده (Missing Data) وجود ندارد. 🚨
✅ اگر دادهای گمشده باشد، میتوانیم آن را با مقدار میانگین جایگزین کنیم:
💡 ۳. نرمالسازی ویژگیها (Feature Scaling) 📏⚖️
الگوریتم KNN به شدت تحت تأثیر مقیاس دادهها قرار دارد. اگر بعضی از ویژگیها دارای دامنه اعداد بزرگتر باشند، مدل دچار مشکل خواهد شد. 😬 پس نیاز به نرمالسازی (Normalization) یا استانداردسازی (Standardization) داریم.
📌 دو روش رایج:
1️⃣ Min-Max Scaling (مقادیر را بین ۰ و ۱ قرار میدهد)
2️⃣ Standard Scaling (مقادیر را نرمال میکند که میانگین ۰ و انحراف معیار ۱ باشد)
✅ حالا همه ویژگیها در یک محدوده مشابه قرار دارند و KNN عملکرد بهتری خواهد داشت! 🎯
💡 ۴. تقسیم دادهها به مجموعه آموزش و تست 📊
حالا که دادهها آماده شدند، باید آنها را به دو بخش تقسیم کنیم:
✅ دادههای آموزش (Train Set): برای یادگیری مدل
✅ دادههای تست (Test Set): برای ارزیابی عملکرد مدل
✅ ۸۰٪ دادهها برای آموزش و ۲۰٪ برای تست مدل استفاده خواهند شد.
۲.۳ جمعبندی پارت ۲:
✅ در این پارت یاد گرفتیم که چرا پیشپردازش دادهها در KNN اهمیت دارد.
✅ مراحل اصلی پیشپردازش را انجام دادیم:
🔹 بارگذاری دیتاست
🔹 بررسی دادههای گمشده و جایگزینی آنها
🔹 نرمالسازی و استانداردسازی ویژگیها
🔹 تقسیم دادهها به مجموعه آموزش و تست
[لینک کانال ما]
🔥 در پارت بعدی، به سراغ پیادهسازی مدل KNN با استفاده از sklearn میرویم! 🔥
📌 منتظر پارت ۳ باشید... 🚀✨
#یادگیری_ماشین 🤖 #KNN 📊 #هوش_مصنوعی #طبقه_بندی #MachineLearning #AI #کلاسیفیکیشن 🎯
۲.۱ چرا پیشپردازش دادهها در KNN مهم است؟ 🤔⚙️
الگوریتم KNN کاملاً بر اساس محاسبه فاصله بین نقاط کار میکند، پس دادههای نامرتب یا ناسازگار میتوانند روی دقت مدل تأثیر منفی بگذارند. 😱 به همین دلیل، قبل از اجرای مدل، باید دادهها را پیشپردازش (Preprocessing) کنیم.
✅ چرا پیشپردازش مهم است؟
🔹 ویژگیهای نامربوط میتوانند باعث شوند که KNN تصمیم اشتباهی بگیرد. ❌
🔹 ویژگیهایی که مقیاس متفاوتی دارند ممکن است مدل را تحت تأثیر قرار دهند. مثلاً اگر یک ویژگی در مقیاس 0 تا 1 و ویژگی دیگر در مقیاس 1000 تا 100000 باشد، ویژگی بزرگتر اهمیت بیشتری خواهد داشت که ممکن است نادرست باشد! 😵📏
🔹 دادههای پرت (Outliers) ممکن است عملکرد KNN را مختل کنند. ⚠️
پس حالا بریم سراغ مراحل آمادهسازی دادهها! 🚀
۲.۲ مراحل پیشپردازش دادهها برای KNN 📊🔧
💡 ۱. بارگذاری دیتاست 📥
اولین قدم، بارگذاری مجموعه داده (Dataset) است. در اینجا از مجموعه داده Iris استفاده میکنیم که اطلاعات مربوط به سه نوع گل مختلف را دارد. 🌸🌺🌻
import pandas as pd
from sklearn.datasets import load_iris
# بارگذاری دیتاست
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['target'] = iris.target # اضافه کردن برچسبها (کلاسها)
# نمایش ۵ نمونه اول
print(df.head())
📌 این دیتاست شامل ۴ ویژگی است:
🔹 طول کاسبرگ (sepal length)
🔹 عرض کاسبرگ (sepal width)
🔹 طول گلبرگ (petal length)
🔹 عرض گلبرگ (petal width)
🔹 و ۳ کلاس مختلف برای انواع گل که مقدار
target
آنها ۰، ۱ و ۲ است. 💡 ۲. بررسی دادههای ناقص و حذف آنها ⚠️
قبل از ادامه، باید مطمئن شویم که دادههای گمشده (Missing Data) وجود ندارد. 🚨
print(df.isnull().sum()) # بررسی دادههای خالی
✅ اگر دادهای گمشده باشد، میتوانیم آن را با مقدار میانگین جایگزین کنیم:
df.fillna(df.mean(), inplace=True) # جایگزینی مقادیر گمشده با میانگین هر ستون
💡 ۳. نرمالسازی ویژگیها (Feature Scaling) 📏⚖️
الگوریتم KNN به شدت تحت تأثیر مقیاس دادهها قرار دارد. اگر بعضی از ویژگیها دارای دامنه اعداد بزرگتر باشند، مدل دچار مشکل خواهد شد. 😬 پس نیاز به نرمالسازی (Normalization) یا استانداردسازی (Standardization) داریم.
📌 دو روش رایج:
1️⃣ Min-Max Scaling (مقادیر را بین ۰ و ۱ قرار میدهد)
2️⃣ Standard Scaling (مقادیر را نرمال میکند که میانگین ۰ و انحراف معیار ۱ باشد)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df.iloc[:, :-1] = scaler.fit_transform(df.iloc[:, :-1]) # استانداردسازی ویژگیها
✅ حالا همه ویژگیها در یک محدوده مشابه قرار دارند و KNN عملکرد بهتری خواهد داشت! 🎯
💡 ۴. تقسیم دادهها به مجموعه آموزش و تست 📊
حالا که دادهها آماده شدند، باید آنها را به دو بخش تقسیم کنیم:
✅ دادههای آموزش (Train Set): برای یادگیری مدل
✅ دادههای تست (Test Set): برای ارزیابی عملکرد مدل
from sklearn.model_selection import train_test_split
X = df.iloc[:, :-1] # ویژگیها (Features)
y = df['target'] # برچسبها (Labels)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print(f"تعداد نمونههای آموزش: {X_train.shape[0]}")
print(f"تعداد نمونههای تست: {X_test.shape[0]}")
✅ ۸۰٪ دادهها برای آموزش و ۲۰٪ برای تست مدل استفاده خواهند شد.
۲.۳ جمعبندی پارت ۲:
✅ در این پارت یاد گرفتیم که چرا پیشپردازش دادهها در KNN اهمیت دارد.
✅ مراحل اصلی پیشپردازش را انجام دادیم:
🔹 بارگذاری دیتاست
🔹 بررسی دادههای گمشده و جایگزینی آنها
🔹 نرمالسازی و استانداردسازی ویژگیها
🔹 تقسیم دادهها به مجموعه آموزش و تست
[لینک کانال ما]
🔥 در پارت بعدی، به سراغ پیادهسازی مدل KNN با استفاده از sklearn میرویم! 🔥
📌 منتظر پارت ۳ باشید... 🚀✨
#یادگیری_ماشین 🤖 #KNN 📊 #هوش_مصنوعی #طبقه_بندی #MachineLearning #AI #کلاسیفیکیشن 🎯
Telegram
Python3
🎓 آموزش و پروژههای Python
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
👍1
پارت ۳: پیادهسازی مدل KNN با sklearn
در این بخش، مدل KNN را با استفاده از کتابخانه scikit-learn پیادهسازی میکنیم و آن را روی مجموعه داده Iris آزمایش خواهیم کرد.
۱. دریافت دادهها و آمادهسازی آنها
۲. ساخت و آموزش مدل KNN
۳. ارزیابی مدل و محاسبه دقت
۴. پیشبینی یک نمونه جدید
جمعبندی
در این بخش:
۱. دادههای Iris را بارگذاری و پردازش کردیم
۲. مدل KNN را با
۳. مدل را ارزیابی کردیم و دقت آن را محاسبه کردیم
۴. یک نمونه جدید را به مدل دادیم و کلاس آن را پیشبینی کردیم
در پارت بعدی، روشهای بهینهسازی مدل KNN را بررسی خواهیم کرد.
در این بخش، مدل KNN را با استفاده از کتابخانه scikit-learn پیادهسازی میکنیم و آن را روی مجموعه داده Iris آزمایش خواهیم کرد.
۱. دریافت دادهها و آمادهسازی آنها
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# دریافت دیتاست Iris
iris = load_iris()
X, y = iris.data, iris.target
# تقسیم دادهها به مجموعه آموزش و تست (۸۰٪ آموزش، ۲۰٪ تست)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# نرمالسازی دادهها برای بهبود عملکرد KNN
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
۲. ساخت و آموزش مدل KNN
from sklearn.neighbors import KNeighborsClassifier
# مقدار K را مشخص میکنیم
k = 3
# مدل KNN را میسازیم و آموزش میدهیم
knn = KNeighborsClassifier(n_neighbors=k)
knn.fit(X_train, y_train)
print("مدل KNN آموزش داده شد!")
۳. ارزیابی مدل و محاسبه دقت
from sklearn.metrics import accuracy_score
# پیشبینی دادههای تست
y_pred = knn.predict(X_test)
# محاسبه دقت مدل
accuracy = accuracy_score(y_test, y_pred)
print(f"دقت مدل: {accuracy:.2f}")
۴. پیشبینی یک نمونه جدید
import numpy as np
# یک نمونه جدید برای پیشبینی
new_sample = np.array([[5.1, 3.5, 1.4, 0.2]]) # ویژگیهای گل جدید
new_sample = scaler.transform(new_sample) # نرمالسازی نمونه
# انجام پیشبینی
predicted_class = knn.predict(new_sample)[0]
# نمایش نتیجه
print(f"مدل پیشبینی کرد که این گل از کلاس: {iris.target_names[predicted_class]} است")
جمعبندی
در این بخش:
۱. دادههای Iris را بارگذاری و پردازش کردیم
۲. مدل KNN را با
sklearn
پیادهسازی کردیم ۳. مدل را ارزیابی کردیم و دقت آن را محاسبه کردیم
۴. یک نمونه جدید را به مدل دادیم و کلاس آن را پیشبینی کردیم
در پارت بعدی، روشهای بهینهسازی مدل KNN را بررسی خواهیم کرد.
👍1
پارت ۴: بهینهسازی مدل KNN و انتخاب بهترین مقدار K 🎯🔧
۴.۱ چرا مقدار K مهم است؟ 🤔
مقدار K (تعداد همسایههای نزدیک) تأثیر زیادی روی دقت مدل KNN دارد! 😱
✅ اگر K خیلی کوچک باشد (مثلاً ۱ یا ۲):
🔹 مدل ممکن است بیش از حد به دادههای آموزش وابسته شود (Overfitting).
✅ اگر K خیلی بزرگ باشد (مثلاً ۲۰ یا ۳۰):
🔹 مدل ممکن است بیش از حد متوسطگیری کند و دقت کاهش یابد.
📌 بنابراین باید مقدار K را بهینهسازی کنیم تا بهترین عملکرد را داشته باشیم. 🚀
۴.۲ پیدا کردن بهترین مقدار K به صورت خودکار 🔄📊
یکی از بهترین راهها برای پیدا کردن مقدار مناسب K، تست کردن چند مقدار مختلف و بررسی دقت مدل است. 🎯
۱. آزمایش چند مقدار مختلف برای K
📌 با این نمودار، میتوانیم مقدار K را پیدا کنیم که دقت مدل بیشترین مقدار باشد! 🎯
۴.۳ بررسی تأثیر انتخاب ویژگیها (Feature Selection) 🎛️📉
برخی ویژگیها ممکن است نامربوط یا نویزی باشند و مدل را دچار مشکل کنند. بنابراین میتوانیم بهترین ویژگیها را انتخاب کنیم تا عملکرد مدل بهتر شود!
📌 برای بررسی اهمیت ویژگیها از روش
✅ این روش به ما نشان میدهد که کدام ویژگیها برای مدل مهمتر هستند و میتوانیم ویژگیهای کماهمیت را حذف کنیم!
۴.۴ مقایسه KNN با مدلهای دیگر 🤖⚖️
گاهی اوقات KNN بهترین انتخاب نیست و میتوان مدلهای دیگر را هم امتحان کرد.
🔹 درخت تصمیم (Decision Tree) 🌲
🔹 رگرسیون لجستیک (Logistic Regression) 📈
🔹 ماشین بردار پشتیبان (SVM) 🏆
📌 برای مقایسه، یک درخت تصمیم ساده را اجرا میکنیم:
✅ اگر مدل درخت تصمیم عملکرد بهتری داشت، ممکن است برای این مجموعه داده مناسبتر باشد!
۴.۵ جمعبندی نهایی پارت ۴:
✅ مقدار بهینه K را پیدا کردیم تا دقت مدل را بهبود دهیم.
✅ بررسی کردیم که همه ویژگیها مفید نیستند و برخی را میتوان حذف کرد.
✅ KNN را با مدلهای دیگر مقایسه کردیم تا ببینیم آیا گزینه بهتری وجود دارد یا نه.
🎯 حالا شما یک متخصص KNN هستید! 🎯🔥
📌 در آموزش بعدی، پیادهسازی دستی KNN را انجام خواهیم داد! 🚀
[لینک کانال ما]
#یادگیری_ماشین 🤖 #KNN 📊 #هوش_مصنوعی #بهینه_سازی #MachineLearning #AI #کلاسیفیکیشن 🎯
۴.۱ چرا مقدار K مهم است؟ 🤔
مقدار K (تعداد همسایههای نزدیک) تأثیر زیادی روی دقت مدل KNN دارد! 😱
✅ اگر K خیلی کوچک باشد (مثلاً ۱ یا ۲):
🔹 مدل ممکن است بیش از حد به دادههای آموزش وابسته شود (Overfitting).
✅ اگر K خیلی بزرگ باشد (مثلاً ۲۰ یا ۳۰):
🔹 مدل ممکن است بیش از حد متوسطگیری کند و دقت کاهش یابد.
📌 بنابراین باید مقدار K را بهینهسازی کنیم تا بهترین عملکرد را داشته باشیم. 🚀
۴.۲ پیدا کردن بهترین مقدار K به صورت خودکار 🔄📊
یکی از بهترین راهها برای پیدا کردن مقدار مناسب K، تست کردن چند مقدار مختلف و بررسی دقت مدل است. 🎯
۱. آزمایش چند مقدار مختلف برای K
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import accuracy_score
# لیستی برای ذخیره دقتها
accuracy_scores = []
# تست مقدار K از 1 تا 20
k_values = range(1, 21)
for k in k_values:
knn = KNeighborsClassifier(n_neighbors=k)
knn.fit(X_train, y_train) # آموزش مدل
y_pred = knn.predict(X_test) # پیشبینی
accuracy_scores.append(accuracy_score(y_test, y_pred)) # ذخیره دقت
# رسم نمودار تغییرات دقت بر حسب K
plt.figure(figsize=(8,5))
plt.plot(k_values, accuracy_scores, marker='o', linestyle='-', color='b', label="دقت مدل")
plt.xlabel("تعداد همسایههای K")
plt.ylabel("دقت مدل")
plt.title("بهترین مقدار K برای KNN")
plt.legend()
plt.grid()
plt.show()
📌 با این نمودار، میتوانیم مقدار K را پیدا کنیم که دقت مدل بیشترین مقدار باشد! 🎯
۴.۳ بررسی تأثیر انتخاب ویژگیها (Feature Selection) 🎛️📉
برخی ویژگیها ممکن است نامربوط یا نویزی باشند و مدل را دچار مشکل کنند. بنابراین میتوانیم بهترین ویژگیها را انتخاب کنیم تا عملکرد مدل بهتر شود!
📌 برای بررسی اهمیت ویژگیها از روش
SelectKBest
استفاده میکنیم. from sklearn.feature_selection import SelectKBest, f_classif
# انتخاب ۲ ویژگی برتر از ۴ ویژگی دیتاست
selector = SelectKBest(score_func=f_classif, k=2)
X_new = selector.fit_transform(X, y)
# نمایش نمره هر ویژگی
feature_scores = selector.scores_
for i, score in enumerate(feature_scores):
print(f"ویژگی {iris.feature_names[i]} → امتیاز: {score:.2f}")
✅ این روش به ما نشان میدهد که کدام ویژگیها برای مدل مهمتر هستند و میتوانیم ویژگیهای کماهمیت را حذف کنیم!
۴.۴ مقایسه KNN با مدلهای دیگر 🤖⚖️
گاهی اوقات KNN بهترین انتخاب نیست و میتوان مدلهای دیگر را هم امتحان کرد.
🔹 درخت تصمیم (Decision Tree) 🌲
🔹 رگرسیون لجستیک (Logistic Regression) 📈
🔹 ماشین بردار پشتیبان (SVM) 🏆
📌 برای مقایسه، یک درخت تصمیم ساده را اجرا میکنیم:
from sklearn.tree import DecisionTreeClassifier
dt = DecisionTreeClassifier()
dt.fit(X_train, y_train)
y_pred_dt = dt.predict(X_test)
# دقت مدل درخت تصمیم
print(f"دقت مدل درخت تصمیم: {accuracy_score(y_test, y_pred_dt):.2f}")
✅ اگر مدل درخت تصمیم عملکرد بهتری داشت، ممکن است برای این مجموعه داده مناسبتر باشد!
۴.۵ جمعبندی نهایی پارت ۴:
✅ مقدار بهینه K را پیدا کردیم تا دقت مدل را بهبود دهیم.
✅ بررسی کردیم که همه ویژگیها مفید نیستند و برخی را میتوان حذف کرد.
✅ KNN را با مدلهای دیگر مقایسه کردیم تا ببینیم آیا گزینه بهتری وجود دارد یا نه.
🎯 حالا شما یک متخصص KNN هستید! 🎯🔥
📌 در آموزش بعدی، پیادهسازی دستی KNN را انجام خواهیم داد! 🚀
[لینک کانال ما]
#یادگیری_ماشین 🤖 #KNN 📊 #هوش_مصنوعی #بهینه_سازی #MachineLearning #AI #کلاسیفیکیشن 🎯
Telegram
Python3
🎓 آموزش و پروژههای Python
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
👍1
پروژه کامل KNN: تشخیص دستخط ارقام (MNIST) 🔢🤖
✅ در این پروژه، یک مدل KNN را روی مجموعه داده MNIST پیادهسازی میکنیم تا بتواند دستخط اعداد (۰ تا ۹) را شناسایی کند! 🎯
📌 مراحل پروژه:
1️⃣ دریافت و آمادهسازی دادهها
2️⃣ نمایش چند نمونه از دادهها
3️⃣ تقسیم دادهها به مجموعه آموزش و تست
4️⃣ ساخت و آموزش مدل KNN
5️⃣ ارزیابی مدل و محاسبه دقت
6️⃣ پیشبینی یک نمونه جدید
۱. دریافت و آمادهسازی دادهها 📥
ابتدا مجموعه داده MNIST را بارگذاری کرده و آن را آماده میکنیم.
۲. نمایش چند نمونه از ارقام 🔢
برای درک بهتر، چند عدد دستنویس را نمایش میدهیم.
۳. تقسیم دادهها به مجموعه آموزش و تست 🎯
ما دادهها را به ۷۰٪ آموزش و ۳۰٪ تست تقسیم میکنیم.
۴. ساخت و آموزش مدل KNN 🤖
حالا مدل KNN را ایجاد کرده و آن را روی دادههای آموزشی تمرین میدهیم.
۵. ارزیابی مدل و محاسبه دقت 📊
حالا دقت مدل را بررسی میکنیم تا ببینیم چقدر خوب کار میکند!
📌 اگر دقت بالا باشد (مثلاً ۹۵٪)، یعنی مدل ما عملکرد خوبی دارد! 🚀
۶. پیشبینی یک نمونه جدید 🤔🔮
بیایید یک عدد تصادفی از دادههای تست انتخاب کرده و مدل را روی آن آزمایش کنیم!
✅ اگر مدل عدد صحیح را تشخیص دهد، یعنی عملکرد آن خوب است! 🎯
🎯 جمعبندی پروژه:
✅ یک مدل KNN برای تشخیص اعداد دستنویس ساختیم.
✅ مدل را روی مجموعه داده MNIST آموزش دادیم.
✅ دقت مدل را محاسبه کردیم و یک عدد جدید را تست کردیم.
📌 حالا شما میتوانید این مدل را روی تصاویر خودتان آزمایش کنید! 🤖🔥
[لینک کانال ما]
#یادگیری_ماشین 🤖 #KNN #هوش_مصنوعی #تشخیص_اعداد 🔢 #MachineLearning #AI #کلاسیفیکیشن 🎯
✅ در این پروژه، یک مدل KNN را روی مجموعه داده MNIST پیادهسازی میکنیم تا بتواند دستخط اعداد (۰ تا ۹) را شناسایی کند! 🎯
📌 مراحل پروژه:
1️⃣ دریافت و آمادهسازی دادهها
2️⃣ نمایش چند نمونه از دادهها
3️⃣ تقسیم دادهها به مجموعه آموزش و تست
4️⃣ ساخت و آموزش مدل KNN
5️⃣ ارزیابی مدل و محاسبه دقت
6️⃣ پیشبینی یک نمونه جدید
۱. دریافت و آمادهسازی دادهها 📥
ابتدا مجموعه داده MNIST را بارگذاری کرده و آن را آماده میکنیم.
from sklearn.datasets import fetch_openml
import numpy as np
import matplotlib.pyplot as plt
# دریافت دیتاست MNIST
mnist = fetch_openml('mnist_784', version=1, as_frame=False)
X, y = mnist.data, mnist.target # ویژگیها و برچسبها
# تبدیل برچسبها به اعداد صحیح
y = y.astype(int)
# نمایش ابعاد دیتاست
print(f"✅ تعداد نمونهها: {X.shape[0]}, تعداد ویژگیها: {X.shape[1]}")
۲. نمایش چند نمونه از ارقام 🔢
برای درک بهتر، چند عدد دستنویس را نمایش میدهیم.
# نمایش چند تصویر از دیتاست
fig, axes = plt.subplots(1, 5, figsize=(10,3))
for i, ax in enumerate(axes):
ax.imshow(X[i].reshape(28,28), cmap="gray")
ax.set_title(f"عدد: {y[i]}")
ax.axis("off")
plt.show()
۳. تقسیم دادهها به مجموعه آموزش و تست 🎯
ما دادهها را به ۷۰٪ آموزش و ۳۰٪ تست تقسیم میکنیم.
from sklearn.model_selection import train_test_split
# تقسیم دادهها
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
print(f"✅ دادههای آموزش: {X_train.shape[0]}, دادههای تست: {X_test.shape[0]}")
۴. ساخت و آموزش مدل KNN 🤖
حالا مدل KNN را ایجاد کرده و آن را روی دادههای آموزشی تمرین میدهیم.
from sklearn.neighbors import KNeighborsClassifier
# مقدار K را مشخص میکنیم
k = 3
# مدل KNN را میسازیم و آموزش میدهیم
knn = KNeighborsClassifier(n_neighbors=k)
knn.fit(X_train, y_train)
print("✅ مدل KNN آموزش داده شد!")
۵. ارزیابی مدل و محاسبه دقت 📊
حالا دقت مدل را بررسی میکنیم تا ببینیم چقدر خوب کار میکند!
from sklearn.metrics import accuracy_score
# پیشبینی دادههای تست
y_pred = knn.predict(X_test)
# محاسبه دقت
accuracy = accuracy_score(y_test, y_pred)
print(f"🎯 دقت مدل: {accuracy:.2f}")
📌 اگر دقت بالا باشد (مثلاً ۹۵٪)، یعنی مدل ما عملکرد خوبی دارد! 🚀
۶. پیشبینی یک نمونه جدید 🤔🔮
بیایید یک عدد تصادفی از دادههای تست انتخاب کرده و مدل را روی آن آزمایش کنیم!
import random
# انتخاب یک نمونه تصادفی از دادههای تست
index = random.randint(0, len(X_test))
sample_image = X_test[index].reshape(28, 28) # تبدیل به تصویر ۲۸×۲۸
# پیشبینی مدل
predicted_label = knn.predict([X_test[index]])[0]
# نمایش تصویر و پیشبینی مدل
plt.imshow(sample_image, cmap="gray")
plt.title(f"مدل پیشبینی کرد: {predicted_label}")
plt.axis("off")
plt.show()
✅ اگر مدل عدد صحیح را تشخیص دهد، یعنی عملکرد آن خوب است! 🎯
🎯 جمعبندی پروژه:
✅ یک مدل KNN برای تشخیص اعداد دستنویس ساختیم.
✅ مدل را روی مجموعه داده MNIST آموزش دادیم.
✅ دقت مدل را محاسبه کردیم و یک عدد جدید را تست کردیم.
📌 حالا شما میتوانید این مدل را روی تصاویر خودتان آزمایش کنید! 🤖🔥
[لینک کانال ما]
#یادگیری_ماشین 🤖 #KNN #هوش_مصنوعی #تشخیص_اعداد 🔢 #MachineLearning #AI #کلاسیفیکیشن 🎯
Telegram
Python3
🎓 آموزش و پروژههای Python
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
👍2👏1
📌 پارت ۱: مقدمه و مفاهیم KNN 🚀
💡 در این پارت، ابتدا با الگوریتم K-Nearest Neighbors (KNN) آشنا میشویم، نحوه عملکرد آن را بررسی میکنیم، و کاربردهای آن را شرح میدهیم. در پارتهای بعدی به پیادهسازی عملی این الگوریتم از صفر خواهیم پرداخت.
🔹 الگوریتم K-Nearest Neighbors چیست؟
KNN یک الگوریتم یادگیری نظارتشده (Supervised Learning) است که برای کلاسیفیکیشن (دستهبندی) و رگرسیون استفاده میشود.
✔ این الگوریتم بر اساس شباهت دادهها کار میکند و مدل خاصی نمیسازد! بلکه فقط دادههای آموزش را ذخیره میکند و هنگام پیشبینی، نمونه جدید را با دادههای قبلی مقایسه میکند.
✔ اگر K=3 باشد، مدل ۳ همسایه نزدیک به داده جدید را پیدا کرده و کلاس آن را بر اساس اکثریت رأی مشخص میکند.
📌 مراحل اجرای KNN
✅ گام ۱: مقدار K (تعداد همسایهها) را انتخاب میکنیم.
✅ گام ۲: فاصله داده جدید تا تمام نقاط موجود را محاسبه میکنیم.
✅ گام ۳: K نمونه نزدیکتر را انتخاب میکنیم.
✅ گام ۴: بر اساس رأیگیری اکثریت کلاس داده جدید را مشخص میکنیم.
📌 مثال: فرض کنید بخواهیم نوع یک میوه را بر اساس ویژگیهای آن مشخص کنیم. اگر K=3 باشد، مدل سه میوه نزدیکتر را پیدا میکند و بر اساس بیشترین تعداد رأی، نوع میوه جدید را تعیین میکند! 🍎🍊🍌
📌 انتخاب مقدار K مناسب
✔ مقدار K کوچک → ممکن است مدل دچار overfitting شود.
✔ مقدار K بزرگ → ممکن است تأثیر نویز کاهش یابد اما دستهبندی ضعیفتر شود.
✔ مقدار K معمولاً عدد فرد انتخاب میشود (برای جلوگیری از مساوی شدن تعداد رأیها).
📌 روشهای محاسبه فاصله در KNN
🔹 فاصله اقلیدسی (Euclidean Distance)
🔹 فاصله منهتن (Manhattan Distance)
🔹 فاصله چبیشف (Chebyshev Distance)
📌 در پارت بعدی، این روشها را توضیح داده و کد آنها را بهصورت دستی پیادهسازی میکنیم! 🚀
📌 کاربردهای KNN
🔹 سیستمهای پیشنهاد (Recommendation Systems) 🎵
🔹 تشخیص بیماری (Medical Diagnosis) 🏥
🔹 تشخیص چهره و اثر انگشت 🕵️♂️
🔹 پردازش تصویر و بینایی ماشین 🖼
📌 مزایا و معایب KNN
✅ مزایا:
✔ پیادهسازی ساده و قابل درک
✔ مدلی نمیسازد و به دادههای جدید حساس است
✔ برای دستهبندیهای پیچیده کارایی خوبی دارد
❌ معایب:
✖ در دادههای بزرگ کند است 🚀
✖ انتخاب مقدار K مناسب چالشبرانگیز است
✖ حساس به دادههای پرت (Outliers) است
لینک کانال ما
💡 در این پارت، ابتدا با الگوریتم K-Nearest Neighbors (KNN) آشنا میشویم، نحوه عملکرد آن را بررسی میکنیم، و کاربردهای آن را شرح میدهیم. در پارتهای بعدی به پیادهسازی عملی این الگوریتم از صفر خواهیم پرداخت.
🔹 الگوریتم K-Nearest Neighbors چیست؟
KNN یک الگوریتم یادگیری نظارتشده (Supervised Learning) است که برای کلاسیفیکیشن (دستهبندی) و رگرسیون استفاده میشود.
✔ این الگوریتم بر اساس شباهت دادهها کار میکند و مدل خاصی نمیسازد! بلکه فقط دادههای آموزش را ذخیره میکند و هنگام پیشبینی، نمونه جدید را با دادههای قبلی مقایسه میکند.
✔ اگر K=3 باشد، مدل ۳ همسایه نزدیک به داده جدید را پیدا کرده و کلاس آن را بر اساس اکثریت رأی مشخص میکند.
📌 مراحل اجرای KNN
✅ گام ۱: مقدار K (تعداد همسایهها) را انتخاب میکنیم.
✅ گام ۲: فاصله داده جدید تا تمام نقاط موجود را محاسبه میکنیم.
✅ گام ۳: K نمونه نزدیکتر را انتخاب میکنیم.
✅ گام ۴: بر اساس رأیگیری اکثریت کلاس داده جدید را مشخص میکنیم.
📌 مثال: فرض کنید بخواهیم نوع یک میوه را بر اساس ویژگیهای آن مشخص کنیم. اگر K=3 باشد، مدل سه میوه نزدیکتر را پیدا میکند و بر اساس بیشترین تعداد رأی، نوع میوه جدید را تعیین میکند! 🍎🍊🍌
📌 انتخاب مقدار K مناسب
✔ مقدار K کوچک → ممکن است مدل دچار overfitting شود.
✔ مقدار K بزرگ → ممکن است تأثیر نویز کاهش یابد اما دستهبندی ضعیفتر شود.
✔ مقدار K معمولاً عدد فرد انتخاب میشود (برای جلوگیری از مساوی شدن تعداد رأیها).
📌 روشهای محاسبه فاصله در KNN
🔹 فاصله اقلیدسی (Euclidean Distance)
🔹 فاصله منهتن (Manhattan Distance)
🔹 فاصله چبیشف (Chebyshev Distance)
📌 در پارت بعدی، این روشها را توضیح داده و کد آنها را بهصورت دستی پیادهسازی میکنیم! 🚀
📌 کاربردهای KNN
🔹 سیستمهای پیشنهاد (Recommendation Systems) 🎵
🔹 تشخیص بیماری (Medical Diagnosis) 🏥
🔹 تشخیص چهره و اثر انگشت 🕵️♂️
🔹 پردازش تصویر و بینایی ماشین 🖼
📌 مزایا و معایب KNN
✅ مزایا:
✔ پیادهسازی ساده و قابل درک
✔ مدلی نمیسازد و به دادههای جدید حساس است
✔ برای دستهبندیهای پیچیده کارایی خوبی دارد
❌ معایب:
✖ در دادههای بزرگ کند است 🚀
✖ انتخاب مقدار K مناسب چالشبرانگیز است
✖ حساس به دادههای پرت (Outliers) است
لینک کانال ما
Telegram
Python3
🎓 آموزش و پروژههای Python
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
👍1
📌 پارت ۲: پیادهسازی تابع محاسبه فاصله 🚀
💡 در این پارت، یاد میگیریم که چگونه فاصله بین نقاط را محاسبه کنیم. این مرحله یکی از مهمترین بخشهای الگوریتم KNN است، چون این الگوریتم بر اساس نزدیکی دادهها تصمیمگیری میکند.
📌 روشهای محاسبه فاصله در KNN
در KNN چندین روش برای اندازهگیری فاصله بین دادهها وجود دارد. سه روش پرکاربرد عبارتند از:
1️⃣ فاصله اقلیدسی (Euclidean Distance)
2️⃣ فاصله منهتن (Manhattan Distance)
3️⃣ فاصله چبیشف (Chebyshev Distance)
📌 روش ۱: فاصله اقلیدسی
تعریف: فاصله اقلیدسی بین دو نقطه، کوتاهترین فاصله مستقیم بین آنها در یک فضای چندبعدی است.
✔ فرمول:
پایین پست
✔ پیادهسازی در پایتون:
📌 روش ۲: فاصله منهتن
تعریف: فاصله منهتن مجموع قدرمطلق اختلافات در هر بعد است. این روش برای مسیرهای شبکهای (مانند خیابانهای شهر) بسیار مفید است.
✔ فرمول:
پایین پست
✔ پیادهسازی در پایتون:
📌 روش ۳: فاصله چبیشف
تعریف: فاصله چبیشف بیشترین تفاوت بین مختصات دو نقطه را میسنجد. این روش برای محاسباتی که نیاز به مقایسه تغییرات حداکثری دارند مناسب است.
✔ فرمول:
پایین پست
✔ پیادهسازی در پایتون:
[لینک کانال ما]
📌 در پارت بعدی، از این توابع برای پیدا کردن نزدیکترین K همسایه استفاده خواهیم کرد! 🚀
💡 در این پارت، یاد میگیریم که چگونه فاصله بین نقاط را محاسبه کنیم. این مرحله یکی از مهمترین بخشهای الگوریتم KNN است، چون این الگوریتم بر اساس نزدیکی دادهها تصمیمگیری میکند.
📌 روشهای محاسبه فاصله در KNN
در KNN چندین روش برای اندازهگیری فاصله بین دادهها وجود دارد. سه روش پرکاربرد عبارتند از:
1️⃣ فاصله اقلیدسی (Euclidean Distance)
2️⃣ فاصله منهتن (Manhattan Distance)
3️⃣ فاصله چبیشف (Chebyshev Distance)
📌 روش ۱: فاصله اقلیدسی
تعریف: فاصله اقلیدسی بین دو نقطه، کوتاهترین فاصله مستقیم بین آنها در یک فضای چندبعدی است.
✔ فرمول:
پایین پست
✔ پیادهسازی در پایتون:
import numpy as np
def euclidean_distance(point1, point2):
return np.sqrt(np.sum((np.array(point1) - np.array(point2)) ** 2))
# تست تابع
p1 = [2, 3]
p2 = [5, 7]
print("فاصله اقلیدسی:", euclidean_distance(p1, p2))
📌 روش ۲: فاصله منهتن
تعریف: فاصله منهتن مجموع قدرمطلق اختلافات در هر بعد است. این روش برای مسیرهای شبکهای (مانند خیابانهای شهر) بسیار مفید است.
✔ فرمول:
پایین پست
✔ پیادهسازی در پایتون:
def manhattan_distance(point1, point2):
return np.sum(np.abs(np.array(point1) - np.array(point2)))
# تست تابع
print("فاصله منهتن:", manhattan_distance(p1, p2))
📌 روش ۳: فاصله چبیشف
تعریف: فاصله چبیشف بیشترین تفاوت بین مختصات دو نقطه را میسنجد. این روش برای محاسباتی که نیاز به مقایسه تغییرات حداکثری دارند مناسب است.
✔ فرمول:
پایین پست
✔ پیادهسازی در پایتون:
def chebyshev_distance(point1, point2):
return np.max(np.abs(np.array(point1) - np.array(point2)))
# تست تابع
print("فاصله چبیشف:", chebyshev_distance(p1, p2))
[لینک کانال ما]
📌 در پارت بعدی، از این توابع برای پیدا کردن نزدیکترین K همسایه استفاده خواهیم کرد! 🚀
Telegram
Python3
🎓 آموزش و پروژههای Python
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
👍1
📌 پارت ۳: یافتن K همسایه نزدیکتر 🚀
💡 در این پارت، یاد میگیریم که چگونه برای یک داده جدید، K نزدیکترین همسایه را پیدا کنیم. این بخش، هسته اصلی الگوریتم KNN است!
📌 نحوه یافتن نزدیکترین همسایهها
✅ گام ۱: فاصله داده جدید را با تمام دادههای آموزش محاسبه میکنیم.
✅ گام ۲: دادهها را بر اساس فاصله از کوچک به بزرگ مرتب میکنیم.
✅ گام ۳: K داده اول را بهعنوان نزدیکترین همسایه انتخاب میکنیم.
📌 پیادهسازی تابع یافتن K همسایه نزدیکتر
📌 توضیح کد
🔹 محاسبه فاصله: با استفاده از تابع
🔹 مرتبسازی: دادهها را بر اساس فاصله از کوچک به بزرگ مرتب میکنیم.
🔹 انتخاب K همسایه: اولین K مقدار را انتخاب کرده و برمیگردانیم.
[لینک کانال ما]
📌 در پارت بعدی، این اطلاعات را برای پیشبینی کلاس استفاده خواهیم کرد! 🚀
💡 در این پارت، یاد میگیریم که چگونه برای یک داده جدید، K نزدیکترین همسایه را پیدا کنیم. این بخش، هسته اصلی الگوریتم KNN است!
📌 نحوه یافتن نزدیکترین همسایهها
✅ گام ۱: فاصله داده جدید را با تمام دادههای آموزش محاسبه میکنیم.
✅ گام ۲: دادهها را بر اساس فاصله از کوچک به بزرگ مرتب میکنیم.
✅ گام ۳: K داده اول را بهعنوان نزدیکترین همسایه انتخاب میکنیم.
📌 پیادهسازی تابع یافتن K همسایه نزدیکتر
import numpy as np
# تابع فاصله اقلیدسی از پارت قبل
def euclidean_distance(point1, point2):
return np.sqrt(np.sum((np.array(point1) - np.array(point2)) ** 2))
# تابع یافتن K همسایه نزدیکتر
def get_k_neighbors(training_data, labels, test_point, k):
distances = []
# محاسبه فاصله بین داده جدید و تمام نقاط آموزش
for i, train_point in enumerate(training_data):
distance = euclidean_distance(test_point, train_point)
distances.append((distance, labels[i]))
# مرتبسازی بر اساس فاصله (کوچکترین مقدار اول)
distances.sort(key=lambda x: x[0])
# انتخاب K همسایه اول
k_neighbors = distances[:k]
return k_neighbors
# تست تابع با داده فرضی
train_data = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
labels = ["A", "B", "A", "B", "A"]
test_sample = [4, 5]
neighbors = get_k_neighbors(train_data, labels, test_sample, k=3)
print("K همسایه نزدیکتر:", neighbors)
📌 توضیح کد
🔹 محاسبه فاصله: با استفاده از تابع
euclidean_distance
، فاصله داده جدید را با تمامی دادههای موجود محاسبه میکنیم. 🔹 مرتبسازی: دادهها را بر اساس فاصله از کوچک به بزرگ مرتب میکنیم.
🔹 انتخاب K همسایه: اولین K مقدار را انتخاب کرده و برمیگردانیم.
[لینک کانال ما]
📌 در پارت بعدی، این اطلاعات را برای پیشبینی کلاس استفاده خواهیم کرد! 🚀
Telegram
Python3
🎓 آموزش و پروژههای Python
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
👍1
📌 پارت ۴: پیشبینی کلاس داده جدید 🚀
💡 در این پارت، از نزدیکترین همسایههایی که در پارت قبل پیدا کردیم، برای پیشبینی کلاس داده جدید استفاده میکنیم!
📌 نحوه پیشبینی کلاس در KNN
✅ گام ۱: از K همسایه نزدیکتر که در پارت قبل به دست آوردیم، کلاسهایشان را استخراج میکنیم.
✅ گام ۲: تعداد دفعات تکرار هر کلاس را شمارش میکنیم.
✅ گام ۳: کلاسی که بیشترین رأی را دارد، بهعنوان خروجی در نظر میگیریم!
📌 پیادهسازی تابع پیشبینی کلاس
📌 توضیح کد
🔹 استخراج کلاسهای همسایهها: با استفاده از
🔹 شمارش تعداد تکرار هر کلاس: از
🔹 انتخاب کلاس با بیشترین رأی: تابع
📌 مثال خروجی
✅ فرض کنید همسایههای ما این کلاسها را داشته باشند:
🔹 کلاس A دو بار و کلاس B یک بار ظاهر شده است.
🔹 پس کلاس A بیشترین رأی را دارد و بهعنوان خروجی انتخاب میشود! ✅
لینک کانال ما
📌 در پارت بعدی، کل مراحل را در قالب یک کلاس منظم خواهیم کرد تا بتوانیم از این مدل در پروژههای مختلف استفاده کنیم! 🚀
💡 در این پارت، از نزدیکترین همسایههایی که در پارت قبل پیدا کردیم، برای پیشبینی کلاس داده جدید استفاده میکنیم!
📌 نحوه پیشبینی کلاس در KNN
✅ گام ۱: از K همسایه نزدیکتر که در پارت قبل به دست آوردیم، کلاسهایشان را استخراج میکنیم.
✅ گام ۲: تعداد دفعات تکرار هر کلاس را شمارش میکنیم.
✅ گام ۳: کلاسی که بیشترین رأی را دارد، بهعنوان خروجی در نظر میگیریم!
📌 پیادهسازی تابع پیشبینی کلاس
from collections import Counter
# تابع پیشبینی کلاس
def predict_class(k_neighbors):
# استخراج لیست کلاسها از همسایههای نزدیک
classes = [label for _, label in k_neighbors]
# شمارش تعداد دفعات تکرار هر کلاس
class_count = Counter(classes)
# انتخاب کلاس با بیشترین رأی
predicted_class = class_count.most_common(1)[0][0]
return predicted_class
# تست تابع با خروجی پارت قبل
predicted = predict_class(neighbors)
print("کلاس پیشبینی شده:", predicted)
📌 توضیح کد
🔹 استخراج کلاسهای همسایهها: با استفاده از
k_neighbors
، کلاس هر همسایه را ذخیره میکنیم. 🔹 شمارش تعداد تکرار هر کلاس: از
Counter
برای شمارش کلاسهای تکرارشده استفاده میکنیم. 🔹 انتخاب کلاس با بیشترین رأی: تابع
most_common(1)
کلاسی را که بیشترین تعداد همسایهها دارد، بهعنوان خروجی برمیگرداند. 📌 مثال خروجی
✅ فرض کنید همسایههای ما این کلاسها را داشته باشند:
[("A", 2.5), ("B", 3.1), ("A", 1.8)]
🔹 کلاس A دو بار و کلاس B یک بار ظاهر شده است.
🔹 پس کلاس A بیشترین رأی را دارد و بهعنوان خروجی انتخاب میشود! ✅
لینک کانال ما
📌 در پارت بعدی، کل مراحل را در قالب یک کلاس منظم خواهیم کرد تا بتوانیم از این مدل در پروژههای مختلف استفاده کنیم! 🚀
Telegram
Python3
🎓 آموزش و پروژههای Python
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
👍1
📌 پارت ۴: پیشبینی کلاس داده جدید 🚀
💡 در این پارت، از نزدیکترین همسایههایی که در پارت قبل پیدا کردیم، برای پیشبینی کلاس داده جدید استفاده میکنیم!
📌 نحوه پیشبینی کلاس در KNN
✅ گام ۱: از K همسایه نزدیکتر که در پارت قبل به دست آوردیم، کلاسهایشان را استخراج میکنیم.
✅ گام ۲: تعداد دفعات تکرار هر کلاس را شمارش میکنیم.
✅ گام ۳: کلاسی که بیشترین رأی را دارد، بهعنوان خروجی در نظر میگیریم!
📌 پیادهسازی تابع پیشبینی کلاس
📌 توضیح کد
🔹 استخراج کلاسهای همسایهها: با استفاده از
🔹 شمارش تعداد تکرار هر کلاس: از
🔹 انتخاب کلاس با بیشترین رأی: تابع
📌 مثال خروجی
✅ فرض کنید همسایههای ما این کلاسها را داشته باشند:
🔹 کلاس A دو بار و کلاس B یک بار ظاهر شده است.
🔹 پس کلاس A بیشترین رأی را دارد و بهعنوان خروجی انتخاب میشود! ✅
لینک کانال ما
📌 در پارت بعدی، کل مراحل را در قالب یک کلاس منظم خواهیم کرد تا بتوانیم از این مدل در پروژههای مختلف استفاده کنیم! 🚀
💡 در این پارت، از نزدیکترین همسایههایی که در پارت قبل پیدا کردیم، برای پیشبینی کلاس داده جدید استفاده میکنیم!
📌 نحوه پیشبینی کلاس در KNN
✅ گام ۱: از K همسایه نزدیکتر که در پارت قبل به دست آوردیم، کلاسهایشان را استخراج میکنیم.
✅ گام ۲: تعداد دفعات تکرار هر کلاس را شمارش میکنیم.
✅ گام ۳: کلاسی که بیشترین رأی را دارد، بهعنوان خروجی در نظر میگیریم!
📌 پیادهسازی تابع پیشبینی کلاس
from collections import Counter
# تابع پیشبینی کلاس
def predict_class(k_neighbors):
# استخراج لیست کلاسها از همسایههای نزدیک
classes = [label for _, label in k_neighbors]
# شمارش تعداد دفعات تکرار هر کلاس
class_count = Counter(classes)
# انتخاب کلاس با بیشترین رأی
predicted_class = class_count.most_common(1)[0][0]
return predicted_class
# تست تابع با خروجی پارت قبل
predicted = predict_class(neighbors)
print("کلاس پیشبینی شده:", predicted)
📌 توضیح کد
🔹 استخراج کلاسهای همسایهها: با استفاده از
k_neighbors
، کلاس هر همسایه را ذخیره میکنیم. 🔹 شمارش تعداد تکرار هر کلاس: از
Counter
برای شمارش کلاسهای تکرارشده استفاده میکنیم. 🔹 انتخاب کلاس با بیشترین رأی: تابع
most_common(1)
کلاسی را که بیشترین تعداد همسایهها دارد، بهعنوان خروجی برمیگرداند. 📌 مثال خروجی
✅ فرض کنید همسایههای ما این کلاسها را داشته باشند:
[("A", 2.5), ("B", 3.1), ("A", 1.8)]
🔹 کلاس A دو بار و کلاس B یک بار ظاهر شده است.
🔹 پس کلاس A بیشترین رأی را دارد و بهعنوان خروجی انتخاب میشود! ✅
لینک کانال ما
📌 در پارت بعدی، کل مراحل را در قالب یک کلاس منظم خواهیم کرد تا بتوانیم از این مدل در پروژههای مختلف استفاده کنیم! 🚀
Telegram
Python3
🎓 آموزش و پروژههای Python
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
👍1
پارت ۵: ساخت کلاس KNN از صفر
در این پارت، کل مراحل پیادهسازی دستی الگوریتم K-Nearest Neighbors (KNN) را در یک کلاس منظم و قابل استفاده مجدد قرار میدهیم!
طراحی کلاس
ویژگیها و متدهای کلاس:
-
-
-
-
-
پیادهسازی کلاس کامل KNN
توضیح کد
- ذخیره دادههای آموزشی: متد
- محاسبه فاصله: متد
- پیدا کردن K همسایه نزدیکتر: متد
- انتخاب کلاس با رأیگیری: متد
- پیشبینی نهایی: متد
نتیجه اجرای کد
اگر
مدل KNN ما بدون استفاده از کتابخانههای آماده، بهدرستی دادهها را دستهبندی کرد!
حالا میتوانیم این مدل را روی دیتاستهای واقعی امتحان کنیم!
در این پارت، کل مراحل پیادهسازی دستی الگوریتم K-Nearest Neighbors (KNN) را در یک کلاس منظم و قابل استفاده مجدد قرار میدهیم!
طراحی کلاس
KNNClassifier
ویژگیها و متدهای کلاس:
-
fit(X, y)
→ دادههای آموزشی و لیبلها را ذخیره میکند. -
predict(X_test)
→ کلاس دادههای جدید را پیشبینی میکند. -
_get_k_neighbors(X_test)
→ نزدیکترین K همسایه را پیدا میکند. -
_compute_distance(point1, point2)
→ فاصله بین دو نقطه را محاسبه میکند. -
_majority_vote(neighbors)
→ کلاس با بیشترین رأی را انتخاب میکند. پیادهسازی کلاس کامل KNN
import numpy as np
from collections import Counter
class KNNClassifier:
def __init__(self, k=3):
self.k = k
self.X_train = None
self.y_train = None
def fit(self, X, y):
"""ذخیره دادههای آموزشی"""
self.X_train = np.array(X)
self.y_train = np.array(y)
def _compute_distance(self, point1, point2):
"""محاسبه فاصله اقلیدسی بین دو نقطه"""
return np.sqrt(np.sum((np.array(point1) - np.array(point2)) ** 2))
def _get_k_neighbors(self, X_test):
"""پیدا کردن K همسایه نزدیکتر"""
distances = []
for i, train_point in enumerate(self.X_train):
distance = self._compute_distance(X_test, train_point)
distances.append((distance, self.y_train[i]))
distances.sort(key=lambda x: x[0])
return distances[:self.k]
def _majority_vote(self, neighbors):
"""انتخاب کلاس با بیشترین رأی"""
class_count = Counter(label for _, label in neighbors)
return class_count.most_common(1)[0][0]
def predict(self, X_test):
"""پیشبینی کلاس دادههای جدید"""
predictions = []
for test_point in X_test:
neighbors = self._get_k_neighbors(test_point)
predictions.append(self._majority_vote(neighbors))
return predictions
# تست مدل با دادههای فرضی
X_train = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
y_train = ["A", "B", "A", "B", "A"]
X_test = [[4, 5], [6, 7]]
knn = KNNClassifier(k=3)
knn.fit(X_train, y_train)
predictions = knn.predict(X_test)
print("پیشبینیهای مدل:", predictions)
توضیح کد
- ذخیره دادههای آموزشی: متد
fit(X, y)
دادههای آموزش را در متغیرهای self.X_train
و self.y_train
ذخیره میکند. - محاسبه فاصله: متد
_compute_distance(point1, point2)
فاصله اقلیدسی بین دو نقطه را محاسبه میکند. - پیدا کردن K همسایه نزدیکتر: متد
_get_k_neighbors(X_test)
برای هر نمونه جدید، نزدیکترین همسایهها را پیدا میکند. - انتخاب کلاس با رأیگیری: متد
_majority_vote(neighbors)
کلاس اکثریت را مشخص میکند. - پیشبینی نهایی: متد
predict(X_test)
کلاس هر داده جدید را پیشبینی میکند. نتیجه اجرای کد
اگر
X_test = [[4, 5], [6, 7]]
باشد، خروجی به شکل زیر خواهد بود: پیشبینیهای مدل: ['A', 'A']
مدل KNN ما بدون استفاده از کتابخانههای آماده، بهدرستی دادهها را دستهبندی کرد!
حالا میتوانیم این مدل را روی دیتاستهای واقعی امتحان کنیم!
👍2
📌 پروژه عملی: تشخیص نوع گل زنبق (Iris) با پیادهسازی دستی KNN 🌸🔍
💡 در این پروژه، از مدل KNN دستی که در پارت قبل ساختیم برای دستهبندی گلهای زنبق (Iris Dataset) استفاده میکنیم!
📌 هدف:
✅ پیشبینی نوع گل زنبق بر اساس ویژگیهای آن (طول و عرض گلبرگ و کاسبرگ).
✅ استفاده از مدل پیادهسازی دستی KNN بدون کتابخانه آماده.
📌 ۱. بارگذاری و آمادهسازی دادهها 📊
🔹 دیتاست Iris شامل ۱۵۰ نمونه گل زنبق از ۳ کلاس مختلف است:
✅ Setosa 🌿
✅ Versicolor 🌸
✅ Virginica 🌺
🔹 هر گل دارای ۴ ویژگی عددی است:
1️⃣ Sepal Length (cm)
2️⃣ Sepal Width (cm)
3️⃣ Petal Length (cm)
4️⃣ Petal Width (cm)
🔹 حالا دیتاست را بارگذاری و پردازش میکنیم!
---
📌 ۲. استفاده از مدل پیادهسازی دستی KNN 🤖
🔹 مدل KNN دستی که در پارت قبل ساختیم را اینجا استفاده میکنیم!
📌 ۳. ارزیابی عملکرد مدل 📊
🔹 برای بررسی دقت مدل، از نسبت پیشبینیهای درست استفاده میکنیم!
✅ نتیجه:
مدل KNN ما معمولاً ۹۵٪ یا بیشتر دقت دارد! 🎯🔥
📌 نتیجهگیری و بهبود مدل
🔹 مدل بدون هیچ کتابخانه آمادهای کار میکند و نتایج خوبی میدهد.
🔹 برای بهبود عملکرد میتوان از:
✅ مقدار بهینه K (مثلاً تست با مقادیر مختلف).
✅ مقیاسبندی دادهها (Normalization).
✅ وزندهی به همسایهها (همسایههای نزدیکتر وزن بیشتری داشته باشند).
لینک
📌 این پروژه را میتوان در دستهبندی انواع دادههای دیگر هم استفاده کرد! 🚀💡
💡 در این پروژه، از مدل KNN دستی که در پارت قبل ساختیم برای دستهبندی گلهای زنبق (Iris Dataset) استفاده میکنیم!
📌 هدف:
✅ پیشبینی نوع گل زنبق بر اساس ویژگیهای آن (طول و عرض گلبرگ و کاسبرگ).
✅ استفاده از مدل پیادهسازی دستی KNN بدون کتابخانه آماده.
📌 ۱. بارگذاری و آمادهسازی دادهها 📊
🔹 دیتاست Iris شامل ۱۵۰ نمونه گل زنبق از ۳ کلاس مختلف است:
✅ Setosa 🌿
✅ Versicolor 🌸
✅ Virginica 🌺
🔹 هر گل دارای ۴ ویژگی عددی است:
1️⃣ Sepal Length (cm)
2️⃣ Sepal Width (cm)
3️⃣ Petal Length (cm)
4️⃣ Petal Width (cm)
🔹 حالا دیتاست را بارگذاری و پردازش میکنیم!
from sklearn import datasets
import numpy as np
from sklearn.model_selection import train_test_split
# بارگذاری دیتاست Iris
iris = datasets.load_iris()
X = iris.data # ویژگیها
y = iris.target # کلاسها
# تقسیم دادهها به ۸۰٪ آموزش و ۲۰٪ تست
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print("تعداد نمونههای آموزش:", len(X_train))
print("تعداد نمونههای تست:", len(X_test))
---
📌 ۲. استفاده از مدل پیادهسازی دستی KNN 🤖
🔹 مدل KNN دستی که در پارت قبل ساختیم را اینجا استفاده میکنیم!
class KNNClassifier:
def __init__(self, k=5):
self.k = k
self.X_train = None
self.y_train = None
def fit(self, X, y):
"""ذخیره دادههای آموزشی"""
self.X_train = np.array(X)
self.y_train = np.array(y)
def _compute_distance(self, point1, point2):
"""محاسبه فاصله اقلیدسی بین دو نقطه"""
return np.sqrt(np.sum((np.array(point1) - np.array(point2)) ** 2))
def _get_k_neighbors(self, X_test):
"""پیدا کردن K همسایه نزدیکتر"""
distances = []
for i, train_point in enumerate(self.X_train):
distance = self._compute_distance(X_test, train_point)
distances.append((distance, self.y_train[i]))
distances.sort(key=lambda x: x[0])
return distances[:self.k]
def _majority_vote(self, neighbors):
"""انتخاب کلاس با بیشترین رأی"""
class_count = {}
for _, label in neighbors:
class_count[label] = class_count.get(label, 0) + 1
return max(class_count, key=class_count.get)
def predict(self, X_test):
"""پیشبینی کلاس دادههای جدید"""
predictions = [self._majority_vote(self._get_k_neighbors(test_point)) for test_point in X_test]
return predictions
# ساخت مدل KNN
knn = KNNClassifier(k=5)
knn.fit(X_train, y_train)
# پیشبینی روی دادههای تست
y_pred = knn.predict(X_test)
📌 ۳. ارزیابی عملکرد مدل 📊
🔹 برای بررسی دقت مدل، از نسبت پیشبینیهای درست استفاده میکنیم!
accuracy = np.sum(y_pred == y_test) / len(y_test)
print(f"دقت مدل KNN (پیادهسازی دستی): {accuracy * 100:.2f}%")
✅ نتیجه:
مدل KNN ما معمولاً ۹۵٪ یا بیشتر دقت دارد! 🎯🔥
📌 نتیجهگیری و بهبود مدل
🔹 مدل بدون هیچ کتابخانه آمادهای کار میکند و نتایج خوبی میدهد.
🔹 برای بهبود عملکرد میتوان از:
✅ مقدار بهینه K (مثلاً تست با مقادیر مختلف).
✅ مقیاسبندی دادهها (Normalization).
✅ وزندهی به همسایهها (همسایههای نزدیکتر وزن بیشتری داشته باشند).
لینک
📌 این پروژه را میتوان در دستهبندی انواع دادههای دیگر هم استفاده کرد! 🚀💡
Telegram
Python3
🎓 آموزش و پروژههای Python
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
آموزشهای کاربردی و پروژههای عملی Python برای همه سطوح. 🚀
👍1