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

MATLAB机器学习入门教程

以下是一份MATLAB机器学习入门教程,涵盖机器学习基本概念、核心流程及分类、回归、聚类三类基础算法的实现,适合零基础学习者快速上手。

一、机器学习基础概念

  • 定义:让计算机从数据中自动学习规律,用于预测或决策的技术。
  • 分类
    • 监督学习:从带标签的数据中学习(如分类、回归)
    • 无监督学习:从无标签的数据中发现规律(如聚类)
    • 强化学习:通过与环境交互学习最优策略(进阶内容)
  • 核心流程:数据准备→特征工程→模型训练→评估优化→预测应用

二、MATLAB机器学习工具基础

MATLAB的Statistics and Machine Learning Toolbox提供了完整的机器学习函数,常用工作流函数:

  • fitcknn/fitcsvm:分类模型训练
  • fitlm/fitrsvm:回归模型训练
  • kmeans:聚类分析
  • predict:模型预测
  • crossval:交叉验证

三、完整入门实例(三类基础算法)

实例1:监督学习——分类问题(鸢尾花物种识别)

场景:根据花瓣长度、宽度等特征,预测鸢尾花的物种(3类)。

% 1. 加载内置数据集(包含150个样本,4个特征,3个类别)
load fisheriris
X = meas;  % 特征:花瓣/花萼的长度和宽度
Y = species;  % 标签:3种鸢尾花% 2. 数据可视化(特征散点图)
figure;
gscatter(X(:,1), X(:,2), Y);  % 按类别绘制散点图
xlabel('花萼长度'); ylabel('花萼宽度'); title('鸢尾花特征散点图');
legend('Setosa', 'Versicolor', 'Virginica');% 3. 划分训练集和测试集(7:3)
rng(123);  % 固定随机种子,结果可复现
cv = cvpartition(Y, 'HoldOut', 0.3);  % 留出30%作为测试集
X_train = X(training(cv), :);
Y_train = Y(training(cv));
X_test = X(test(cv), :);
Y_test = Y(test(cv));% 4. 训练K近邻(KNN)分类模型
model_knn = fitcknn(X_train, Y_train, 'NumNeighbors', 5);% 5. 模型预测与评估
Y_pred = predict(model_knn, X_test);% 混淆矩阵(评估分类效果)
conf_mat = confusionmat(Y_test, Y_pred);
disp('混淆矩阵:');
disp(conf_mat);% 计算准确率
accuracy = sum(diag(conf_mat)) / sum(conf_mat(:));
fprintf('分类准确率:%.2f%%\n', accuracy*100);% 6. 可视化分类结果
figure;
gscatter(X_test(:,1), X_test(:,2), Y_pred);
hold on;
gscatter(X_test(:,1), X_test(:,2), Y_test, 'k', 'xo', 8);  % 用黑色标记真实标签
xlabel('花萼长度'); ylabel('花萼宽度'); 
title('KNN分类预测结果(黑x为真实标签)');
legend('预测Setosa', '预测Versicolor', '预测Virginica', '真实标签');
hold off;

结果解读

  • 混淆矩阵对角线元素表示正确分类的样本数
  • 准确率通常可达90%以上,KNN算法通过"少数服从多数"原则进行分类
实例2:监督学习——回归问题(房价预测)

场景:根据房屋面积、卧室数量等特征,预测房屋价格(连续值)。

% 1. 生成模拟数据
rng(123);
n = 200;  % 样本数
area = 50 + 150*rand(n,1);  % 面积:50~200㎡
bedrooms = randi([1,5], n,1);  % 卧室数:1~5
year = 1990 + 30*rand(n,1);  % 建造年份:1990~2020
% 真实关系:价格 = 8000*面积 + 50000*卧室数 - 20000*年份 + 4e7 + 噪声
price = 8000*area + 50000*bedrooms - 20000*year + 4e7 + 5e5*randn(n,1);
data = table(area, bedrooms, year, price, 'VariableNames', {'Area','Bedrooms','Year','Price'});% 2. 训练线性回归模型
model_lin = fitlm(data, 'Price ~ Area + Bedrooms + Year');
disp(model_lin);  % 查看模型参数% 3. 模型评估(R²和均方误差)
r2 = model_lin.Rsquared.Ordinary;  % 决定系数(越接近1越好)
rmse = sqrt(model_lin.MSE);  % 均方根误差(越小越好)
fprintf('线性回归 R²:%.4f,RMSE:%.2f\n', r2, rmse);% 4. 预测新数据
new_data = table([120; 150], [3; 4], [2010; 2005], 'VariableNames', {'Area','Bedrooms','Year'});
pred_price = predict(model_lin, new_data);
disp('新房屋价格预测:');
disp(table(new_data, pred_price, 'VariableNames', {'特征','预测价格'}));% 5. 可视化预测效果(实际值vs预测值)
figure;
Y_pred = predict(model_lin, data);
plot(data.Price, Y_pred, 'o', 'MarkerFaceColor', [0.5,0.8,1]);
hold on;
plot([min(data.Price), max(data.Price)], [min(data.Price), max(data.Price)], 'r--');
xlabel('实际价格'); ylabel('预测价格'); title('线性回归预测效果');
legend('预测点', '理想线'); grid on;

