Nâng Cao Độ Chính Xác Mô Hình Máy Học Với Kỹ Thuật Kết Hợp Đa Mô Hình Trong Java

Cơ Sở Lý Thuyết Kết Hợp Mô Hình

Kỹ thuật kết hợp đa mô hình (Ensemble Learning) tối ưu hóa hiệu suất dự đoán bằng cách tổng hợp kết quả từ nhiều mô hình thành phần. Phương pháp này đặc biệt hiệu quả trong việc giảm phương sai và thiên lệch, đồng thời nâng cao độ ổn định cho cả bài toán phân loại và hồi quy. Các tiếp cận chính bao gồm:

Phương Pháp Bỏ Phiếu Đa Mô Hình

Đối với bài toán phân loại, kết quả cuối cùng được xác định thông qua cơ chế biểu quyết từ các mô hình cơ sở. Triển khai mẫu dưới đây sử dụng cấu trúc đếm phiếu trực tiếp thay vì hàm thư viện:

import java.util.*;

public class MajorityVoter {
    private List<Predictor> baseModels;

    public MajorityVoter(List<Predictor> models) {
        this.baseModels = models;
    }

    public String classify(String feature) {
        Map<String, Integer> tally = new HashMap<>();
        for (Predictor model : baseModels) {
            String outcome = model.predict(feature);
            tally.merge(outcome, 1, Integer::sum);
        }

        String finalResult = null;
        int maxCount = -1;
        for (Map.Entry<String, Integer> entry : tally.entrySet()) {
            if (entry.getValue() > maxCount) {
                maxCount = entry.getValue();
                finalResult = entry.getKey();
            }
        }
        return finalResult;
    }
}

interface Predictor {
    String predict(String input);
}

class DecisionModel implements Predictor {
    private String label;

    public DecisionModel(String label) {
        this.label = label;
    }

    @Override
    public String predict(String input) {
        return label;
    }
}

Phương Pháp Xếp Tầng Thông Minh

Kỹ thuật stacking sử dụng mô hình cấp hai (meta-learner) để tổng hợp đầu ra từ các mô hình cơ sở. Phiên bản cải tiến dưới đây xử lý đầu vào dạng vector thay vì chuỗi:

import java.util.*;

public class MetaEnsemble {
    private List<Predictor> baseModels;
    private Predictor metaLearner;

    public MetaEnsemble(List<Predictor> baseModels, Predictor metaLearner) {
        this.baseModels = baseModels;
        this.metaLearner = metaLearner;
    }

    public String predict(String feature) {
        List<String> baseOutputs = new ArrayList<>();
        for (Predictor model : baseModels) {
            baseOutputs.add(model.predict(feature));
        }
        
        String featureVector = String.join(" ", baseOutputs);
        return metaLearner.predict(featureVector);
    }
}

class MetaPredictor implements Predictor {
    @Override
    public String predict(String input) {
        String[] predictions = input.split(" ");
        Map<String, Integer> countMap = new HashMap<>();
        
        for (String p : predictions) {
            countMap.put(p, countMap.getOrDefault(p, 0) + 1);
        }
        
        return Collections.max(countMap.entrySet(), 
            Map.Entry.comparingByValue()).getKey();
    }
}

Áp Dụng Cho Bài Toán Hồi Quy

Đối với hồi quy, phương pháp trung bình có trọng số cho phép điều chỉnh đóng góp của từng mô hình. Trọng số có thể được tối ưu hóa thông qua validation set:

public class WeightedRegressor {
    private List<Regressor> models;
    private double[] weights;

    public WeightedRegressor(List<Regressor> models, double[] weights) {
        this.models = models;
        this.weights = weights;
    }

    public double estimate(double input) {
        double sum = 0.0;
        double weightSum = 0.0;
        
        for (int i = 0; i < models.size(); i++) {
            sum += models.get(i).predict(input) * weights[i];
            weightSum += weights[i];
        }
        return sum / weightSum;
    }
}

interface Regressor {
    double predict(double input);
}

Thẻ: Ensemble Learning Majority Voting Stacked Generalization Model Fusion Predictive Averaging

Đăng vào ngày 2 tháng 7 lúc 05:06