【聚类】基于PCA+kmeans实现数据聚类附matlab代码

该文使用PCA-Kmeans++方法进行储层预测,通过提取地震属性并进行主成分分析,再用无监督学习的Kmeans++算法进行聚类,展示了这种方法在识别地质异常体和储层分布上的优势,为沁水盆地南部的煤层气预测提供了有效工具。

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信       无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机 

⛄ 内容介绍

将基于PCA-Kmeans++的多属性融合聚类技术应用于沁水盆地南部3#煤层的储层预测中,对融合聚类属性进行分析,确定有利储层分布.首先提取常规的叠后地震属性,叠后波阻抗反演以及叠前AVO属性;然后利用PCA主成分分析方法,得到贡献率最大的几个主成分分量;最后通过Kmeans++无监督机器学习算法对主成分分量进行融合和聚类.实际资料应用结果表明,PCA-Kmeans++方法可以融合各个属性的特征,能够更加清晰地反映地质异常体的分布特征,为沁水盆地南部煤层气及类似储层的预测提供了一种可行的方法.

⛄ 代码

clc;

clear all;

close all;

filename = 'data.xlsx';

sheet = 2;

X = xlsread(filename,sheet);

%% PCA主成分分析

meanX = ones(size(X,1),1) * mean(X); %中心化处理

centredX = X - meanX;

C = cov(centredX); %计算协方差矩阵

[W,Lambda] = eig(C); %W是特征向量组成的矩阵,Lambda是特征值组成的对角矩阵

ev = (diag(Lambda))'; %提取特征值

ev = ev(:,end:-1:1); %eig计算出的特征值是升序的,这里手动倒序(W同理)

W = W(:,end:-1:1);

Wr = W(:,1:10); %提取前N个主成分的特征向量

Tr = centredX * Wr; %新坐标空间的数据点

%% 开始聚类

cluster_num = 3;

[index_cluster,cluster] = kmeans(Tr,cluster_num);

%% 画出聚类效果

figure(1)

a = unique(index_cluster);

C = cell(1,length(a));

for i = 1:length(a)

   C(1,i) = {find(index_cluster==a(i))};

end

for j = 1:cluster_num

    data_get = Tr(C{1,j},:);

    scatter(data_get(:,1),data_get(:,2),100,'filled','MarkerFaceAlpha',.6,'MarkerEdgeAlpha',.9);

    hold on

end

%绘制聚类中心

plot(cluster(:,1),cluster(:,2),'ks','LineWidth',2);

hold on

title_str = ['Kmeans聚类','  聚类数为:',num2str(cluster_num)];

title(title_str)

⛄ 运行结果

⛄ 参考文献

[1] 谢玮, 毕臣臣, 刘学清,等. 基于PCA-Kmeans++的煤层气多属性融合聚类分析方 法研究[J]. 煤炭技术, 2019(5):4.

[2] 毕臣臣, 谢玮, 王彦春,等. 基于PCA-Kmeans++的煤层气多属性融合聚类分析方法研究[C]// 2018年中国地球科学联合学术年会. 2018.

[3] 钟穗希, 李子波, 唐荣年. 基于PCA-Kmeans聚类法的橡胶树叶片氮含量的近红外高光谱诊断模型研究[J]. 海南大学学报:自然科学版, 2020, 38(3):10.

[4] 王侠林, 贺建峰. 基于K-Means聚类的微生物群落结构研究[J]. 软件导刊, 2018, 17(1):4.

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

 

### PCAKMeans 聚类结果映射回原始数据空间的方法 通过主成分分析 (Principal Component Analysis, PCA) 进行降维后再应用 KMeans 聚类是一种常见的数据分析方法。然而,在完成降维和聚类之后,通常希望将这些聚类的结果重新映射回到原始的数据空间以便更好地解释和可视化。 #### 将 PCA-KMeans 的结果映射回原始数据空间的过程 1. **逆变换操作** 使用 `inverse_transform` 函数可以从低维空间中的点恢复到近似的原始高维空间表示。这是因为 PCA 是一种线性转换技术,其核心在于找到一组正交基来表达数据的主要变化方向[^2]。因此,可以通过以下方式实现: ```python from sklearn.decomposition import PCA # 假设 pca_model 已经训练好 reduced_data = pca_model.transform(original_data) # 应用 KMeans 聚类 from sklearn.cluster import KMeans kmeans = KMeans(n_clusters=3).fit(reduced_data) # 获取质心并将其从低维空间映射回原始空间 centroids_reduced_space = kmeans.cluster_centers_ centroids_original_space = pca_model.inverse_transform(centroids_reduced_space) ``` 上述代码展示了如何使用 `pca_model.inverse_transform()` 来将 KMeans 得到的簇中心从降维后的空间还原至原始维度的空间[^3]。 2. **误差考量** 需要注意的是,由于 PCA 会丢弃部分次要方差的信息,所以即使经过逆变换得到的新坐标也仅是对原坐标的估计而非完全一致。这种差异取决于保留了多少个主成分以及它们所占总方差的比例[^4]。 3. **验证映射质量** 可以计算重构误差或者对比某些统计特性(比如均值、标准差等),以此评估由降维再升维过程中丢失信息的程度。如果损失较大,则可能需要增加保留下来的主成分数目直到满足精度需求为止[^5]。 #### 实际应用场景注意事项 当把处理过的数据返回给业务人员或者其他非技术人员查看时,确保他们理解这是基于简化模型得出的一个接近真实情况但并非绝对精确版本非常重要。此外还要注意不同领域对于允许范围内的失真度容忍程度各有区别,所以在实际项目里要具体问题具体对待[^6]。 ```python import numpy as np from sklearn.datasets import make_blobs from sklearn.preprocessing import StandardScaler from sklearn.pipeline import Pipeline from sklearn.decomposition import PCA from sklearn.cluster import KMeans # 创建模拟数据集 X, _ = make_blobs(n_samples=100, centers=3, n_features=5) pipeline = Pipeline([ ('scaling', StandardScaler()), ('reduce_dim', PCA(n_components=2)), ]) reduced_X = pipeline.fit_transform(X) kmeans = KMeans(n_clusters=3).fit(reduced_X) # 映射回原始空间 original_centroids = pipeline.named_steps['reduce_dim'].inverse_transform(kmeans.cluster_centers_) ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值