结果解读

  • 模型输出中的Estimate列是回归系数,反映特征对价格的影响程度
  • R²接近1表明模型能很好地解释价格变化
实例3:无监督学习——聚类问题(客户分群)

场景:根据客户的消费金额和消费频率,将客户分为不同群体。

% 1. 生成客户消费数据
rng(123);
n = 300;
% 三类客户特征
group1 = [randn(n/3,1)*0.5 + 1, randn(n/3,1)*0.3 + 0.2];  % 低消费低频
group2 = [randn(n/3,1)*0.6 + 3, randn(n/3,1)*0.4 + 0.7];  % 中消费中频
group3 = [randn(n/3,1)*0.7 + 5, randn(n/3,1)*0.5 + 1.2];  % 高消费高频
X = [group1; group2; group3];  % 合并数据(无标签)% 2. 可视化原始数据(无标签)
figure;
plot(X(:,1), X(:,2), 'o', 'MarkerFaceColor', 'b', 'MarkerEdgeColor', 'k');
xlabel('月消费金额(千元)'); ylabel('月消费频率'); title('客户消费数据(无标签)');% 3. 使用K-means聚类(假设分为3类)
k = 3;
[idx, centers] = kmeans(X, k);  % idx为聚类标签,centers为聚类中心% 4. 可视化聚类结果
figure;
gscatter(X(:,1), X(:,2), idx, 'rgb', 'osd');  % 按聚类标签绘图
hold on;
plot(centers(:,1), centers(:,2), 'ko', 'MarkerSize', 12, 'LineWidth', 2);  % 聚类中心
xlabel('月消费金额(千元)'); ylabel('月消费频率'); title('K-means聚类结果');
legend('客户群1', '客户群2', '客户群3', '聚类中心'); grid on;% 5. 分析聚类特征(计算每类的均值)
cluster_stats = zeros(k, 2);
for i = 1:kcluster_stats(i,:) = mean(X(idx==i,:));
end
disp('各客户群特征均值:');
disp(table(cluster_stats(:,1), cluster_stats(:,2), 'VariableNames', {'平均消费金额','平均消费频率'}));

结果解读

  • K-means算法自动将数据分为3个簇,每个簇对应不同消费特征的客户群体
  • 聚类中心反映了每个群体的典型特征,可用于制定差异化营销策略

四、模型选择与调优基础

  1. 交叉验证避免过拟合

    % 5折交叉验证评估KNN模型
    model_knn_cv = fitcknn(X, Y, 'NumNeighbors', 5, 'CrossVal', 'On');
    cv_acc = 1 - kfoldLoss(model_knn_cv);  % 交叉验证准确率
    fprintf('交叉验证准确率:%.2f%%\n', cv_acc*100);
    
  2. 参数调优(以KNN为例)

    % 测试不同K值的效果
    acc = [];
    for k = 1:15model = fitcknn(X_train, Y_train, 'NumNeighbors', k);Y_pred = predict(model, X_test);acc(k) = mean(Y_pred == Y_test);
    end
    figure;
    plot(1:15, acc, 'o-'); xlabel('K值'); ylabel('准确率'); title('不同K值的分类效果'); grid on;
    
http://www.dtcms.com/a/491577.html

相关文章:

  • 网站建设的好处论文网络营销以什么为中心
  • android studio设置大内存,提升编译速度
  • 从原理到实战:数据库索引、切片与四表联查全解析
  • 重庆建站免费模板mui做wap网站
  • 思想实验:如何使用MeshGPT?
  • Vue3 + TypeScript 实现 CAN 报文实时回放与合并显示
  • seo网站推广有哪些网站维护与优化教程
  • LeetCode 2598. 执行操作后的最大 MEX
  • 机器学习,深度学习,神经网络,Transformer的关系
  • 赣州市赣县区建设局网站wordpress 主题导出
  • 广州知名网站建设性价比高百度企业官网认证
  • Vue 前端面试题(含答案)大全 v2025
  • 智能化与绿色化:2025年巧克力加工设备市场发展趋势报告
  • 经营网站备案信息自己做网站 怎么赚钱
  • CLIP介绍
  • 网站文件夹结构wordpress 入侵
  • neo4j安装
  • C语言基础数组作业(冒泡算法)
  • 【芯片验证日志的艺术:如何让打印信息成为Debug的利器?】
  • 基于MCU中RTT Viwer打印,从移植到测试所遇到的问题全部解决
  • 基于mis的客户关系管理系统的设计与实现(源码+论文+部署+安装)
  • 上海定制建设网站appcan wordpress
  • php做网站浏览量深圳市宝安区区号
  • 《爬虫进阶实战:突破反爬屏障,玩转动态数据与代理策略》
  • 公众号微网站开发展览公司网站建设方案
  • 【面板数据】地市国家级绿色工业园区名单数据集(2016-2024年)
  • 做网站找哪家公司最好网站优化加盟
  • 广东省公路建设公司官方网站调查问卷wordpress
  • 近半数地球同步卫星传输未加密数据
  • CSP 配置指南:SpringBoot/Express 实操 + 多域名适配,防 XSS 攻击超简单