龙空技术网

python主成分分析

每日学Python 219

前言:

目前小伙伴们对“python中主成分分析”大体比较着重,同学们都需要剖析一些“python中主成分分析”的相关资讯。那么小编也在网摘上收集了一些有关“python中主成分分析””的相关知识,希望你们能喜欢,朋友们快快来学习一下吧!

由于有急事,已经停更一周了(好吧是自己偷懒了)。今后我会尽量每天都更新不一样的代码。请大家多多支持,转发。

今天给大家说说这个主成分分析,并用python代码写出来。

主成分原理

主成分顾名思义是一组数据的主要影响因素,属于机器学习中的一种数据分析方法。比如有原来的指标有4个分别为X1~X4 ,那么可以表示为Yi具体 i 的值为集需要通过主成分提取保留百分之多少的信息。表示为:

其中Ai为第i个指标的权重。也可以说Ai为特征向量。特征向量为每个维度对Yi的贡献度,特征向量的累加被每个Ai相除即为该维度对Yi的贡献值。具体的数学推导公式大家可以在网上找的相关的,我这里只是解释了主要步骤。这里还有一个问题就是该选择百分之多少的,选多了数据处理不够充分,选少了又表示不了原有数据。别慌前人已经给我们分析了就是利用其特征值绘制的散点图判断俗称碎石图。

KMO检验

在这里我就不给大家解释KMO检验的原理了。大家感兴趣的可以自己上网查找相关资料。我们直接上代码。

from factor_analyzer.factor_analyzer import calculate_kmo#python第三方库的使用 kmo_all, kmo_model = calculate_kmo(df)#进行KOM检验print(kmo_all)#输出结果"""[0.4362056  0.48573885 0.4691042  0.4587995  0.53549307 0.50919288 0.39519976 0.41698815 0.49493001 0.43094316 0.44541202 0.62016214 0.57047831 0.57157981 0.54778706 0.6134743  0.52525443 0.50394482 0.56159159 0.60962141 0.51829502 0.45310505 0.90589021 0.78448494 0.81672118 0.91110299 0.89658705 0.90450802 0.85509668 0.83335916 0.80548817 0.8451252  0.86317053 0.87790273 0.85068264 0.82052384 0.79371149 0.87411266 0.8596071  0.86895289 0.85778884 0.87013875]"""

就会得到一个与数据维度相同的列表,这里我使用的数据有42维。KMO检验的结果中我们通常要取到数值为0.6以上的数据做主成分分析,这样可以避免无效数据的干扰。

碎石图

通过以下代码就可以绘制出碎石图,选择的点为相对于上一个点变化较小的点。碎石图可以给我们提供选择百分之多少的贡献度作为参考,具体选择看大家。

def meanX(dataX):    return np.mean(dataX,axis=0)#axis=0表示依照列来求均值。假设输入list,则axis=1average = meanX(df)m,n=np.shape(df)data_adjust = []avgs = np.tile(average, (m, 1))data_adjust = df - avgscovX = np.cov(data_adjust.T)   #计算协方差矩阵featValue, featVec=  np.linalg.eig(covX)  #求解协方差矩阵的特征值和特征向量juti=featValuefeatValue = sorted(featValue)[::-1]# 同样的数据绘制散点图和折线图#判断主成分个数plt.scatter(range(1, df.shape[1] + 1), featValue)plt.plot(range(1, df.shape[1] + 1), featValue) # 显示图的标题和xy轴的名字# 最好使用英文,中文可能乱码plt.title("Scree Plot")  plt.xlabel("Factors")plt.ylabel("Eigenvalue") plt.grid()  # 显示网格plt.show()  # 显示图形

接下来计算贡献度。代码如下:(代码很简单就不解释了)

gx = juti/np.sum(juti)t=pd.concat([pd.DataFrame(cols),pd.DataFrame(gx)],axis=1)t.columns=range(2)t.sort_values(1 , inplace=False)lg = np.cumsum(gx)#个数随贡献度增加而增加。根据碎石图就可以选择贡献度多少的了

这里在贡献度为85%左右,就足以了。

接下来就是完成之前说的新的数据Yi的值了。我们只需要通过简单计算就可以得到主成分分析处理出来的数据了。

selectVec = np.matrix(featVec.T[k]).TselectVe=selectVec*(-1)finalData = np.dot(data_adjust,selectVec)#即为主成分处理的最终数据,纬度为17。

每日一句日语语法。

当别人的句尾用到ですか时。用以下回答:

肯定回答:はい。意思是:是的。

否定回答:いいえ、ちがいます。意思是:不,不是这样的。 

标签: #python中主成分分析 #python主成分分析例题详解 #python进行主成分分析居民消费 #python 主成分分析