无监督学习Principal Component Analysis(PCA)精简高维数据

目录

介绍

一、PCA之前 

二、PCA之后 

介绍

Principal Component Analysis (PCA) 是一种常用的数据降维和特征提取技术。PCA通过线性变换将高维数据映射到低维空间,从而得到数据的主要特征。PCA的目标是找到一个正交基的集合,使得将数据投影到这些基上时,能够保留尽可能多的数据信息。每个正交基称为一个主成分,它的重要性通过其对应的特征值来衡量。PCA通过计算特征值和特征向量,找到数据中最重要的特征,将数据投影到这些特征上,从而达到降维和提取主要特征的目的。通过PCA可以减少数据的维度,并且可以保留数据的主要特征,以便于后续的数据分析和建模。

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set(style='white')
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
from sklearn import decomposition
from sklearn import datasets
from mpl_toolkits.mplot3d import Axes3D

# Loading the dataset
iris = datasets.load_iris()
X = iris.data
y = iris.target
fig = plt.figure(1, figsize=(6, 5))
plt.clf()
ax = Axes3D(fig, rect=[0, 0, .95, 1], elev=48, azim=134)

plt.cla()

for name, label in [('Setosa', 0), ('Versicolour', 1), ('Virginica', 2)]:
    ax.text3D(X[y == label, 0].mean(),
              X[y == label, 1].mean() + 1.5,
              X[y == label, 2].mean(), name,
              horizontalalignment='center',
              bbox=dict(alpha=.5, edgecolor='w', facecolor='w'))
# Change the order of labels, so that they match
y_clr = np.choose(y, [1, 2, 0]).astype(np.float64)
ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=y_clr, 
           cmap=plt.cm.nipy_spectral)

ax.xaxis.set_ticklabels([])
ax.yaxis.set_ticklabels([])
ax.zaxis.set_ticklabels([]);

一、PCA之前 

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, roc_auc_score

# Train, test splits
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.3, 
                                                    stratify=y, 
                                                    random_state=42)

# Decision trees with depth = 2
clf = DecisionTreeClassifier(max_depth=2, random_state=42)
clf.fit(X_train, y_train)
preds = clf.predict_proba(X_test)
print('Accuracy: {:.5f}'.format(accuracy_score(y_test, 
                                                preds.argmax(axis=1))))

#结果:Accuracy: 0.88889

二、PCA之后 

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(X)
data_rescaled = scaler.fit_transform(X)
data_rescaled.shape
# Using PCA from sklearn PCA
pca = decomposition.PCA(n_components=2)

pca.fit(data_rescaled)
X_pca = pca.transform(data_rescaled)

# Plotting the results of PCA
plt.plot(X_pca[y == 0, 0], X_pca[y == 0, 1], 'bo', label='Setosa')
plt.plot(X_pca[y == 1, 0], X_pca[y == 1, 1], 'go', label='Versicolour')
plt.plot(X_pca[y == 2, 0], X_pca[y == 2, 1], 'ro', label='Virginica')
plt.legend(loc=0);

# Test-train split and apply PCA
X_train, X_test, y_train, y_test = train_test_split(X_pca, y, test_size=.3, 
                                                    stratify=y, 
                                                    random_state=42)

clf = DecisionTreeClassifier(max_depth=2, random_state=42)
clf.fit(X_train, y_train)
preds = clf.predict_proba(X_test)
print('Accuracy: {:.5f}'.format(accuracy_score(y_test, 
                                                preds.argmax(axis=1))))

#结果:Accuracy: 0.91111
for i, component in enumerate(pca.components_):
    print("{} component: {}% of initial variance".format(i + 1, 
          round(100 * pca.explained_variance_ratio_[i], 2)))
    print(" + ".join("%.3f x %s" % (value, name)
                     for value, name in zip(component,
                                            iris.feature_names)))

'''结果:四维数据降为两维
1 component: 84.14% of initial variance
0.425 x sepal length (cm) + -0.151 x sepal width (cm) + 0.616 x petal length (cm) + 0.646 x petal width (cm)
2 component: 11.75% of initial variance
0.423 x sepal length (cm) + 0.904 x sepal width (cm) + -0.060 x petal length (cm) + -0.010 x petal width (cm)
'''

pca.explained_variance_ratio_
#结果:array([0.84136038, 0.11751808])
plt.figure(figsize=(10,7))
plt.plot(np.cumsum(pca.explained_variance_ratio_), color='k', lw=2)
plt.xlabel('Number of components')
plt.ylabel('Total explained variance')
plt.xlim(0, 4)
#plt.yticks(np.arange(0.8, 1.1, 0.1))
plt.axvline(21, c='b')
plt.axhline(0.95, c='r')
plt.show();

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/312927.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

git提交记录全部删除

目录 问题描述 解决方案 结果 问题描述 新复制的项目具有特比多的提交记录我想给他清除,因为不清楚过多历史也就导致包特别大下载和提交等方面都不是很快 解决方案 查看代码clone网址; 打开远程仓库,选择要去除历史记代码分支&#xff08…

CSS3 边框border、outline、box-shadow

1 border 语法:border: width style color 2 outline 语法:outline: width style color 2.1 outline-offet MDN解释:用于设置outline与一个元素边缘或边框之间的间隙 即:设置outline相对border外边缘的偏移,可以为…

1.5计算机网络的分类

1.5计算机网络的分类 1.5.1按照网络的作用范围进行分类 1、广域网WAN 广域网WAN(WideAreaNetwork):广域网的作用范围通常为几十到几千公里,因而有时也称为远程网(longhaulnetwork)。广域网是互联网的核心部分,其任务…

架构02 - 架构的基础: 特点,本质...

