PCA降维以及Kmeans聚类实例----python,sklearn,PCA,Kmeans

PCA 算法也叫主成分分析(principal components analysis),主要是用于数据降维的。关于降维,可以这样理解,一组数据有n个feature(客户年龄,收入,每个月消费额度等等),每一个feature有一系列的观测点。而这n个feature中有一些存在线性相关,比如对于某些群体而言,收入和消费是线性相关的。此时我们进行多维度数据分析时只需要考虑其中一个参数就可以足够了,这样就能减少一个feature(维度),PCA方法就是用严谨的数据方法实现了这一过程。具体原理见下文,写十分清楚:

http://blog.codinglabs.org/articles/pca-tutorial.html

本例子主要介绍了sklearn中PCA的简单实现以及在降维后的快速聚类:

以下为输入数据


from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
import pandas as pd
import numpy as np
#pca.txt是一个没有表头的多维数据,一共有7列,利用pandas读取
df = pd.read_table('d:/PCA.txt')
#将df转换成矩阵
dataMat = np.array(df)
#调用sklearn中的PCA,其中主成分有5列
pca_sk = PCA(n_components=5)
#利用PCA进行降维,数据存在newMat中
newMat = pca_sk.fit_transform(dataMat)
#利用KMeans进行聚类,分为3类
kmeans = KMeans(n_clusters=3,random_state=0).fit(newMat)
#labels为分类的标签
labels = kmeans.labels_
#把标签加入到矩阵中用DataFrame生成新的df,index为类别的编号,这里是0,1,2
dataDf = pd.DataFrame(newMat,index=labels,columns=['x1','x2','x3','x4','x5'])
#数据保存在excel文件中
dataDf.to_excel('d:/pca_cluster.xls')
print(pca_sk.explained_variance_ratio_)

输出:

[ 0.85847673  0.09840701  0.0223092   0.01740787  0.00304186]

结果为每一列所占特征方差的百分比,总和为0.9996说明降维保持了原数据的特征

excel数据输出结果为


  • 9
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
PCA降维K-means聚类的代码示例(MATLAB)如下所示: PCA降维代码示例: ```matlab % 假设我们有一个数据矩阵X,其中每一行是一个样本,每一列是一个特征 X = [1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12]; % 对数据进行均值中心化 mean_X = mean(X); X_centered = X - mean_X; % 计算协方差矩阵 cov_X = cov(X_centered); % 对协方差矩阵进行特征值分解 [eigen_vectors, eigen_values] = eig(cov_X); % 按特征值降序排列特征向量 [~, idx] = sort(diag(eigen_values), 'descend'); eigen_vectors_sorted = eigen_vectors(:, idx); % 取前k个特征向量作为主成分 k = 2; principal_components = eigen_vectors_sorted(:, 1:k); % 将数据投影到低维空间 X_reduced = X_centered * principal_components; disp(X_reduced); ``` K-means聚类代码示例: ```matlab % 假设我们有一个数据矩阵X,其中每一行是一个样本,每一列是一个特征 X = [1, 2; 1.5, 1.8; 5, 8; 8, 8; 1, 0.6; 9, 11]; % 设置聚类数目 k = 2; % 随机初始化聚类中心 centroids = X(randperm(size(X, 1), k), :); % 迭代更新聚类中心直到收敛 max_iters = 10; for iter = 1:max_iters % 计算每个样本点到各个聚类中心的距离 distances = pdist2(X, centroids); % 将每个样本点分配到距离最近的聚类中心 [~, labels] = min(distances, [], 2); % 更新聚类中心为各个簇的平均值 for i = 1:k centroids(i, :) = mean(X(labels == i, :)); end end disp(labels); disp(centroids); ``` 这些代码示例可以帮助你在MATLAB中实现PCA降维K-means聚类算法。请根据你的需求修改数据矩阵X和其他参数。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值