基于MATLAB实现无监督数据建模

一、数据准备与预处理

1. 数据加载与标准化
matlab 复制代码
%% 加载示例数据(以Iris数据集为例)
load fisheriris
X = meas(:,1:2); % 使用前两个特征

%% 数据标准化
mu = mean(X);
sigma = std(X);
X_norm = (X - mu) ./ sigma; % Z-score标准化
2. 缺失值处理
matlab 复制代码
% 检测缺失值
missing = isnan(X);

% 删除含缺失值的样本
X_clean = X(~any(missing,2),:);

二、聚类分析实现

1. K-means聚类
matlab 复制代码
% 参数设置
K = 3; % 簇数量
max_iters = 100;

% 执行K-means
[idx, centroids] = kmeans(X_norm, K, 'MaxIter', max_iters);

% 可视化结果
figure;
gscatter(X_norm(:,1), X_norm(:,2), idx);
hold on;
plot(centroids(:,1), centroids(:,2), 'kx', 'MarkerSize', 15);
title('K-means聚类结果');
2. 层次聚类
matlab 复制代码
% 计算距离矩阵
Z = linkage(X_norm, 'ward');

% 生成聚类树
figure;
dendrogram(Z);
title('层次聚类树状图');

% 划分簇
T = cluster(Z, 'maxclust', 3);
3. DBSCAN密度聚类
matlab 复制代码
% 参数设置
eps = 0.5; % 邻域半径
minPts = 5; % 最小点数

% 执行DBSCAN
labels = dbscan(X_norm, eps, minPts);

% 可视化
figure;
gscatter(X_norm(:,1), X_norm(:,2), labels);
title('DBSCAN聚类结果');

三、降维与特征提取

1. 主成分分析(PCA)
matlab 复制代码
% 执行PCA
[coeff, score, latent] = pca(X_norm);

% 可视化主成分贡献率
figure;
pareto(latent/sum(latent));
xlabel('主成分序号');
ylabel('方差贡献率(%)');
title('PCA方差解释率');

% 降维可视化
figure;
scatter(score(:,1), score(:,2));
title('PCA降维结果');
2. t-SNE非线性降维
matlab 复制代码
% 执行t-SNE
Y = tsne(X_norm, 'NumDimensions', 2, 'Perplexity', 30);

% 可视化
figure;
scatter(Y(:,1), Y(:,2));
title('t-SNE降维结果');
3. 自编码器(Autoencoder)
matlab 复制代码
%% 构建自编码器结构
hiddenSize = 2; % 隐藏层神经元数
autoenc = trainAutoencoder(X_norm', hiddenSize, ...
    'MaxEpochs', 100, ...
    'L2WeightRegularization', 0.001);

% 提取特征
X_ae = encode(autoenc, X_norm');

% 可视化
figure;
scatter(X_ae(:,1), X_ae(:,2));
title('自编码器降维结果');

四、异常检测实现

1. 孤立森林(Isolation Forest)
matlab 复制代码
% 加载异常检测工具箱
addpath(genpath('libsvm')); % 需安装LIBSVM工具箱

% 训练模型
model = isolationForest(X_norm, 'numTrees', 100);

% 预测异常分数
scores = predict(model, X_norm);

% 可视化异常检测结果
figure;
scatter(X_norm(:,1), X_norm(:,2), 50, scores, 'filled');
colorbar;
title('孤立森林异常检测');
2. 高斯混合模型(GMM)
matlab 复制代码
% 训练GMM模型
GMModel = fitgmdist(X_norm, 3);

% 计算后验概率
posterior = posterior(GMModel, X_norm);

% 异常检测(概率密度阈值法)
threshold = prctile(posterior(:,1), 5);
anomalies = find(posterior(:,1) < threshold);

五、特征选择与模式发现

1. 主成分特征选择
matlab 复制代码
% 选择前两个主成分
X_pca = X_norm * coeff(:,1:2);

% 可视化特征贡献
figure;
bar(coeff(:,1:2));
set(gca, 'XTickLabel', {'PC1', 'PC2'});
title('主成分特征权重');
2. 自动编码器特征提取
matlab 复制代码
%% 构建深度自编码器
layers = [
    imageInputLayer([1 2])
    fullyConnectedLayer(4)
    reluLayer
    fullyConnectedLayer(2)
    regressionLayer];

% 训练网络
options = trainingOptions('adam', 'MaxEpochs', 200);
net = trainNetwork(X_norm', X_norm', layers, options);

% 提取特征
X_deep = predict(net, X_norm');

六、应用案例:客户分群分析

1. 数据准备
matlab 复制代码
% 加载商业数据集
load('customer_data.mat');
X = data(:,2:end); % 去除ID列
2. 分析流程
matlab 复制代码
%% 数据预处理
[X_norm, mu, sigma] = zscore(X);

%% 聚类分析
[idx, ~] = kmeans(X_norm, 4);

%% 特征分析
coeff = pca(X_norm);
X_pca = X_norm * coeff(:,1:2);

%% 可视化
figure;
gscatter(X_pca(:,1), X_pca(:,2), idx);
title('客户分群结果(PCA降维)');

七、可视化工具

1. 降维可视化对比
matlab 复制代码
%% 对比不同降维方法
figure;
subplot(2,2,1);
scatter(X_norm(:,1), X_norm(:,2));
title('原始数据');

subplot(2,2,2);
scatter(score(:,1), score(:,2));
title('PCA');

subplot(2,2,3);
scatter(Y(:,1), Y(:,2));
title('t-SNE');

subplot(2,2,4);
scatter(X_ae(:,1), X_ae(:,2));
title('自编码器');
2. 聚类评估可视化
matlab 复制代码
%% 轮廓系数分析
silhouette(X_norm, idx);
title('轮廓系数分析');

参考代码 基于matlab下的无监督数据的实现 www.youwenfan.com/contentcso/96097.html

八、工具箱推荐

  1. Statistics and Machine Learning Toolbox 支持K-means、层次聚类、PCA等算法
  2. Deep Learning Toolbox 提供自编码器、深度聚类等高级功能
  3. Statistics and Machine Learning Toolbox 支持t-SNE、UMAP等降维方法
相关推荐
王柏龙2 小时前
c# aggregate使用
开发语言·c#
小鸡吃米…2 小时前
Python - 构造函数
开发语言·python
moonquakeTT2 小时前
C++:智能指针
开发语言·c++
码界奇点2 小时前
基于Go语言的AI接口管理与分发系统设计与实现
开发语言·人工智能·ai·golang·毕业设计·go语言·源代码管理
bybitq2 小时前
深入浅出 Go 流程控制:从循环到延迟执行
开发语言·后端·golang
Autumn72992 小时前
【python】 日志打印、垃圾回收
开发语言·python
Lvan的前端笔记2 小时前
python:列表推导式(List Comprehension)
开发语言·python·list
李小先2 小时前
supersonic——PARSING阶段
开发语言·python
夕阳下的一片树叶9132 小时前
后端java遇到的问题
java·开发语言