查看原文
其他

PCA(主成分分析法)降维——Python实现

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:谭   可,中南财经政法大学统计与数学学院

本文编辑:冀思慧

技术总编:陈   鼎

Stata&Python云端课程来啦!

       为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~爬虫俱乐部推出了Python编程培训课程Stata基础课程Stata进阶课程Stata文本分析正则表达式网络爬虫基本字符串课程。报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦。我们在这篇推文的最后提供了每门课程的课程二维码,大家有需要的话可以直接扫描二维码查看课程详情并进行购买哦~


引言

主成分分析(PCA)是一种常见的数据降维方法,其目的是在“信息”损失较小的前提下,将高维的数据降为低维,从而减小计算量。PCA降维,主要用于数据分析和机器学习。它能够把一个高维的数据在保留最大信息量的前提下降低到一个低维的空间,从而得到对数据影响最大的主成分,便于我们对数据进行分析等后续操作。下面让我们来了解下用Python实现PCA降维吧!


1、sklearn库中调用PCA算法

      用sklearn库的PCA算法,代码如下。参数n_components=k为所要保留的主成分个数k,也即降为k维。

import numpy as npfrom sklearn.decomposition import PCAfrom sklearn.preprocessing import StandardScaler
x = np.array([[1000, 20, 99,778], [1225, 25, 81,889], [2888, 62, 33,333], [1767, 83, 66,888]])X_scaler = StandardScaler() # 标准化x = X_scaler.fit_transform(x)# PCApca = PCA(n_components=2) # 降为2维pca.fit(x)pca.transform(x)

sklearn中的PCA:

class sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False, svd_solver=’auto’, tol=0.0, iterated_power=’auto’, random_state=None)

n_component: 指定降维后的特征数量

copy:类型:bool,默认为True。意义:表示是否复制原数据。若为True,原数据的值不变;若为False,则原数据的值会变,因为是在原始数据上进行降维计算。

whiten: 类型:bool,默认为False。意义:白化,使得每个特征具有相同的方差。

2、Python实现——实例1

      在这里我们使用sklearn提供的boston数据集,总共有10个特征,降维成2个特征:

import numpy as npfrom sklearn.decomposition import PCAfrom sklearn.datasets import load_boston
d = load_boston()x = d.datay = d.targetprint(x[:3])# 降维pca = PCA(n_components=2)newdata = pca.fit_transform(x)print('降维后数据:')print(newdata[:3])
输出结果如下,原数据降为2维数据。

3、Python实现——实例2

在这里我们使用sklearn提供的iris(鸢尾花)数据集。iris数据集中有150个样本,每个样本有四个属性特征和一个类别标签。
import matplotlib.pyplot as pltfrom sklearn.decomposition import PCAfrom sklearn.datasets import load_irisimport numpy as np
data = load_iris()x = data.datay = data.targetpca = PCA(n_components=2) # 降为2维newdata = pca.fit_transform(x)print('原数据:')print(x[:8])print('降维后数据:')print(newdata[:8])
red_x, red_y = [], []blue_x, blue_y = [], []green_x, green_y = [], []for i in range(len(newdata)): if y[i] == 0: red_x.append(newdata[i][0]) red_y.append(newdata[i][1]) elif y[i] == 1: blue_x.append(newdata[i][0]) blue_y.append(newdata[i][1]) else: green_x.append(newdata[i][0]) green_y.append(newdata[i][1])plt.scatter(red_x, red_y, c='r', marker='x')plt.scatter(blue_x, blue_y, c='b', marker='D')plt.scatter(green_x, green_y, c='g', marker='.')plt.show()
运行结果:

根据这4个变量推断出鸢尾花属于哪一品种,这里使用PCA方法将数据集的4个特征降维到两个维度,可以更直观的观察数据,便于后续的进一步分析。
降维前的数据(部分)

降维后的数据(部分)


这样我们就可以利用降维后的二维数据集来表示原数据集的大部分信息。
看完本文,是不是基本掌握了怎么用python来实现PCA降维呢?这些简单的介绍肯定还不能满足大家的需求,感兴趣的读者可以尝试用python去解决更多PCA降维的实际问题。
END
最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。



腾讯课堂课程二维码








            


 对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!











往期推文推荐

       超好用的事件研究法

        如何绘制任泽平《鼓励生育基金》的几幅图

        Python 第六天——字符串

        findname——想要什么找什么

        Python字符串之“分分合合”

        PDF转docx可批量操作?——wordconvert的小技巧

        考研之后,文科生需以“do”躬“do”!

       手绘五星兴家国——用Stata绘制五星红旗

        Seminar丨董事会的性别多样化和企业创新:来自国际的证据

       Python与数据库交互——窗口函数

        Stata之post命令——数据邮递 

        爬虫俱乐部成员的Stata学习经验分享来啦!

       Seminar丨2002年萨班斯·奥克斯利法案的经济后果

        我几乎画出了“隔壁三哥”家的国旗

        Python基础——三大数字类型,你都了解吗?
        如何用Stata绘制带指向性箭头标注的图像       
       Seminar丨荐仆贷款——19世纪中国的信任辅助贷款       【技能篇】多进程队列间通信

Seminar丨公司董事会的人才增长:来自中国的证据

正则表达式--懒惰模式

爬完独立董事的年薪,我的眼镜跌破了!识别旅游“照骗”——看风景名胜是否名副其实主成分分析的Python实现

正则表达式--贪婪模式

Seminar丨谁更重要:高管股权薪酬与财务报告欺诈DOS能量,超乎你想象!

爬虫实战丨走进哈利波特的魔法世界

数据集合并的新路子-frlink命令

Seminar丨附近的公司:利用卫星图像研究本地信息优势

线性同余法生成伪随机数 

[技能篇]多线程爬虫

“好哭”是衡量一部好电影的标准吗?

Stata&Python云端课程来啦!

带你了解Stata中的矩阵

Seminar|总统的朋友:政治关联与企业价值

关于我们 


   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里
为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众
号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存