MATLAB机器学习101:快速掌握模型构建技巧
发布时间: 2024-08-30 08:28:31 阅读量: 100 订阅数: 38
机器学习-MATLAB基础.pdf
![MATLAB机器学习算法示例](https://i0.wp.com/spotintelligence.com/wp-content/uploads/2023/11/linear-discriminant-analysis-1024x576.webp?resize=1024%2C576&ssl=1)
# 1. MATLAB机器学习概览
在本章中,我们将提供MATLAB在机器学习领域的概览。MATLAB是一种广泛应用于工程和科学计算的高级编程语言和交互式环境,它提供了一系列工具箱,用于数据可视化、分析和算法开发。尤其在机器学习领域,MATLAB通过其机器学习工具箱,为研究者和工程师提供了强大的算法实现能力,以及对数据进行分析和构建预测模型的便捷方法。
## 1.1 MATLAB机器学习的适用场景
MATLAB在机器学习中主要适用于以下场景:
- 数据挖掘:利用MATLAB强大的数据分析工具,可以对数据进行深入探索,提取有价值的信息和模式。
- 预测模型:通过内置的机器学习算法,开发者可以构建预测性模型,用于股票市场预测、消费行为分析等多种场景。
- 研究开发:MATLAB支持算法原型的快速开发,为研究人员提供了一个便于实验和验证机器学习理论的平台。
## 1.2 MATLAB机器学习的核心优势
MATLAB机器学习的核心优势包括:
- 易用性:MATLAB提供直观的用户界面和丰富的命令集,使得复杂算法的实现变得简单直观。
- 高效性:针对矩阵和数组运算进行了高度优化,使得数据处理和算法实现更为高效。
- 可视化:内置强大的数据可视化工具,有助于对数据和模型结果进行直观展示和分析。
通过接下来的章节,我们将深入介绍MATLAB在机器学习中的理论基础、实践技巧以及高级应用,带领读者领略MATLAB在机器学习领域的强大功能和无限潜力。
# 2. MATLAB中的机器学习理论基础
## 2.1 机器学习的基本概念
### 2.1.1 机器学习的定义和核心要素
机器学习是人工智能的一个分支,它使计算机系统能够从数据中学习和改进,而无需进行明确的编程。机器学习的核心要素包括数据集、算法、模型、训练和预测。
- **数据集**:是机器学习模型的基础,它包含了从真实世界中收集的信息,可以是结构化的,如表格数据,也可以是非结构化的,如文本或图像数据。
- **算法**:是学习过程的指导方针,它定义了如何从数据中提取特征,并使用这些特征来训练模型。
- **模型**:是对数据进行学习后得到的结果,它能够在新的数据上进行预测或分类。
- **训练**:是模型学习的过程,通过不断优化来拟合数据集。
- **预测**:是在训练完成后,使用模型对未知数据进行推断。
### 2.1.2 监督学习与非监督学习的区别
监督学习和非监督学习是机器学习中的两大主要类型,它们在学习方法和应用场景上有着本质的区别。
- **监督学习**依赖于标注好的数据集进行训练。在这类学习中,每个训练样本都有一个目标标签,模型的任务是学习输入和输出之间的映射关系。常见的监督学习任务包括分类和回归。
- **分类问题**:目标是将输入样本分配到有限的几个类别中,如垃圾邮件检测,其中邮件要么是垃圾邮件要么不是。
- **回归问题**:目标是预测连续值输出,如房价预测,输出是房屋的估计价格。
- **非监督学习**则不依赖于标注的数据集。它试图从数据中发现结构或模式,常见的非监督学习任务包括聚类和降维。
- **聚类问题**:目标是将数据点分组成多个类别,使得同一类别内的数据点彼此相似,不同类别间的数据点则差异较大,如市场细分,将消费者分成不同的群体。
- **降维问题**:目标是减少数据的维度,同时尽可能保留数据的重要信息,如特征提取,将高维数据转换为低维表示。
## 2.2 常见的机器学习算法介绍
### 2.2.1 线性回归和逻辑回归
线性回归和逻辑回归是最基础的机器学习算法之一,它们在监督学习中扮演着重要的角色。
- **线性回归**用于回归任务,它假设因变量和自变量之间存在线性关系,并试图找到最佳的线性关系来预测结果。在MATLAB中,可以通过 `fitlm` 函数轻松实现线性回归模型。
```matlab
% 假设 X 和 Y 是输入数据和目标变量
lm = fitlm(X, Y);
% 可以查看模型参数和统计信息
disp(lm);
```
- **逻辑回归**虽然是“回归”这个名字,但它通常用于分类问题,特别是二分类问题。逻辑回归模型使用sigmoid函数将线性回归的结果转换为概率值。
```matlab
% 使用逻辑回归模型进行分类的示例代码
% 假设 X 是输入数据, Y 是二分类目标变量
logReg = fitglm(X, Y, 'Distribution', 'binomial');
% 输出模型参数
disp(logReg);
```
### 2.2.2 决策树与随机森林
决策树是一种简单但强大的监督学习方法,它模仿人类决策过程,通过一系列问题对数据进行分割。随机森林是决策树的集成方法,它构建了多个决策树,并将它们的预测结果合并起来,以提高预测的准确性和防止过拟合。
```matlab
% 使用MATLAB构建决策树的示例代码
tree = fitctree(X, Y);
% 随机森林的构建,需要使用TreeBagger类
rf = TreeBagger(50, X, Y);
```
### 2.2.3 支持向量机(SVM)
支持向量机(SVM)是一种常用的监督学习模型,用于分类和回归任务。SVM在高维空间中寻找一个超平面,该超平面最大化不同类别之间的边界。在MATLAB中,可以用 `fitcsvm` 函数来训练SVM模型。
```matlab
% SVM模型的训练代码示例
svmModel = fitcsvm(X, Y);
% 使用训练好的模型进行预测
pred = predict(svmModel, newX);
```
## 2.3 模型评估与选择
### 2.3.1 训练集与测试集的划分
在机器学习中,数据通常被划分为训练集和测试集两部分。训练集用于训练模型,而测试集用于评估模型的性能。合理地划分数据集对于模型的准确性和泛化能力至关重要。在MATLAB中,可以使用 `cvpartition` 函数对数据集进行划分。
```matlab
% 假设总数据集为data,目标变量为labels
c = cvpartition(size(data, 1), 'HoldOut', 0.2); % 划分20%为测试集
idxTrain = training(c);
idxTest = test(c);
% 训练集和测试集的分割
trainData = data(idxTrain, :);
trainLabels = labels(idxTrain, :);
testData = data(idxTest, :);
testLabels = labels(idxTest, :);
```
### 2.3.2 交叉验证和性能指标
交叉验证是一种评估模型泛化能力的技术。在交叉验证中,数据集被分为k个大小相等的子集,然后模型会轮流在k-1个子集上训练,在剩下的一个子集上进行验证,从而得到k组训练和验证结果。平均性能指标被用来评价模型的好坏。
MATLAB提供了 `crossval` 函数用于交叉验证,以及多种性能评价指标,如准确率、精确率、召回率和F1分数。
```matlab
% 交叉验证和性能指标计算示例
cvMdl = crossval(svmModel);
% 计算交叉验证的分类性能
classLoss = kfoldLoss(cvMdl);
% 显示性能指标
disp(classLoss);
% 具体的性能指标,例如准确率
[~, predicted] = max(scores, [], 2);
accuracy = sum(predicted == testLabels) / numel(testLabels);
disp(accuracy);
```
以上就是对MATLAB中机器学习理论基础的详细介绍。在了解了机器学习的核心概念、基本算法以及模型评估与选择的方法后,你将能够更好地理解和应用机器学习技术来解决实际问题。
# 3. MATLAB机器学习实践技巧
## 3.1 数据预处理
在任何机器学习项目中,数据的质量决定了模型的性能。因此,数据预处理是一个至关重要的步骤,它涉及清洗原始数据,以便机器学习算法能够更好地学习。
### 3.1.1 缺失数据处理
在实践中,数据集经常包含缺失值,它们可能是由于各种原因(例如,测量错误、数据损坏或者记录缺失)造成的。处理缺失数据的方法包括删除含有缺失值的记录、填充缺失值或者使用模型直接处理缺失值。
```matlab
% 假设有一个矩阵data,其中有些值是NaN(表示缺失值)
data = [1 2 NaN; 4 5 6; NaN 8 10];
% 方法一:删除含有缺失值的记录
data_cleaned = rmmissing(data);
% 方法二:填充缺失值,例如用列的平均值填充
data_filled = data;
for i = 1:size(data, 2)
col_mean = mean(data(:,i), 'omitnan');
data_filled(isnan(data(:,i)), i) = col_mean;
end
% 方法三:使用模型(例如,KNN)直接处理缺失值
% 此方法需要自定义函数或使用特定的工具箱
```
在MATLAB中,`rmmissing` 函数可以用于删除含有缺失值的记录,而填充缺失值则需要编写自定义函数,根据数据集的特性选择适当的填充策略。
### 3.1.2 数据标准化和归一化
数据标准化和归一化是将数据转换成统一的尺度的过程,这有助于提高模型训练的效率和效果。标准化通常指的是将数据转换成均值为0,标准差为1的形式;归一化则是将数据缩放到一个特定的范围(如0到1之间)。
```matlab
% 假设有一个矩阵data需要标准化
data_mean = mean(data);
data_std = std(data);
data_standardized = (data - data_mean) / data_std;
% 归一化到[0, 1]区间
data_normalized = (data - min(data)) / (max(data) - min(data));
```
标准化和归一化在MATLAB中可以通过简单的数学运算实现,这有助于改善大多数机器学习算法的性能。
## 3.2 特征工程
特征工程是机器学习中的一个关键过程,它涉及从原始数据中构造有意义的特征以供模型使用。良好的特征可以极大地提升模型的预测能力。
### 3.2.1 特征选择方法
特征选择涉及选择对模型预测性能最有帮助的特征子集。常用的特征选择方法包括单变量统计测试、递归特征消除(RFE)等。
```matlab
% 使用单变量统计测试选择特征
featureScores = fscor(data, labels); % 假设data是特征矩阵,labels是标签向量
[~, featureSelection] = sort(featureScores, 'descend');
selectedFeatureIndices = featureSelection(1:10); % 选择前10个特征
% 递归特征消除
rfe = RFE('linear', 'Ranker', 'lasso', 'NumFeaturesToSelect', 10);
rfe = fit(rfe, data, labels);
selectedFeatures = rfe.SelectedVariables;
```
MATLAB提供了一些内置函数和工具箱来支持特征选择,可以显著简化特征选择过程。
### 3.2.2 特征提取技术
特征提取技术是从原始数据中提取重要信息的方法。例如,主成分分析(PCA)是一种常见的无监督特征提取方法,它可以将高维数据降维到较低的维数。
```matlab
% 执行PCA
[coeff, score, latent] = pca(data);
reducedData = score(:, 1:10); % 保留前10个主成分
% 使用matlab的pca函数进行特征提取
```
PCA 在MATLAB中可以通过 `pca` 函数执行,它返回了降维后的数据,这些数据可以用于进一步的机器学习模型训练。
## 3.3 模型训练与优化
机器学习模型训练的目标是寻找最佳的模型参数(权重和偏置),以使模型能够准确地从数据中学习模式并进行预测。
### 3.3.1 参数调优技巧
超参数是控制模型学习过程的参数,比如学习率、正则化参数等。超参数的优化是一个调优过程,需要使用验证集或交叉验证来找到最佳的超参数。
```matlab
% 使用交叉验证进行超参数调优
cv = cvpartition(size(data, 1), 'HoldOut', 0.2);
paramGrid = {'C', [0.01, 0.1, 1, 10, 100]}; % 以SVM分类器为例,C是正则化参数
[bestModel, bestParams] = fitcsvmsearch(data, labels, paramGrid, 'CV', cv);
% bestModel包含了最优参数的模型
```
MATLAB提供了各种工具箱来帮助执行网格搜索和交叉验证,这是寻找最佳模型超参数组合的标准方法。
### 3.3.2 过拟合与欠拟合的诊断及解决策略
过拟合和欠拟合是模型训练中常见的问题。过拟合指的是模型在训练数据上表现得过于完美,但在未知数据上表现不佳。欠拟合指的是模型过于简单,未能捕捉数据中的基本模式。
```matlab
% 使用正则化技术来防止过拟合
model = fitclinear(data, labels, 'Regularization', 'l2');
% 提升模型复杂度来解决欠拟合
model = fitclinear(data, labels, 'PolynomialOrder', 2);
```
在MATLAB中,可以通过添加正则化项(如L1或L2)来避免过拟合,或者通过增加模型的复杂度(例如,使用多项式特征)来解决欠拟合问题。
在本章节中,我们详细介绍了数据预处理、特征工程和模型训练与优化的实践技巧。通过这些技巧,可以显著提高机器学习模型的性能和准确性。在下一章节中,我们将探索MATLAB在深度学习和自动化机器学习方面的高级应用。
# 4. MATLAB机器学习高级应用
随着机器学习技术的不断发展,研究人员和工程师们不仅需要掌握基础的算法和模型训练技巧,还需要了解如何将这些技术应用于解决实际复杂问题。本章节旨在深入探索MATLAB在机器学习领域的高级应用,包括深度学习、复杂数据类型处理,以及自动化机器学习(AutoML)的实现和应用。
## 4.1 深度学习在MATLAB中的实现
深度学习是机器学习的一个重要分支,它通过构建具有多层结构的神经网络模型,来实现对复杂数据的特征学习和模式识别。MATLAB提供了强大的工具箱,比如Deep Learning Toolbox,让研究者和工程师可以方便地实现深度学习模型的设计、训练和部署。
### 4.1.1 神经网络基础
神经网络是深度学习的核心,它是由大量相互连接的节点(或称为“神经元”)构成的网络结构。这些节点被组织成若干层,包括输入层、隐藏层以及输出层。每一层由若干神经元组成,这些神经元接收输入、进行加权求和后,通过激活函数产生输出。常见的激活函数有Sigmoid、Tanh和ReLU等。
在MATLAB中,可以通过定义层的类型和连接关系来构建神经网络模型。例如,以下是一个简单的MATLAB代码片段,展示了如何定义一个具有一个隐藏层的简单神经网络:
```matlab
layers = [
sequenceInputLayer(1) % 输入层,假设输入是长度为1的序列
fullyConnectedLayer(10) % 全连接层,有10个神经元
reluLayer % ReLU激活函数
fullyConnectedLayer(1) % 全连接层,输出
regressionLayer % 回归层,用于预测连续值
];
```
### 4.1.2 构建和训练深度学习模型
深度学习模型的构建涉及网络结构的设计和参数初始化。MATLAB的Deep Learning Toolbox提供了大量预制层和层组合,使得构建复杂网络结构变得非常容易。一旦模型结构定义完成,就需要进行模型的训练,这通常涉及到数据的加载、预处理、网络的前向传播和损失函数的计算,以及利用反向传播算法进行参数的迭代优化。
以下是一个简单的MATLAB代码示例,展示了如何使用内置的`trainNetwork`函数训练一个深度学习模型:
```matlab
% 加载和预处理数据
[XTrain, YTrain] = digitTrain4DArrayData;
options = trainingOptions('adam', ...
'MaxEpochs', 20, ...
'InitialLearnRate', 0.01, ...
'Verbose', false, ...
'Plots', 'training-progress');
% 定义网络结构
layers = [
imageInputLayer([28 28 1]) % 输入层,假设输入是28x28的灰度图像
convolution2dLayer(5, 20, 'Padding', 'same') % 卷积层
reluLayer % 激活层
maxPooling2dLayer(2, 'Stride', 2) % 池化层
fullyConnectedLayer(10) % 全连接层
softmaxLayer % softmax层
classificationLayer]; % 分类层
% 训练网络
net = trainNetwork(XTrain, YTrain, layers, options);
```
训练过程可以通过`trainingOptions`函数进行更细致的控制,比如设置学习率、优化器类型、批量大小以及是否绘制训练进度等等。
## 4.2 处理复杂数据类型
机器学习不仅限于结构化数据,它还广泛应用于图像、视频、音频、时间序列等非结构化数据的分析。MATLAB提供了相应的工具箱来处理这些复杂数据类型,使得构建端到端的解决方案变得高效。
### 4.2.1 图像和视频数据处理
MATLAB拥有丰富的图像和视频处理功能,从简单的图像文件读取、显示到复杂的图像增强、滤波以及变换。针对深度学习模型,MATLAB提供了自动数据增强功能,可以生成多样化的训练样本,提高模型的泛化能力。
### 4.2.2 时间序列分析
时间序列分析是研究按时间顺序排列的数据点,用于预测未来的值、识别异常或模式等目的。MATLAB的Econometrics Toolbox和Signal Processing Toolbox为时间序列分析提供了广泛的函数和工具,而Deep Learning Toolbox进一步扩展了这些分析能力,使得可以利用深度学习模型来处理时间序列数据。
## 4.3 自动化机器学习(AutoML)
随着数据的爆炸式增长和复杂性增加,机器学习工作流程变得更加复杂,从数据预处理到特征工程、模型选择和调参,这些步骤都需要大量的人力和时间。自动化机器学习(AutoML)的目标是自动化上述过程,简化机器学习工作流程,提高效率。
### 4.3.1 AutoML工具介绍
AutoML工具旨在减少数据科学家需要进行的手动操作,从而让非专业人员也能快速地应用机器学习技术。MATLAB中的AutoML工具可以实现自动特征选择、模型生成和参数调优等。
### 4.3.2 使用MATLAB进行自动化模型构建
MATLAB中的AutoML工具可以使用内置函数进行快速原型设计和开发。例如,`automl`函数允许用户直接输入数据和配置参数,然后自动生成一个最佳机器学习模型。
```matlab
% 示例代码:使用MATLAB AutoML
% 假设已有训练数据XTrain和标签YTrain
% 自动选择最佳模型并训练
[bestModel, bestModelMetrics] = automl(XTrain, YTrain);
```
以上代码片段展示了使用MATLAB进行自动化模型构建的基本方法。实际上,`automl`函数提供了许多选项来控制搜索过程,比如指定要尝试的模型类型、运行时间限制或交叉验证策略。
通过这种方式,研究人员和工程师可以快速获得一个性能良好的模型,为后续的模型优化和部署提供一个坚实的基础。
# 5. MATLAB机器学习项目案例分析
在本章中,我们将深入探讨MATLAB在不同类型机器学习项目中的应用,以实际案例为蓝本,分析项目的准备、实施、优化和评估过程。通过具体的案例分析,我们可以更好地理解MATLAB在机器学习领域中的实践应用和潜能。
## 5.1 项目案例:图像识别
图像识别是机器学习领域的一个经典应用,它涉及通过计算机算法分析图像内容,识别和分类图像中的对象。在MATLAB环境中,我们可以借助其丰富的图像处理工具箱来完成这一任务。
### 5.1.1 数据集的准备和预处理
在图像识别项目中,数据集的准备和预处理是至关重要的步骤。首先,需要收集和标注大量的图像数据,以保证模型训练的有效性。数据集准备好后,通常会进行一系列预处理步骤,例如裁剪、缩放、旋转等,以增强模型的泛化能力。
```matlab
% 加载图像数据集
imds = imageDatastore('path_to_dataset', 'IncludeSubfolders', true, 'LabelSource', 'foldernames');
% 数据增强,提升模型泛化能力
augmentedImds = augmentedImageDatastore([224 224], imds);
```
在上述MATLAB代码中,我们使用`imageDatastore`函数来加载图像数据集,并通过`augmentedImageDatastore`函数来进行数据增强处理。代码中的`[224 224]`表示图像将被调整至224x224像素大小,这是大多数图像识别模型常用的输入尺寸。
### 5.1.2 模型的选择和训练
在选择图像识别模型时,卷积神经网络(CNN)是目前最流行和有效的模型之一。在MATLAB中,可以使用深度学习工具箱中的预训练模型,如AlexNet、VGGNet等,也可以构建自定义的CNN模型。
```matlab
% 构建自定义CNN模型
layers = [
imageInputLayer([224 224 3])
convolution2dLayer(3, 8, 'Padding', 'same')
reluLayer()
maxPooling2dLayer(2, 'Stride', 2)
fullyConnectedLayer(10)
softmaxLayer()
classificationLayer()
];
% 训练模型
options = trainingOptions('sgdm', ...
'MaxEpochs', 20, ...
'InitialLearnRate', 1e-4, ...
'Verbose', false, ...
'Plots', 'training-progress');
net = trainNetwork(augmentedImds, layers, options);
```
这段代码展示了如何使用MATLAB构建一个简单的CNN模型,并使用`trainNetwork`函数训练模型。参数`'sgdm'`表示使用随机梯度下降法配合动量进行训练,`'MaxEpochs'`是训练的最大迭代次数,`'InitialLearnRate'`是初始学习率。这些参数在实际训练过程中需要根据具体情况调整以获得最佳模型性能。
## 5.2 项目案例:股票价格预测
股票价格预测是一个复杂的时序预测问题,它不仅要求模型能够捕捉到时间序列中的趋势和周期性特征,还需要能够对未来的波动性做出合理预测。
### 5.2.1 特征工程和模型构建
在处理时间序列数据时,通常需要进行特征工程以提取对预测任务有帮助的信息。特征工程包括生成滞后特征、滑动平均、变动率等。
```matlab
% 加载股票数据
load stockData.mat
% 假设数据集包含日期、开盘价、最高价、最低价、收盘价、交易量
% 特征工程:生成滞后特征
data = table2array(stockData);
lags = [1:5]; % 生成5个时间点的滞后特征
data = addvars(data, lagmatrix(data(:,4), lags), 'NewVariableNames', "Lag" + num2str(lags));
% 划分训练集和测试集
idx = floor(0.8 * height(data));
trainData = data(1:idx, :);
testData = data(idx+1:end, :);
```
上述MATLAB代码首先加载了股票数据集,然后使用`lagmatrix`函数生成了滞后特征,并将它们添加到原始数据中,为模型构建做准备。接着,数据被划分为训练集和测试集,以评估模型的预测性能。
### 5.2.2 模型评估和预测结果分析
在构建模型之后,我们需要对其进行评估,验证模型对未来的股票价格预测能力。可以使用不同的评估指标,比如均方误差(MSE)和平均绝对误差(MAE)。
```matlab
% 建立LSTM模型进行时间序列预测
numFeatures = 7; % 输入数据的特征数,包括滞后特征和原始价格特征
numResponses = 1; % 预测目标为收盘价
% 初始化序列到序列的LSTM网络
inputSize = numFeatures;
numResponses = 1;
numHiddenUnits = 100;
layers = [ ...
sequenceInputLayer(inputSize)
lstmLayer(numHiddenUnits)
fullyConnectedLayer(numResponses)
regressionLayer];
% 训练模型
options = trainingOptions('adam', ...
'MaxEpochs',100, ...
'GradientThreshold',1, ...
'InitialLearnRate',0.005, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',125, ...
'LearnRateDropFactor',0.2, ...
'Verbose',0, ...
'Plots','training-progress');
net = trainNetwork(trainData, layers, options);
% 进行预测
predictedPrices = predict(net, testData);
actualPrices = testData{:, 1};
% 计算评估指标
MSE = mean((predictedPrices - actualPrices).^2);
MAE = mean(abs(predictedPrices - actualPrices));
fprintf('MSE: %f\n', MSE);
fprintf('MAE: %f\n', MAE);
```
在此段代码中,我们首先构建了一个简单的长短期记忆网络(LSTM),这是一种特殊的循环神经网络(RNN),非常适合处理时间序列数据。接着,我们对模型进行训练,并在测试数据集上进行预测,最后计算模型预测的MSE和MAE来评估模型性能。
## 5.3 项目案例:异常检测
异常检测是识别数据集中不符合预期模式的数据点的过程。在许多实际应用中,例如网络安全、信用卡欺诈检测以及生产过程监控中,异常检测都扮演着至关重要的角色。
### 5.3.1 数据集的探索和分析
在着手异常检测之前,我们首先要对数据集进行探索和分析,确定数据的基本特性、分布情况以及潜在的异常点。
```matlab
% 加载数据集
load anomalyData.mat
data = anomalyData{:, 1:end-1};
% 数据可视化
scatter(data(:,1), data(:,2))
title('Scatter plot of dataset')
xlabel('Feature 1')
ylabel('Feature 2')
```
这段MATLAB代码简单地使用散点图来可视化数据集的特征分布。通过可视化,我们可以直观地识别出数据集中的异常点。
### 5.3.2 构建检测模型并调优
构建异常检测模型的方法有多种,MATLAB提供了多种工具和函数来支持异常检测任务。下面展示了如何使用基于高斯分布的异常值检测方法:
```matlab
% 使用Mahalanobis距离进行异常值检测
n = size(data, 1);
nfeatures = size(data, 2);
center = mean(data);
Sigma = (n/(n-1))*cov(data);
chisquarequantile = chi2inv(0.975, nfeatures);
% Mahalanobis距离
dist = mahal((data - center), Sigma);
outliers = dist > chisquarequantile;
% 检测到的异常点
anomalousData = data(outliers, :);
% 绘制检测结果
figure
scatter(data(:,1), data(:,2), 10, 'filled')
hold on
scatter(anomalousData(:,1), anomalousData(:,2), 100, 'filled', 'r')
title('Mahalanobis distance based anomaly detection')
xlabel('Feature 1')
ylabel('Feature 2')
legend('Normal points', 'Anomalies')
```
在这段代码中,我们首先计算了数据集的均值和协方差矩阵,然后基于马氏距离(Mahalanobis distance)确定了异常值。通过将马氏距离与卡方分布的临界值比较,我们识别出了异常点,并用不同的颜色在散点图中展示了它们。
通过上述的章节内容,我们可以看到MATLAB在机器学习项目中的实际应用,包括图像识别、股票价格预测和异常检测等不同领域。每一节案例都紧密联系着理论和实践,为读者提供了从数据处理、模型选择到评估优化的完整流程,演示了如何在实际项目中利用MATLAB解决机器学习问题。
0
0