Python3
200 subscribers
100 photos
6 videos
26 files
518 links
🎓 آموزش و پروژه‌های Python
آموزش‌های کاربردی و پروژه‌های عملی Python برای همه سطوح. 🚀
Download Telegram
📌 پارت ۱: مقدمه و مفاهیم پایه‌ای درخت تصمیم و جنگل تصادفی

🔍 مقدمه:
در این بخش، قراره مفهوم Random Forest رو کاملاً درک کنیم و بفهمیم چرا این الگوریتم یکی از قوی‌ترین روش‌های دسته‌بندی (Classification) و پیش‌بینی (Regression) در یادگیری ماشین محسوب می‌شه. همچنین، نگاهی به درخت تصمیم (Decision Tree) که پایه و اساس Random Forest هست، خواهیم داشت.


🌲 Random Forest چیه؟
جنگل تصادفی (Random Forest) یه مدل یادگیری ماشین مبتنی بر مجموعه‌ای از درخت‌های تصمیم هست. این الگوریتم از چندین درخت تصمیم مستقل استفاده می‌کنه و برای پیش‌بینی رأی‌گیری اکثریت (Majority Voting) رو انجام می‌ده. ویژگی‌های کلیدی این مدل:

از چندین درخت تصمیم برای افزایش دقت استفاده می‌کنه.
مدل رو در برابر Overfitting مقاوم می‌کنه.
هم در کلاسیفیکیشن (طبقه‌بندی) و هم در رگرسیون (پیش‌بینی عددی) قابل استفاده است.



🌳 درخت تصمیم (Decision Tree) چیه؟
قبل از اینکه Random Forest رو بسازیم، باید بدونیم درخت تصمیم چیه. درخت تصمیم یه مدل ساده و شهودی برای دسته‌بندی و پیش‌بینی هست که شبیه به یه نمودار درختی کار می‌کنه.

🔹 هر گره (Node) یه ویژگی داده رو بررسی می‌کنه.
🔹 هر شاخه (Branch) یه مسیر تصمیم‌گیری رو نشون می‌ده.
🔹 هر برگ (Leaf) یه خروجی نهایی برای پیش‌بینی رو مشخص می‌کنه.

درخت‌های تصمیم سریع هستن، اما به تنهایی ممکنه دقت کمی داشته باشن و دچار Overfitting بشن. اینجاست که جنگل تصادفی وارد عمل می‌شه!



🚀 چرا Random Forest بهتر از یک درخت تصمیم است؟
حالا که مفهوم درخت تصمیم رو فهمیدیم، بذار ببینیم چرا Random Forest کارآمدتره:

🔹 کاهش Overfitting: درخت‌های تصمیم به‌تنهایی ممکنه بیش از حد روی داده‌های آموزش تنظیم بشن، اما ترکیب چندین درخت باعث می‌شه خطاهای تصادفی کاهش پیدا کنه.
🔹 دقت بالاتر: چون از چندین مدل استفاده می‌کنه، معمولاً دقت بیشتری نسبت به یه درخت تصمیم داره.
🔹 مقاوم در برابر داده‌های نویزی: چون مجموعه‌ای از درخت‌ها تصمیم‌گیری می‌کنن، مدل تأثیر داده‌های غیرعادی رو کاهش می‌ده.



💡 جمع‌بندی پارت ۱:
📌 توی این پارت یاد گرفتیم که:
✔️ Random Forest یه مجموعه از درخت‌های تصمیمه که با ترکیب چند مدل، دقت پیش‌بینی رو افزایش می‌ده.
✔️ درخت تصمیم یه مدل پایه برای دسته‌بندی داده‌هاست اما ممکنه دچار Overfitting بشه.
✔️ جنگل تصادفی با رأی‌گیری بین درخت‌ها، خطای مدل رو کاهش می‌ده.

[لینک کانال ما]

