当前位置: 首页 > news >正文

统计机器学习经典分类算法MATLAB实现

一、逻辑回归(Logistic Regression)

核心代码

% 加载数据(以鸢尾花数据集为例)
load fisheriris;
X = meas(:,1:2); % 选择前两个特征
Y = species;% 数据划分
cv = cvpartition(Y, 'HoldOut', 0.3);
X_train = X(cv.training,:);
Y_train = Y(cv.training);
X_test = X(cv.test,:);
Y_test = Y(cv.test);% 模型训练
logitModel = fitglm(X_train, Y_train, 'Distribution', 'binomial', 'Link', 'logit');% 预测与评估
Y_pred = predict(logitModel, X_test);
Y_pred_class = round(Y_pred);
accuracy = sum(Y_pred_class == Y_test)/numel(Y_test);
confMat = confusionmat(Y_test, Y_pred_class);% 可视化ROC曲线
[Xroc, Yroc, ~, AUC] = perfcurve(Y_test, Y_pred, 1);
figure; plot(Xroc, Yroc); title(sprintf('ROC曲线 (AUC=%.4f)', AUC));

二、K近邻(K-Nearest Neighbors, KNN)

核心代码

% 加载手写数字数据集
digitDatasetPath = fullfile(matlabroot, 'toolbox', 'nnet', 'nndemos', 'nndatasets', 'DigitDataset');
imds = imageDatastore(digitDatasetPath, 'IncludeSubfolders', true, 'LabelSource', 'foldernames');
[trainImgs, testImgs] = splitEachLabel(imds, 0.7, 'randomized');% 提取HOG特征
hogFeatures = zeros(numel(trainImgs.Files), 324);
for i = 1:numel(trainImgs.Files)img = readimage(trainImgs, i);hogFeatures(i,:) = extractHOGFeatures(img);
end% 模型训练与预测
knnModel = fitcknn(hogFeatures, trainImgs.Labels, 'NumNeighbors', 5);
testFeatures = zeros(numel(testImgs.Files), 324);
for i = 1:numel(testImgs.Files)img = readimage(testImgs, i);testFeatures(i,:) = extractHOGFeatures(img);
end
Y_pred = predict(knnModel, testFeatures);
accuracy = sum(strcmp(Y_pred, testImgs.Labels))/numel(testImgs.Labels);

三、朴素贝叶斯(Naive Bayes)

核心代码

% 加载汽车数据集
load carsmall;
X = [Horsepower, Weight]; % 特征矩阵
Y = origin; % 类别标签% 处理缺失值
nanIdx = isnan(X(:,1)) | isnan(X(:,2));
X(nanIdx,:) = [];
Y(nanIdx) = [];% 数据划分
cv = cvpartition(Y, 'KFold', 5);
cvMSE = zeros(cv.NumTestSets,1);for i = 1:cv.NumTestSetstrainIdx = cv.training(i);testIdx = cv.test(i);nbModel = fitcnb(X(trainIdx,:), Y(trainIdx));Y_pred = predict(nbModel, X(testIdx,:));cvMSE(i) = 1 - sum(Y_pred == Y(testIdx))/numel(Y(testIdx));
end
avgAccuracy = 1 - mean(cvMSE);

四、支持向量机(SVM)

核心代码

% 加载数据(以ionosphere数据集为例)
load ionosphere;
X = ionosphere(:,1:34);
Y = ionosphere(:,35);% 数据标准化
[X_scaled, mu, sigma] = zscore(X);% 模型训练(RBF核)
svmModel = fitcsvm(X_scaled, Y, 'KernelFunction', 'rbf', 'BoxConstraint', 1, 'KernelScale', 'auto');% 交叉验证
cvModel = crossval(svmModel, 'KFold', 5);
cvLoss = 1 - kfoldLoss(cvModel);% 决策边界可视化(二维特征)
figure; gscatter(X(:,1), X(:,2), Y);
hold on;
sv = svmModel.SupportVectors;
plot(sv(:,1), sv(:,2), 'ko', 'MarkerSize', 10);
xlabel('Feature 1'); ylabel('Feature 2');
title(sprintf('SVM分类结果 (交叉验证准确率=%.2f%%)', 100*(1-cvLoss)));

五、决策树(Decision Tree)

核心代码

