大数据(线性/非线性)降维方法(PCA,LDA,MDS,ISOMAP,LLE)

本文探讨了大数据集的RSP数据块划分,并对比了使用PCA、LDA、MDS、Isomap和LLE等降维方法在整体数据和RSP数据子块上的特征提取效果。PCA和LDA在整体与RSP上的表现相似,而MDS和Isomap因数据抽样导致一定偏差,LLE则受限于数据集特性,特征分布不均匀。
摘要由CSDN通过智能技术生成

数据块划分

对于给定的数据集Magic(19020个样本,10个属性),我们首先将其划分为RSP数据块,然后再分别对他们进行特征提取,比较它们的特征提取结果的概率分布的相似情况

不懂RSP数据块的可以看我的这篇

我们首先先将数据划分为K个HDFS数据块(K=20

HDFS: [块数: 20 块内元素个数: 950 数据块维度: 11]

import os
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')

# 导入数据
data=np.loadtxt('../Magic.txt')
data=data[:19000,:]# 修整一下数据
X=data[:,:-1]
y=data[:,-1]
print('y: ',set(y))
'''
先按HDFS数据块划分,再划分为RSP数据块
'''
K=20 # HDFS数据块个数
M=25 # RSP数据块个数
# 按顺序切分为k份
HDFS=np.array(np.split(data,K))
for i in range(HDFS.shape[0]):
    np.random.shuffle(HDFS[i])
HDFS_list=[np.split(D_k,M) for D_k in HDFS]
print('HDFS: [块数: {0} 块内元素个数: {1} 数据块维度: {2}]'.format(
    HDFS.shape[0],HDFS.shape[1],HDFS.shape[2]))

然后,再根据HDFS数据块划分为RSP数据块

RSP: [块数: 25块内元素个数: 760 数据块维度:11]

# 划分RSP
RSP=[[D_K[m] for D_K in HDFS_list] for m in range(M)]
for idx,RSP_ in enumerate(RSP):
    tmp_RSP=RSP_[0]
    for i in range(1,len(RSP_)):
        tmp_RSP=np.vstack((tmp_RSP,RSP_[i]))
    RSP[idx]=tmp_RSP
RSP=np.array(RSP)
print('RSP: [块数: {0} 块内元素个数: {1} 数据块维度: {2}]'.format(
    RSP.shape[0],RSP.shape[1],RSP.shape[2]))

特征分布

我们对数据整体和RSP数据子块的10个特征进行分布可视化

整体

plt.style.use('seaborn')

fig, axes = plt.subplots(ncols=2, nrows=5,figsize=[15,20])
for i, ax in zip(range(10), axes.flat):
    # ax.set_title('fea'+str(i))
    ax.set_xlabel('values')
    ax.set_ylabel('nums')
    sns.distplot(data[:,i],
        hist=True,kde=True, ax=ax,color='royalblue')
plt.show()

请添加图片描述
RSP
请添加图片描述
对比
请添加图片描述
通过对比整体与RSP的特征分布,我们可以发现两者的分布差异不大
至此,我们便完成了RSP数据块的划分,接下来对数据整体和RSP数据子块进行特征提取

特征提取

PCA

PCA是较为基础的线性降维方法,通过svd得到特征之间协方差矩阵的特征向量,从中选择特征值最大的前k个特征向量作为主成分

我们观察在不同的特征提取个数下,各个主成分的方差占总体的比例(即降维所保留的信息占总体信息量的比例)

'''观察不同维度的方差之和'''
from sklearn.decomposition import PCA

X=data[:,:-1]
pca=PCA( )
pca.fit(X)
ratio=pca.explained_variance_ratio_ # 降维后各成分的方差占比 
print("pca.components_: ",pca.components_.shape)
print("pca_var_ratio: ",pca.explained_variance_ratio_.shape)
#绘制图形
plt.plot(range(X.shape[1]),[np.sum(ratio[:i+1]) for i in range(X.shape[1])])
plt.xlabel('nums of component')
plt.ylabel('sum of var ratio')
plt.xticks(np.arange(X.shape[1]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值