软件架构简介: 架构是对系统中各个实体以及它们之间关系的抽象描述,是对功能和形式元素之间对应关系的分配,也是对元素之间关系及与周边环境关系的定义。软件架构的核心价值在于控制系统的复杂性,实现核心业务逻辑和技术细节的解耦…

CES 2024丨引领变革,美格智能为智能终端带来生成式AI能力

作为电子行业的“风向标”,CES 2024(国际消费电子展)于1月9日至12日在美国拉斯维加斯举办。本届展会可谓是AI的盛宴,芯片、AI PC、智能家居、汽车科技、消费电子等领域与AI相关的前沿成果接连发布,引领人工智能领域的科…

Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEvent

文章目录 Pre概述Code源码分析 Pre Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEvent 概述 Spring Boot 的广播机制是基于观察者模式实现的,它允许在 Spring 应用程序中发布和监听事件。这种机制的主要目的是为了实现解耦&#…

2024年最佳免费简历编辑工具,全功能完全免费使用!

随着科技的不断发展,求职竞争也愈发激烈。在2024年,如何在众多求职者中脱颖而出成为关键问题。为了帮助大家在职业生涯中取得更好的机会,特别推荐一款在2024年最为出色的免费简历编辑工具——芊芊简历。 1. 免费编辑功能 芊芊简历拥有直观易…

rime中州韵小狼毫 生字注音滤镜 汉字注音滤镜

在中文环境下,多音字是比较常见的现象。对于一些不常见的生僻字,或者一些用于地名,人名中的常见字的冷门读音,如果不能正确的阅读,例如把 荥阳 读成了 miāo yng,则会怡笑大方。 今天我们在rime中州韵小狼…

Leetcode349两个数组的交集(java实现,思路超清晰想学会的进来!)

今天,博主分享的题目是leetcode上的349两个数组的交集。题目描述如下: 解题思路:在这里我们分享一个做题的小技巧,我们拿到题如果题目描述中有判断某个集合中有没有哪个元素,类似这种要求的我们首先应该考虑是否可以使用哈希表。…

探索 C# 中的程序运行目录获取方法

探索 C# 中的程序运行目录获取方法 引言 在 C# 开发中,有时需要确定您的应用程序的运行目录。这可能是为了读取配置文件、存储日志,或者访问与应用程序位于同一目录的其他资源。C# 提供了几种方法来获取当前程序的运行目录。本文将探讨这些方法及其使用…

【漏洞复现】天融信TOPSEC static_convert 远程命令执行

漏洞描述 天融信TOPSEC Static_Convert存在严重的远程命令执行漏洞。攻击者通过发送精心构造的恶意请求,利用了该漏洞,成功实现在目标系统上执行任意系统命令的攻击。成功利用漏洞的攻击者可在目标系统上执行恶意操作,可能导致数据泄露、系统瘫痪或远程控制。强烈建议立即更…

google关键词分析怎么做?

想分析关键词那自然是要使用工具,而分析一个关键词比较看重的有两点,搜索量以及竞争程度。 搜索量无非就是关键词在谷歌搜索引擎被搜索的次数,这个数量越大,就证明这个关键词被人搜的越多次,我们要做的词,肯…

水产冷链物流行业零下25℃库架一体 海格里斯HEGERLS四向穿梭式冷藏冷库智能密集仓

随着国内外仓储物流整体规模和低温产品消费需求的稳步增长,冷链市场应用潜力不断释放。在传统“货架叉车”的方式下,货物、人员及机械设备不断进出,容易造成温度波动,导致冷量流失。立体冷库则以更高密度、更具成本效益的方式&…

【C++进阶06】红黑树图文详解及C++模拟实现红黑树

一、红黑树的概念及性质 1.1 红黑树的概念 AVL树用平衡因子让树达到高度平衡 红黑树可以认为是AVL树的改良 通过给每个节点标记颜色让树接近平衡 以减少树在插入节点的旋转 在每个结点新增一个存储位表示结点颜色 可以是Red或Black 通过对任何一条从根到叶子的路径上 各个结点…

go语言中的函数和方法

函数定义 1.1.1. golang函数特点: • 无需声明原型。• 支持不定 变参。• 支持多返回值。• 支持命名返回参数。 • 支持匿名函数和闭包。• 函数也是一种类型,一个函数可以赋值给变量。• 不支持 嵌套 (nested) 一个包不能有两个名字一样的函数。• 不…

PostgreSQL从小白到高手教程 - 第41讲:postgres表空间备份与恢复

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。 第41讲&#…

OpenCV-Python(33):SURF算法

目标 SUFR 是什么OpenCV 中的SURF 原理 学习了解过SIFT 算法后我们知道,它是对图像关键点进行检测和描述的,具有尺度不变的特性,但是这种算法的执行速度比较慢,人们需要速度更快的算法。2006年Bay,H.,Tuytelaars,T. 和Van Gool,…

盲盒小程序搭建,打造互联网电商模式

当前,盲盒作为年轻人的消费新选择,一度创下“销费奇迹”,深受年轻人的欢迎,成为了一种热门消费模式!盲盒小程序是盲盒市场互联网时代发展下的产物,也是当下盲盒销售中的一种新形式。下面具体分析盲盒小程序…

从传统到智能:机器视觉检测赋能PCB行业数字化转型!

PCB板在现代电子设备中是一个重要的组成部分,它是用来集成各种电子元器件的信息载体。在电子领域中,PCB板有着广泛的应用,而它的质量直接影响到产品的性能。随着电子科技技术和电子制造业的发展,贴片元器件的体积 变小&#xff0c…

RT-Thread 中断管理接口

中断服务程序挂接 系统把用户的中断服务程序(handler)和指定的中断号关联起来,可调用如下的接口挂载一个新的中断服务程序: rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler, void*param, char…