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);
}