پارت ۲: پیاده‌سازی گره‌های درخت تصمیم و تابع تقسیم داده‌ها
👍1
🌟 پارت ۲: پیاده‌سازی گره‌های درخت تصمیم و تابع تقسیم داده‌ها

📌 مقدمه:
در این بخش، می‌خوایم اولین قدم در پیاده‌سازی دستی Random Forest رو برداریم: ساخت گره‌های درخت تصمیم و پیاده‌سازی تابع تقسیم داده‌ها (Splitting Function). این کار پایه‌ی تمام محاسباتیه که درخت‌های تصمیم و در نهایت جنگل تصادفی بر اساس اون ساخته می‌شن.



🔍 ۱. گره (Node) در درخت تصمیم چیه؟
درخت تصمیم از گره‌ها تشکیل شده که در هر گره، یک ویژگی انتخاب می‌شه و داده‌ها به دو بخش تقسیم می‌شن.

🔹 گره ریشه (Root Node): اولین گره که داده‌های اصلی از اونجا شروع به تقسیم شدن می‌کنن.
🔹 گره داخلی (Internal Node): گره‌هایی که داده‌ها رو به زیرمجموعه‌های کوچک‌تر تقسیم می‌کنن.
🔹 گره برگ (Leaf Node): گره‌های انتهایی که کلاس نهایی یا مقدار خروجی رو مشخص می‌کنن.

👀 هدف ما اینه که بتونیم بهترین ویژگی برای تقسیم داده‌ها رو پیدا کنیم و درخت رو رشد بدیم.



۲. تابع تقسیم داده‌ها چطور کار می‌کنه؟
برای اینکه درخت تصمیم بتونه به‌درستی کار کنه، باید بهترین ویژگی رو برای تقسیم داده‌ها انتخاب کنیم. این کار رو با استفاده از معیارهایی مثل Gini Impurity یا Entropy (برای اطلاعات متقابل) انجام می‌دیم.

💡 معیار Gini Impurity:
یک معیار برای سنجش میزان خلوص یک دسته از داده‌ها. مقدار اون بین ۰ تا ۱ هست:
- ۰: کاملاً خالص (یعنی همه داده‌ها متعلق به یک کلاس هستن).
- ۱: بیشترین اختلاط بین کلاس‌ها (یعنی کلاس‌های مختلف زیادی توی این گره هست).

🔢 فرمول Gini Impurity:


فرومول رو توی یه عکس پایین همین پست گزاشتم


🚀 ۳. پیاده‌سازی تابع محاسبه‌ی Gini Impurity در پایتون
حالا بریم تابع Gini Impurity رو پیاده‌سازی کنیم تا بتونیم میزان خلوص داده‌های هر گره رو محاسبه کنیم:

import numpy as np

# تابع محاسبه Gini Impurity
def gini_impurity(labels):
"""
محاسبه میزان ناخالصی Gini برای یک دسته از داده‌ها
"""
unique_classes, counts = np.unique(labels, return_counts=True)
probabilities = counts / len(labels)
gini = 1 - np.sum(probabilities ** 2)
return gini

# تست تابع با یک لیست از کلاس‌ها
labels = [0, 0, 1, 1, 1, 0, 1, 1, 0, 0]
print("Gini Impurity:", gini_impurity(labels))

این تابع، میزان Gini رو برای یک مجموعه از برچسب‌های کلاس محاسبه می‌کنه. هر چقدر مقدار Gini کمتر باشه، داده‌ها در اون گره خالص‌تر هستن.



📌 ۴. تابع تقسیم داده‌ها بر اساس یک ویژگی
بعد از محاسبه Gini، حالا باید یک تابع برای تقسیم داده‌ها بنویسیم که با بررسی هر ویژگی، داده‌ها رو به دو گروه جدا تقسیم کنه.

def split_data(data, feature_index, threshold):
"""
تقسیم داده‌ها به دو گروه بر اساس مقدار یک ویژگی
"""
left_split = data[data[:, feature_index] <= threshold]
right_split = data[data[:, feature_index] > threshold]
return left_split, right_split

