分類預測 | Matlab實現GA-XGBoost遺傳算法優化XGBoost的多特征分類預測
目錄
- 分類預測 | Matlab實現GA-XGBoost遺傳算法優化XGBoost的多特征分類預測
- 效果一覽
- 基本介紹
- 程序設計
- 參考資料
效果一覽
基本介紹
Matlab實現GA-XGBoost遺傳算法優化XGBoost的多特征分類預測,輸入多個特征,分四類。
XGBoost的核心算法思想基本就是:不斷地添加樹,不斷地進行特征分裂來生長一棵樹,每次添加一個樹,其實是學習一個新函數f(x),去擬合上次預測的殘差。當我們訓練完成得到k棵樹,我們要預測一個樣本的分數,其實就是根據這個樣本的特征,在每棵樹中會落到對應的一個葉子節點,每個葉子節點就對應一個分數。最后只需要將每棵樹對應的分數加起來就是該樣本的預測值。
程序設計
- 完整程序和數據下載:Matlab實現GA-XGBoost遺傳算法優化XGBoost的多特征分類預測
%% 清空環境變量
warning off % 關閉報警信息
close all % 關閉開啟的圖窗
clear % 清空變量
clc % 清空命令行%% 讀取數據
res = xlsread('data.xlsx');%% 分析數據
num_class = length(unique(res(:, end))); % 類別數(Excel最后一列放類別)
num_res = size(res, 1); % 樣本數(每一行,是一個樣本)
num_size = 0.7; % 訓練集占數據集的比例
res = res(randperm(num_res), :); % 打亂數據集(不打亂數據時,注釋該行)
flag_conusion = 1; % 標志位為1,打開混淆矩陣(要求2018版本及以上)%% 設置變量存儲數據
P_train = []; P_test = [];
T_train = []; T_test = [];%% 劃分數據集
for i = 1 : num_classmid_res = res((res(:, end) == i), :); % 循環取出不同類別的樣本mid_size = size(mid_res, 1); % 得到不同類別樣本個數mid_tiran = round(num_size * mid_size); % 得到該類別的訓練樣本個數P_train = [P_train; mid_res(1: mid_tiran, 1: end - 1)]; % 訓練集輸入T_train = [T_train; mid_res(1: mid_tiran, end)]; % 訓練集輸出P_test = [P_test; mid_res(mid_tiran + 1: end, 1: end - 1)]; % 測試集輸入T_test = [T_test; mid_res(mid_tiran + 1: end, end)]; % 測試集輸出
end%% 數據轉置
P_train = P_train'; P_test = P_test';
T_train = T_train'; T_test = T_test';%% 得到訓練集和測試樣本個數
M = size(P_train, 2);
N = size(P_test , 2);%% 數據歸一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);t_train = T_train;
t_test = T_test;%% 數據轉置
p_train = p_train'; p_test = p_test';
t_train = t_train'; t_test = t_test';%% 參數設置
fun = @getObjValue; % 目標函數
dim = 3; % 優化參數個數
lb = [001, 001, 0.01]; % 優化參數目標下限(最大迭代次數,深度,學習率)
ub = [ 50, 012, 0.1]; % 優化參數目標上限(最大迭代次數,深度,學習率)
參考資料
[1] https://blog.csdn.net/kjm13182345320/article/details/128163536?spm=1001.2014.3001.5502
[2] https://blog.csdn.net/kjm13182345320/article/details/128151206?spm=1001.2014.3001.5502