【Python机器学习实战】 | 基于PCA主成分分析技术读入空气质量监测数据进行数据预处理并计算空气质量综合评测结果

🎩 欢迎来到技术探索的奇幻世界👨‍💻

📜 个人主页@一伦明悦-CSDN博客

✍🏻 作者简介 C++软件开发、Python机器学习爱好者

🗣️ 互动与支持💬评论      👍🏻点赞      📂收藏     👀关注+

如果文章有所帮助,欢迎留下您宝贵的评论,

点赞加收藏支持我,点击关注,一起进步!

引言

主成分分析(Principal Component Analysis, PCA)是一种常用的机器学习和数据分析技术,用于降低数据维度、识别数据中的模式、发现变量之间的关系等。以下是PCA技术的详细介绍:

  1. 基本概念

    • PCA旨在通过线性变换将原始数据投影到一个新的坐标系中,新坐标系中的坐标轴称为主成分。这些主成分按照方差大小递减的顺序排列,第一主成分具有最大的方差,第二主成分具有第二大的方差,依此类推。
  2. 数学原理

    • PCA通过计算数据的协方差矩阵或相关矩阵,然后对其进行特征值分解(或奇异值分解),以获得主成分和对应的特征向量。这些特征向量定义了新的坐标系,而数据投影到这些特征向量上形成的新坐标即为主成分。
  3. 应用步骤

    • 数据标准化:对原始数据进行标准化处理,使得不同维度的数据具有相同的尺度。
    • 计算协方差矩阵:计算标准化后的数据的协方差矩阵。
    • 特征值分解:对协方差矩阵进行特征值分解或奇异值分解,得到特征值和特征向量。
    • 选择主成分:按照特征值的大小选择前k个主成分,这些主成分对应的特征向量构成了新的特征空间。
  4. 降维和数据压缩

    • PCA通过保留最重要的主成分(即方差较大的主成分)来实现数据的降维,从而减少数据的复杂度和存储空间,同时保留数据中的关键信息。
  5. PCA的应用领域

    • 数据可视化:通过降维将高维数据可视化到二维或三维空间,帮助分析人员理解数据的结构。
    • 特征提取:在机器学习中,PCA可以用来提取数据中最重要的特征,以便于后续的分类、回归或聚类任务。
    • 噪声过滤:PCA可以过滤掉数据中的噪声成分,提高数据的质量和后续分析的准确性。

正文

01-对数据集进行主成分分析并计算各主成分的方差贡献率

这段代码主要进行了以下操作:

  1. 导入所需的模块

    • 导入了numpy(np)、pandas(pd)和matplotlib.pyplot(plt)等常用的数据处理和可视化模块。
    • 导入了Axes3D和cm模块用于创建3D图形和设置颜色映射。
    • 使用warnings模块过滤警告信息,避免在程序运行过程中输出警告。
    • 设置matplotlib绘图显示中文字符的字体和解决负号显示问题。
    • 导入了make_regression、make_circles、make_s_curve等数据集生成函数,以及train_test_split等模型选择相关函数。
    • 导入FactorAnalyzer用于因子分析。
  2. 创建子图及设置图形参数

    • 使用plt.subplots创建1行2列的子图,设置子图的大小为15x6。
  3. 生成数据并进行可视化

    • 对于noise取30和10两种情况,分别生成包含50个样本观测点的数据集。
    • 使用make_regression生成具有线性关系的数据集,其中包括一个特征和一个目标变量,同时受到指定程度的噪声干扰。
    • 将生成的数据集绘制为散点图分布在两个子图中。
    • 设置子图标题、横纵坐标标签、显示网格线,并在图中添加标注显示各特征的离散程度。
  4. 保存图形

    • 使用plt.savefig将绘制的图形保存为文件,文件名为"…/4.png",分辨率为500dpi。

总体来说,这段代码通过生成具有线性关系的带有噪声的数据集,并通过散点图可视化展示了各个特征的分布情况,同时对数据的离散程度进行了说明。并最终将绘制的图形保存为文件。

#本章需导入的模块
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from pylab import *
import matplotlib.cm as cm
import warnings
warnings.filterwarnings(action = 'ignore')
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei']  #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus']=False
from sklearn.datasets import make_regression,make_circles,make_s_curve
from sklearn.model_selection import train_test_split
from scipy.stats import multivariate_normal
from sklearn import decomposition
from factor_analyzer import FactorAnalyzer

fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(15,6))
N=50
for i,noise in enumerate([30,10]): 
    X,Y=make_regression(n_samples=N,n_features=1,random_state=123,noise=noise,bias=0)
    X=np.hstack((X,Y.reshape(len(X),1)))
    axes[i].scatter(X[:,0],X[:,1],marker="o",s=50)
    axes[i].set_title("%d个样本观测点的分布"%N)
    axes[i].set_xlabel("X1")
    axes[i].set_ylabel("X2")
    axes[i].grid(True,linestyle='-.')
    axes[i].text(-3,75,"离散程度:X1=%.2f;\n         X2=%.2f;"
                 %(np.std(X[:,0])/np.mean(X[:,0]),np.std(X[:,1])/np.mean(X[:,1])),fontdict={'size':'12','color':'b'})  
    plt.savefig("../4.png", dpi=500)   

运行结果如下图所示: 

这段代码的作用是使用主成分分析(PCA)对生成的带有噪声的数据集进行降维,并可视化降维后的结果。

具体解释如下:

  1. 创建子图及设置图形参数

    • fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(15, 6)):创建包含1行2列的子图,每个子图的大小为15x6英寸。
  2. PCA模型的应用

    • pca = decomposition.PCA(n_components=2, random_state=1):初始化PCA对象,指定降维后保留的主成分数量为2,并设置随机种子以确保结果的可重复性。
  3. 生成数据并进行降维

    • for i, noise in enumerate([30, 10])::循环两次,分别处理噪声为30和10的情况。
    • X, Y = make_regression(n_samples=N, n_features=1, random_state=123, noise=noise, bias=0):生成包含50个样本观测点的数据集,其中特征数为1,同时受指定程度的噪声影响。
    • X = np.hstack((X, Y.reshape(len(X), 1))):将生成的特征X和目标变量Y合并成一个数组。
    • pca.fit(X):对数据集X进行PCA拟合,计算主成分和其它相关参数。
  4. 获取PCA结果并绘图

    • pca.singular_values_:获取PCA模型中的奇异值,即主成分的特征值。
    • pca.components_:获取PCA模型的主成分(特征向量)。
    • y = pca.transform(X):将原始数据集X转换到主成分空间,得到降维后的数据y。
    • axes[i].scatter(y[:, 0], y[:, 1], marker="o", s=50):在第i个子图中绘制降维后的数据y的散点图,x轴为第一个主成分,y轴为第二个主成分。
    • axes[i].set_title("%d个样本观测点的分布(方差贡献率:y1=%.3f,y2=%.3f)\n系数:%s"%(N, p1, p2, a)):设置子图标题,显示样本数量、每个主成分的方差贡献率、以及主成分系数。
    • axes[i].set_xlabel("y1") 和 axes[i].set_ylabel("y2"):设置子图的x轴和y轴标签。
    • axes[i].grid(True, linestyle='-.'):显示子图的网格线。
  5. 保存图形

    • plt.savefig("../4.png", dpi=500):将绘制的子图保存为
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一伦明悦

感谢,您的支持是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值