🔹 این تابع، یک ویژگی (Feature) رو دریافت می‌کنه و داده‌ها رو به دو دسته تقسیم می‌کنه:
- داده‌هایی که مقدارشون کمتر یا مساوی آستانه‌ی موردنظر (Threshold) هست.
- داده‌هایی که مقدارشون بیشتر از Threshold هست.

📌 در مرحله بعد، باید بهترین تقسیم‌بندی رو پیدا کنیم. برای این کار، باید مقدار Gini Impurity رو بعد از هر تقسیم حساب کنیم و بهترین حالت رو انتخاب کنیم.



📢 جمع‌بندی پارت ۲:
✔️ فهمیدیم که گره‌های درخت تصمیم چطور داده‌ها رو به دو دسته تقسیم می‌کنن.
✔️ Gini Impurity رو محاسبه کردیم تا میزان خلوص هر گره رو بسنجیم.
✔️ تابعی برای تقسیم داده‌ها بر اساس مقدار یک ویژگی نوشتیم.

[لینک کانال ما]

پارت ۳: ساخت کامل یک درخت تصمیم و پیاده‌سازی پیش‌بینی
👍1
🔴فرمولش
👍1
🌟 پارت ۳: ساخت کامل یک درخت تصمیم و پیاده‌سازی پیش‌بینی

📌 مقدمه:
حالا که تونستیم Gini Impurity رو محاسبه کنیم و داده‌ها رو تقسیم کنیم، وقتشه که یه درخت تصمیم کامل بسازیم! در این پارت، قراره درخت تصمیم رو از ابتدا پیاده‌سازی کنیم و در نهایت یه تابع برای پیش‌بینی خروجی بنویسیم.



📌 ۱. چطور درخت تصمیم ساخته می‌شه؟
درخت تصمیم از تعدادی گره (Node) تشکیل شده. هر گره:
1️⃣ بهترین ویژگی (Feature) برای تقسیم داده‌ها رو انتخاب می‌کنه.
2️⃣ داده‌ها رو به دو گروه تقسیم می‌کنه (بر اساس مقدار آستانه).
3️⃣ اگر داده‌های یک گره کاملاً از یک کلاس بودن، اون گره رو به گره برگ (Leaf Node) تبدیل می‌کنه.
4️⃣ اگر داده‌ها همچنان نیاز به تقسیم شدن داشتن، همین فرآیند رو برای هر دو زیرمجموعه تکرار می‌کنه.

💡 این فرآیند به‌صورت بازگشتی (Recursive) اجرا می‌شه تا زمانی که شرایط توقف برقرار بشه.



📌 ۲. پیاده‌سازی انتخاب بهترین تقسیم‌بندی
برای ساخت درخت تصمیم، باید بفهمیم کدوم ویژگی و کدوم مقدار تقسیم، بهترین نتیجه رو می‌ده.
ما قبلاً تابع split_data() رو نوشتیم که داده‌ها رو بر اساس یک مقدار تقسیم می‌کنه. حالا باید تابعی بنویسیم که بهترین تقسیم ممکن رو انتخاب کنه!

def best_split(data, labels):
"""
پیدا کردن بهترین ویژگی و مقدار آستانه برای تقسیم داده‌ها
"""
best_gini = 1 # مقدار بالای اولیه برای مقایسه
best_feature = None
best_threshold = None
best_splits = None

num_features = data.shape[1] # تعداد ویژگی‌ها

for feature in range(num_features): # بررسی همه ویژگی‌ها
thresholds = np.unique(data[:, feature]) # مقدارهای منحصربه‌فرد در ویژگی

for threshold in thresholds: # بررسی همه مقادیر ویژگی
left_mask = data[:, feature] <= threshold
right_mask = ~left_mask

left_labels, right_labels = labels[left_mask], labels[right_mask]

