一、数据准备与预处理
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
八、工具箱推荐
- Statistics and Machine Learning Toolbox 支持K-means、层次聚类、PCA等算法
- Deep Learning Toolbox 提供自编码器、深度聚类等高级功能
- Statistics and Machine Learning Toolbox 支持t-SNE、UMAP等降维方法