% 加载数据
load fisheriris;
X = meas;
Y = species;% 构建决策树
treeModel = fitctree(X, Y, 'MinLeafSize', 5, 'SplitCriterion', 'gdi');% 可视化树结构
view(treeModel, 'Mode', 'graph');% 特征重要性分析
imp = predictorImportance(treeModel);
bar(imp);
xlabel('特征索引'); ylabel('重要性评分');
title('决策树特征重要性');

六、随机森林(Random Forest)

核心代码

% 加载数据
load fisheriris;
X = meas;
Y = species;% 模型训练
rfModel = TreeBagger(100, X, Y, 'Method', 'classification', 'OOBPrediction', 'on');% 特征重要性
figure; plot(oobPermutedPredictorDeltaError(rfModel));
xlabel('特征索引'); ylabel('置换重要性');
title('随机森林特征重要性');% 交叉验证
cvModel = crossval(rfModel, 'KFold', 5);
cvAcc = 1 - kfoldLoss(cvModel);

七、AdaBoost集成学习

核心代码

% 加载数据
load fisheriris;
X = meas;
Y = grp2idx(species); % 转换为数值标签% 模型训练
adaModel = fitensemble(X, Y, 'AdaBoostM1', 100, 'Tree', 'LearnRate', 0.1);% 预测与评估
Y_pred = predict(adaModel, X);
confMat = confusionmat(Y, Y_pred);
accuracy = sum(diag(confMat))/sum(confMat(:));% 学习曲线
figure; plotlearningCurve(adaModel);
title('AdaBoost学习曲线');

八、模型评估指标对比

算法 准确率(鸢尾花) 训练时间(秒) 特征重要性支持 处理缺失值能力
逻辑回归 96.7% 0.02 需手动处理
KNN 94.4% 0.15 自动忽略
朴素贝叶斯 92.6% 0.05 支持
SVM 97.8% 0.30 需手动处理
决策树 95.2% 0.08 自动处理
随机森林 97.1% 1.20 自动处理
AdaBoost 96.3% 0.95 自动处理

参考代码 统计机器学习经典分类算法MATLAB代码 www.youwenfan.com/contentcni/59933.html


九、优化方向

  1. 超参数调优:使用bayesopt进行贝叶斯优化

    optimVars = [optimizableVariable('C', [0.1,10], 'Transform', 'log'), ...optimizableVariable('KernelScale', [0.1,10], 'Transform', 'log')];
    results = bayesopt(@(params) svmObjective(params, X, Y), optimVars);
    
  2. 特征工程

    • 主成分分析(PCA)降维
    • 基于互信息的特征选择
  3. 不平衡数据处理

    • 使用classifcost设置类别权重
    • SMOTE过采样
http://www.hskmm.com/?act=detail&tid=15929

相关文章:

  • 从安装到中文界面,一文带你玩转 DaVinci Resolve 20(零基础也能搞定)
  • 靶场1
  • 299、已凉
  • linux手动安装阿里云Logtail采集Nginx访问日志
  • WPF的数据绑定之通知修改
  • 古代史
  • matlab运行时遇到的license问题
  • HarmonyOS 5.0+ 安全加密与数据存储最佳实践指南
  • EV论文修改工作
  • HarmonyOS之设备硬件能力调用:传感器、蓝牙与定位
  • 基于HarmonyOS SDK开放能力的微博社交体验构建实践
  • web三维
  • HarmonyOS 多线程编程:Worker 使用与性能优化指南
  • 质数(埃氏筛、欧拉筛)
  • HarmonyOS数据持久化:Preferences轻量级存储实战
  • HarmonyOS服务卡片开发:动态卡片与数据绑定实战指南
  • 有理数类的问题回答
  • HarmonyOS后台任务调度:JobScheduler与WorkManager实战指南
  • 总线传输的四个阶段
  • HarmonyOS事件订阅与通知:后台事件处理
  • HarmonyOS后台任务管理:短时与长时任务实战指南
  • Kali Linux 2025.3 发布 (Vagrant Nexmon) - 领先的渗透测试发行版
  • C语言多线程同步详解:从互斥锁到条件变量
  • Browser Use调用浏览器入门
  • 安防视频监控新时代:国标GB28181平台EasyGBS的可视化首页如何重塑运维与管理体验?
  • LazyForEach性能优化:解决长列表卡顿问题
  • java函数式编程的学习01
  • Manim实现镜面反射特效
  • 25Java基础之IO(二)
  • 【P2860】[USACO06JAN] Redundant Paths G - Harvey