if len(left_labels) == 0 or len(right_labels) == 0:
continue # تقسیم بی‌معنی رو رد کن

# محاسبه Gini برای این تقسیم
left_gini = gini_impurity(left_labels)
right_gini = gini_impurity(right_labels)

# میانگین وزنی Gini برای این تقسیم
weighted_gini = (len(left_labels) * left_gini + len(right_labels) * right_gini) / len(labels)

# به‌روزرسانی بهترین تقسیم در صورت یافتن مقدار Gini بهتر
if weighted_gini < best_gini:
best_gini = weighted_gini
best_feature = feature
best_threshold = threshold
best_splits = (left_mask, right_mask)

return best_feature, best_threshold, best_splits

این تابع ویژگی‌ها رو بررسی می‌کنه و بهترین تقسیم رو بر اساس کمترین مقدار Gini Impurity انتخاب می‌کنه.



📌 ۳. پیاده‌سازی درخت تصمیم (به‌صورت بازگشتی)
حالا باید یه کلاس برای درخت تصمیم بسازیم که گره‌های درخت رو ایجاد کنه و داده‌ها رو تا جایی که ممکنه تقسیم کنه.

class DecisionTree:
def init(self, max_depth=None, min_samples_split=2):
self.max_depth = max_depth
self.min_samples_split = min_samples_split
self.tree = None

def build_tree(self, data, labels, depth=0):
"""
ساخت درخت تصمیم به‌صورت بازگشتی
"""
num_samples, num_features = data.shape

# شرط توقف: اگر به حداکثر عمق برسیم یا تعداد داده‌ها کم باشد
if depth == self.max_depth or num_samples < self.min_samples_split or len(set(labels)) == 1:
leaf_value = self.most_common_label(labels)
return {"leaf": leaf_value}

# پیدا کردن بهترین تقسیم
best_feature, best_threshold, best_splits = best_split(data, labels)
if best_feature is None:
return {"leaf": self.most_common_label(labels)}

👇
👍1
left_mask, right_mask = best_splits
left_subtree = self.build_tree(data[left_mask], labels[left_mask], depth + 1)
right_subtree = self.build_tree(data[right_mask], labels[right_mask], depth + 1)

return {
"feature": best_feature,
"threshold": best_threshold,
"left": left_subtree,
"right": right_subtree,
}

def most_common_label(self, labels):
"""
پیدا کردن رایج‌ترین کلاس در گره برگ
"""
unique_classes, counts = np.unique(labels, return_counts=True)
return unique_classes[np.argmax(counts)]

def fit(self, data, labels):
"""
یادگیری مدل با داده‌های آموزشی
"""
self.tree = self.build_tree(data, labels)

def predict_single(self, x, node):
"""
پیش‌بینی کلاس برای یک نمونه داده
"""
if "leaf" in node:
return node["leaf"]

if x[node["feature"]] <= node["threshold"]:
return self.predict_single(x, node["left"])
else:
return self.predict_single(x, node["right"])

def predict(self, X):
"""
پیش‌بینی کلاس برای چند نمونه داده
"""
return np.array([self.predict_single(x, self.tree) for x in X])



📌 ۴. تست درخت تصمیم با یک دیتاست ساده
حالا وقتشه درخت تصمیم خودمون رو روی یه مجموعه داده تست کنیم!




# ساخت یک دیتاست نمونه
X_train = np.array([
[2.7, 2.5],
[1.3, 1.2],
[3.6, 3.9],
[1.1, 1.0],
[3.0, 3.2]
])

y_train = np.array([0, 0, 1, 0, 1])

# ایجاد مدل و آموزش درخت تصمیم
tree = DecisionTree(max_depth=3)
tree.fit(X_train, y_train)

# تست پیش‌بینی
X_test = np.array([[3.5, 3.4], [1.5, 1.3]])
predictions = tree.predict(X_test)
print("پیش‌بینی‌ها:", predictions)

