یادگیری ترکیبی Stacking

یادگیری ترکیبی Stacking

stacking
هوش مصنوعي یادگیری گروهی یادگیری ماشین

یادگیری ترکیبی Stacking







% بارگذاری مجموعه داده Iris
load fisheriris;
X = meas(:, 1:2); % فقط دو ویژگی اول (طول و عرض کاسبرگ)
y = species;      % برچسب‌های کلاس

% تبدیل برچسب‌های رشته‌ای به عددی
[~, ~, y_numeric] = unique(y);

% تقسیم داده‌ها به آموزش و تست
rng(42); % برای تکرارپذیری
cv = cvpartition(length(y), 'HoldOut', 0.3); % 30% برای تست
X_train = X(cv.training, :);
y_train = y_numeric(cv.training);
X_test = X(cv.test, :);
y_test = y_numeric(cv.test);

% آموزش مدل‌های پایه
base_model1 = fitctree(X_train, y_train, 'MaxDepth', 3); % درخت تصمیم
base_model2 = fitcknn(X_train, y_train, 'NumNeighbors', 5); % KNN

% تولید پیش‌بینی‌های مدل‌های پایه با اعتبارسنجی متقاطع
cv_model = crossvalind('Kfold', size(X_train, 1), 5); % 5-Fold Cross-Validation
meta_features = zeros(size(X_train, 1), 2); % برای ذخیره پیش‌بینی‌های مدل‌های پایه

for k = 1:5
    train_idx = cv_model ~= k;
    test_idx = cv_model == k;
    
    % آموزش مدل‌های پایه روی داده‌های Fold
    temp_model1 = fitctree(X_train(train_idx, :), y_train(train_idx), 'MaxDepth', 3);
    temp_model2 = fitcknn(X_train(train_idx, :), y_train(train_idx), 'NumNeighbors', 5);
    
    % پیش‌بینی برای داده‌های تست Fold
    meta_features(test_idx, 1) = predict(temp_model1, X_train(test_idx, :));
    meta_features(test_idx, 2) = predict(temp_model2, X_train(test_idx, :));
end

% آموزش مدل متا (رگرسیون لجستیک)
meta_model = fitcecoc(meta_features, y_train); % مدل متا با رگرسیون لجستیک

% تولید پیش‌بینی‌های مدل‌های پایه برای داده‌های تست
test_meta_features = [predict(base_model1, X_test), predict(base_model2, X_test)];

% پیش‌بینی نهایی با مدل متا
y_pred = predict(meta_model, test_meta_features);

% ارزیابی دقت مدل
accuracy = sum(y_pred == y_test) / length(y_test);
fprintf('دقت مدل Stacking: %.2f\n', accuracy);

% رسم نواحی تصمیم‌گیری
x_min = min(X(:,1)) - 1; x_max = max(X(:,1)) + 1;
y_min = min(X(:,2)) - 1; y_max = max(X(:,2)) + 1;
[xx, yy] = meshgrid(x_min:0.01:x_max, y_min:0.01:y_max);
X_grid = [xx(:), yy(:)];

% پیش‌بینی مدل‌های پایه برای نواحی تصمیم‌گیری
grid_meta_features = [predict(base_model1, X_grid), predict(base_model2, X_grid)];

% پیش‌بینی نهایی برای نواحی تصمیم‌گیری
Z = predict(meta_model, grid_meta_features);
Z = reshape(Z, size(xx));

% رسم نواحی تصمیم‌گیری و نقاط داده
figure;
contourf(xx, yy, Z, 'LineStyle', 'none');
colormap([1 0.7 0.7; 0.7 1 0.7; 0.7 0.7 1]); % رنگ‌های متمایز
hold on;
gscatter(X(:,1), X(:,2), y, 'rbg', 'o', 5, 'filled'); % نقاط داده
xlabel('طول کاسبرگ (cm)');
ylabel('عرض کاسبرگ (cm)');
title('نواحی تصمیم‌گیری مدل Stacking (Iris)');
legend('Location', 'best');
hold off;
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_predict
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

# بارگذاری مجموعه داده Iris
iris = load_iris()
X = iris.data[:, :2]  # فقط دو ویژگی اول (طول و عرض کاسبرگ)
y = iris.target

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

# آموزش مدل‌های پایه
base_model1 = DecisionTreeClassifier(max_depth=3, random_state=42)  # درخت تصمیم
base_model2 = KNeighborsClassifier(n_neighbors=5)  # KNN

# تولید پیش‌بینی‌های مدل‌های پایه با اعتبارسنجی متقاطع
meta_features = np.column_stack([
    cross_val_predict(base_model1, X_train, y_train, cv=5, method='predict'),
    cross_val_predict(base_model2, X_train, y_train, cv=5, method='predict')
])

# آموزش مدل‌های پایه روی کل داده‌های آموزشی
base_model1.fit(X_train, y_train)
base_model2.fit(X_train, y_train)

# آموزش مدل متا (رگرسیون لجستیک)
meta_model = LogisticRegression(multi_class='multinomial', random_state=42)
meta_model.fit(meta_features, y_train)

# تولید پیش‌بینی‌های مدل‌های پایه برای داده‌های تست
test_meta_features = np.column_stack([
    base_model1.predict(X_test),
    base_model2.predict(X_test)
])

# پیش‌بینی نهایی با مدل متا
y_pred = meta_model.predict(test_meta_features)

# ارزیابی دقت مدل
accuracy = np.mean(y_pred == y_test)
print(f"دقت مدل Stacking: {accuracy:.2f}")

# رسم نواحی تصمیم‌گیری
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01), np.arange(y_min, y_max, 0.01))
X_grid = np.c_[xx.ravel(), yy.ravel()]

# پیش‌بینی مدل‌های پایه برای نواحی تصمیم‌گیری
grid_meta_features = np.column_stack([
    base_model1.predict(X_grid),
    base_model2.predict(X_grid)
])

# پیش‌بینی نهایی برای نواحی تصمیم‌گیری
Z = meta_model.predict(grid_meta_features)
Z = Z.reshape(xx.shape)

# رسم نواحی تصمیم‌گیری و نقاط داده
plt.figure(figsize=(10, 6))
cmap = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])
plt.contourf(xx, yy, Z, cmap=cmap, alpha=0.3)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=cmap, edgecolors='k', s=100)
plt.xlabel('طول کاسبرگ (cm)')
plt.ylabel('عرض کاسبرگ (cm)')
plt.title('نواحی تصمیم‌گیری مدل Stacking (Iris)')
plt.show()

فکر خود را اینجا بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

زمینه‌های نمایش داده شده را انتخاب نمایید. بقیه مخفی خواهند شد. برای تنظیم مجدد ترتیب، بکشید و رها کنید.
  • تصویر
  • شناسۀ محصول
  • امتیاز
  • قيمت
  • موجودی
  • دسترسی
  • افزودن به سبد خرید
  • توضیح
  • محتوا
  • وزن
  • اندازه
  • اطلاعات اضافی
برای مخفی‌کردن نوار مقایسه، بیرون را کلیک نمایید
مقایسه