`این کد یه درخت تصمیم رو روی داده‌های ساده آموزش می‌ده و خروجی کلاس‌ها رو برای داده‌های جدید پیش‌بینی می‌کنه.
📢 جمع‌بندی پارت ۳:
✔️ تابعی نوشتیمبهترین ویژگی و مقدار آستانه رو برای تقسیم داده‌ها انتخاب می‌کنه.
✔️ درخت تصمیم رو به‌صبازگشتی پیاده‌سازی کردیم.
✔️ پیش‌بینینوشتیم که بر اساس درخت، خروجی هر نمونه داده رو مشخص می‌کنه.
✔️ در نهایت، درخت تصمیم خودمون رو داده‌های تست اجرا کردیم!

[لینک کانال ما]

پارت ۴:ترکیب چندین درخت برای ایجاد Random Forest و پیاده‌سازی مکانیزم رأی‌گیری
👍2
آموزش بعدی: پیاده‌سازی الگوریتم‌های دسته‌بندی دیگه از جمله SVM و KNN!
💡 نظرت چیه که الگوریتم بعدی رو تو انتخاب کنی؟ 🤔
👍1
🔥 پروژه کامل: تشخیص بیماری قلبی با جنگل تصادفی (Random Forest) 🔥

💡 هدف پروژه:
توی این پروژه، قراره یه مدل جنگل تصادفی (Random Forest) رو از صفر پیاده‌سازی کنیم و ازش برای پیش‌بینی بیماری قلبی استفاده کنیم.
ما از یه دیتاست واقعی Heart Disease Dataset استفاده می‌کنیم که شامل اطلاعات بیماران هست و باید تشخیص بدیم که فرد در خطر بیماری قلبی قرار داره یا نه! 🏥❤️



📌 ۱. نصب کتابخانه‌های موردنیاز

📌 اول از همه باید کتابخانه‌های لازم رو نصب کنیم:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report
from sklearn.ensemble import RandomForestClassifier



📌 ۲. دریافت دیتاست و بررسی اولیه

🔍 دیتاست ما شامل اطلاعات مختلفی مثل سن، جنسیت، فشار خون، کلسترول و ... هست.
برای شروع، دیتاست رو می‌گیریم و یه نگاهی بهش می‌ندازیم:

# دانلود دیتاست (اگر از Kaggle یا Google Colab استفاده می‌کنید)
url = "https://raw.githubusercontent.com/ahmedbesbes/heart-disease-prediction/master/dataset.csv"
df = pd.read_csv(url)

# نمایش ۵ ردیف اول دیتاست
print(df.head())

# بررسی اطلاعات کلی دیتاست
print(df.info())

# بررسی میزان داده‌های خالی
print(df.isnull().sum())

📌 نکته: اگر دیتای خالی داشتیم، باید قبل از مدل‌سازی اون‌ها رو مدیریت کنیم.



📌 ۳. پردازش داده‌ها (Data Preprocessing)

✔️ تبدیل داده‌های متنی به عددی: بعضی ستون‌ها ممکنه مقدار متنی داشته باشن که باید اون‌ها رو عددی کنیم.
✔️ نرمال‌سازی داده‌ها: داده‌ها باید روی یه مقیاس استاندارد باشن تا مدل بهتر یاد بگیره.
✔️ تقسیم داده‌ها: دیتاست رو به دو بخش Train و Test تقسیم می‌کنیم.

# تبدیل مقادیر متنی به عددی (در صورت وجود)
df = pd.get_dummies(df, drop_first=True)

# جدا کردن ویژگی‌ها و برچسب‌ها
X = df.drop(columns=['target']) # ویژگی‌ها (Attributes)
y = df['target'] # برچسب (Class Label)

# تقسیم دیتاست به ۸۰٪ آموزش و ۲۰٪ تست
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# نمایش تعداد نمونه‌ها
print("تعداد نمونه‌های آموزش:", X_train.shape[0])
print("تعداد نمونه‌های تست:", X_test.shape[0])



📌 ۴. ساخت و آموزش مدل Random Forest

حالا مدل جنگل تصادفی رو می‌سازیم و آموزش می‌دیم! 🚀🌳

# ساخت مدل جنگل تصادفی
model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=42)

# آموزش مدل
model.fit(X_train, y_train)

# پیش‌بینی روی داده‌های تست
y_pred = model.predict(X_test)

# محاسبه دقت مدل
accuracy = accuracy_score(y_test, y_pred)
print(f"🎯 دقت مدل: {accuracy * 100:.2f}%")



📌 ۵. تحلیل نتایج و ارزیابی مدل

حالا بریم ببینیم مدل ما چقدر دقیق و قابل اعتماد هست:

# نمایش گزارش کامل دسته‌بندی
print(classification_report(y_test, y_pred))

# رسم ماتریس سردرگمی
plt.figure(figsize=(6, 5))
sns.heatmap(pd.crosstab(y_test, y_pred), annot=True, fmt='d', cmap="Blues")
plt.xlabel("پیش‌بینی شده")
plt.ylabel("واقعی")
plt.title("📊 ماتریس سردرگمی")
plt.show()

اگر مدل دقت بالایی داشته باشه، یعنی خوب کار می‌کنه و می‌تونیم ازش برای تشخیص بیماری استفاده کنیم! 🚀



📌 ۶. تست مدل با ورودی جدید

حالا یه نمونه داده جدید می‌سازیم و تست می‌کنیم که مدل بیماری قلبی رو درست پیش‌بینی می‌کنه یا نه:

# یک نمونه بیمار جدید (به جای اعداد، مقادیر مناسب دیتاست رو قرار بدید)
new_patient = np.array([[63, 1, 3, 145, 233, 1, 0, 150, 0, 2.3, 0, 0, 1]])

# پیش‌بینی
prediction = model.predict(new_patient)
print("نتیجه مدل برای بیمار جدید:", "⚠️ بیماری قلبی دارد" if prediction[0] == 1 else " سالم است")



📌 ۷. جمع‌بندی پروژه

✔️ یاد گرفتیم که چطور با داده‌های واقعی پزشکی کار کنیم.
✔️ با استفاده از جنگل تصادفی (Random Forest) یه مدل قوی برای تشخیص بیماری قلبی ساختیم.
✔️ مدل رو ارزیابی کردیم و دقتش رو بررسی کردیم.
✔️ در نهایت، یه نمونه داده جدید رو تست کردیم تا ببینیم مدل چطور کار می‌کنه.

🎯 این یه نمونه کاربردی و واقعی از الگوریتم‌های یادگیری ماشین بود! 🚀
👍1🕊1
💡 چالش برای شما:
🔹 می‌تونید تعداد درخت‌ها (n_estimators) رو تغییر بدید و ببینید چقدر روی دقت مدل تاثیر داره؟
🔹 مدل رو با الگوریتم‌های دیگه مثل SVM یا KNN مقایسه کنید!
🔹 تست کنید ببینید کدوم ویژگی‌ها (Feature Importance) مهم‌ترین تاثیر رو روی نتیجه دارند!

لینک کانال ما
🍾1
🔥 اسکریپت کامل پیاده‌سازی Random Forest با دیتابیس داخلی 🔥
💡 این اسکریپت یک دیتاست پیش‌فرض (ساختگی) را درون خود دارد و از آن برای آموزش و تست مدل جنگل تصادفی استفاده می‌کند.

📌 ویژگی‌های اسکریپت:
دیتاست به‌صورت داخلی در کد تعریف شده است.
از کتابخانه sklearn برای پیاده‌سازی Random Forest استفاده شده است.
داده‌ها به Train/Test تقسیم شده و مدل آموزش داده می‌شود.
دقت مدل محاسبه شده و یک نمونه داده جدید تست می‌شود.



📌 اسکریپت کامل:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report

# 🚀 ۱. ایجاد دیتاست داخلی (ساختگی)
data = {
"سن": [25, 34, 45, 23, 42, 51, 60, 48, 37, 29, 41, 53, 39, 58, 30],
"فشار_خون": [120, 130, 140, 110, 135, 145, 150, 138, 132, 125, 136, 148, 128, 152, 122],
"کلسترول": [180, 190, 220, 160, 210, 230, 250, 240, 200, 185, 215, 245, 195, 260, 175],
"قند_خون": [0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0], # 0 = نرمال، 1 = بالا
"بیماری_قلبی": [0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0] # 0 = سالم، 1 = بیمار
}

# تبدیل دیتاست به DataFrame
df = pd.DataFrame(data)

# 🚀 ۲. آماده‌سازی داده‌ها
X = df.drop(columns=["بیماری_قلبی"]) # ویژگی‌ها (Feature)
y = df["بیماری_قلبی"] # برچسب (Label)

# تقسیم داده‌ها به آموزش (80٪) و تست (20٪)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 🚀 ۳. ساخت مدل جنگل تصادفی و آموزش آن
model = RandomForestClassifier(n_estimators=10, max_depth=5, random_state=42)
model.fit(X_train, y_train)

# 🚀 ۴. ارزیابی مدل
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"🎯 دقت مدل: {accuracy * 100:.2f}%")
print("\n📊 گزارش دسته‌بندی:\n", classification_report(y_test, y_pred))

# 🚀 ۵. رسم ماتریس سردرگمی
plt.figure(figsize=(5, 4))
sns.heatmap(pd.crosstab(y_test, y_pred), annot=True, fmt='d', cmap="Blues")
plt.xlabel("پیش‌بینی شده")
plt.ylabel("واقعی")
plt.title("📊 ماتریس سردرگمی")
plt.show()

# 🚀 ۶. تست مدل با یک نمونه جدید
new_patient = np.array([[50, 140, 220, 1]]) # مثال: فردی با فشار خون بالا و کلسترول زیاد
prediction = model.predict(new_patient)
print("🔍 نتیجه برای بیمار جدید:", "⚠️ بیمار است" if prediction[0] == 1 else " سالم است")



📌 توضیحات کد:
✔️ یک دیتاست ساختگی ایجاد شده که شامل اطلاعات بیماران مثل سن، فشار خون، کلسترول و قند خون است.
✔️ داده‌ها به دو بخش آموزشی و تست تقسیم شده‌اند.
✔️ مدل جنگل تصادفی (Random Forest) ساخته و آموزش داده شده است.
✔️ دقت مدل محاسبه شده و یک گزارش دسته‌بندی نمایش داده شده است.
✔️ ماتریس سردرگمی برای نمایش عملکرد مدل رسم شده است.
✔️ یک نمونه داده جدید تست شده و پیش‌بینی انجام شده است.

این اسکریپت آماده اجراست و هیچ دیتابیس خارجی نیاز ندارد! 🚀🔥
👍3❤‍🔥1
یه ریاکشن بزنید این همه دارم چیز یادتون میدم
5👍1🔥1👏1
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 باشه؟
یا هر چیز دیگه که خودتون بگید تو کامنت
👍4🤔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 🔍📊



۲.۱ چرا پیش‌پردازش داده‌ها در 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 #کلاسیفیکیشن 🎯
👍1
پارت ۳: پیاده‌سازی مدل KNN با sklearn

در این بخش، مدل 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
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 #کلاسیفیکیشن 🎯
👍1
پروژه کامل KNN: تشخیص دست‌خط ارقام (MNIST) 🔢🤖

در این پروژه، یک مدل 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 #کلاسیفیکیشن 🎯
👍2👏1
یه ریاکشنمون نشه؟
👍6🔥1
آموزش پیاده سازی knn از صفر بدون مدل های آماده
📌 پارت ۱: مقدمه و مفاهیم 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) است



لینک کانال ما
👍1