购物网站建设新闻,treeson wordpress,网站页面设计培训,徐州网站推广文章目录 一、PCA降维简单介绍二、python中实现PCA降维函数的介绍三、代码实现四、PCA降维的优缺点 一、PCA降维简单介绍
PCA#xff08;主成分分析#xff0c;Principal Component Analysis#xff09;是一种常用的数据降维技术。它通过线性变换将原始数据转换到新的坐标系… 文章目录 一、PCA降维简单介绍二、python中实现PCA降维函数的介绍三、代码实现四、PCA降维的优缺点 一、PCA降维简单介绍
PCA主成分分析Principal Component Analysis是一种常用的数据降维技术。它通过线性变换将原始数据转换到新的坐标系统中使得任何投影的第一大方差在第一个坐标称为第一主成分上第二大方差在第二个坐标第二主成分上依此类推。PCA的主要目的是通过保留数据集中对方差贡献最大的特征来降低数据的维度同时尽可能保留原始数据的信息。PCA降维的步骤 1、标准化数据 由于PCA对数据的尺度非常敏感因此在进行PCA之前通常需要先将数据标准化也称为归一化即每个特征减去其均值并除以其标准差使得每个特征的均值为0方差为1。2、计算协方差矩阵 协方差矩阵衡量的是数据集中各个特征之间的相关性。对于n维数据其协方差矩阵是一个n×n的矩阵其中每个元素C ij是第i个特征和第j个特征的协方差。3、计算协方差矩阵的特征值和特征向量 特征值表示了每个主成分在数据集中的方差贡献率而特征向量则定义了新的坐标轴的方向。4、选择主成分 根据特征值的大小选择前k个最大的特征值对应的特征向量。这些特征向量将构成新的特征空间其中k是降维后的维度数。5、将原始数据投影到新的特征空间 使用选定的特征向量作为基将原始数据投影到新的特征空间得到降维后的数据。
二、python中实现PCA降维函数的介绍 在Python中使用scikit-learn库来进行PCA分析其中PCA是通过PCA类来实现的 PCA类有以下参数默认值 PCA(n_componentsNone, copyTrue, whitenFalse, svd_solver’auto’, tol0.0, iterated_power’auto’, random_stateNone)重要参数的介绍 n_components这个参数可以帮我们指定希望PCA降维后的特征维度数目。 如果为整数表示要降维到的目标比如十维的数据指定n_components5表示将十维数据降维到五维如果为小数表示累计方差百分比。 copy : bool类型True或者False缺省时默认为True。 表示是否在运行算法时将原始训练数据复制一份。 若为True则运行PCA算法后原始训练数据的值不会有任何改变因为是在原始数据的副本上进行运算若为False则运行PCA算法后原始训练数据的值会改因为是在原始数据上进行降维计算。 whiten判断是否进行白化。 所谓白化就是对降维后的数据的每个特征进行归一化让方差都为1对于PCA降维本身来说一般不需要白化。如果你PCA降维后有后续的数据处理动作可以考虑白化。默认值是False即不进行白化。 svd_solver即指定奇异值分解SVD的方法由于特征分解是奇异值分解SVD的一个特例一般的PCA库都是基于SVD实现的。有4个可以选择的值{‘auto’, ‘full’, ‘arpack’, ‘randomized’}。 randomized一般适用于数据量大数据维度多同时主成分数目比例又较低的PCA降维它使用了一些加快SVD的随机算法。full则是传统意义上的SVD使用了scipy库对应的实现。arpack和randomized的适用场景类似区别是randomized使用的是scikit-learn自己的SVD实现而arpack直接使用了scipy库的sparse SVD实现。auto是默认值即PCA类会自己去在前面讲到的三种算法里面去权衡选择一个合适的SVD算法来降维。一般来说使用默认值就够了。 一些返回值属性 components_一个形状为(n_components, n_features)的NumPy数组包含了定义主成分的特征向量即每个主成分是原始特征的哪个线性组合。explained_variance_一个形状为(n_components,)的NumPy数组包含了每个主成分解释的方差值。方差值越大则说明越是重要的主成分。explained_variance_ratio_一个形状为(n_components,)的NumPy数组包含了每个主成分解释的方差占总方差的比例。
三、代码实现 数据集介绍 此数据集是一份少量的60鸢尾花数据前四列为特征数据最后一列为标签数据部分数据如下所示 此数据中有四个特征代表的有4个维度下面将通过PCA降维方法将其降维至2维并将降维后的特征数据划分为新的数据集传入到逻辑回归模型中进行训练与测试 并将没有进行PCA降维处理的原数据也传入到回归模型中得出结果进行比较 代码如下 from sklearn.decomposition import PCA
import pandas as pd# 读取数据
data pd.read_excel(hua.xlsx)# 数据划分
x data.iloc[:, :-1] # 训练数据
y data.iloc[:, -1] # 标签数据# 实例化PCA对象
pca PCA(n_components2)
pca.fit(x)print(特征所占百分比:{}.format(sum(pca.explained_variance_ratio_)))
print(每个主成分的方差值{}.format(pca.explained_variance_))new_x pca.transform(x)
print(PCA降维后数据:)
print(new_x)# 切分降维后的数据集
from sklearn.model_selection import train_test_splitx_train_pca, x_test_pca, y_train_pca, y_test_pca \train_test_split(new_x, y, test_size0.2, random_state0)from sklearn.linear_model import LogisticRegression# 实例一个逻辑回归模型
classifier_pca LogisticRegression()
classifier_pca.fit(x_train_pca, y_train_pca) # 训练数据from sklearn import metrics# accuracy 值
train_score_pca classifier_pca.score(x_train_pca, y_train_pca)
print(训练集数据测试的accuracy值为{}.format(train_score_pca))
# 训练集数据评估指标报告
train_predict_pca classifier_pca.predict(x_train_pca)
print(训练集数据评估指标报告)
print(metrics.classification_report(y_train_pca, train_predict_pca))test_score_pca classifier_pca.score(x_test_pca, y_test_pca)
print(测试集数据测试的accuracy值为{}.format(test_score_pca))
# 测试集数据评估指标报告
test_predict_pca classifier_pca.predict(x_test_pca)
print(测试集数据评估指标报告)
print(metrics.classification_report(y_test_pca, test_predict_pca))print(**************************************************************)# 切分原始数据集
x_train, x_test, y_train, y_test \train_test_split(x, y, test_size0.2, random_state0)classifier LogisticRegression()
classifier.fit(x_train, y_train)# accuracy 值
train_score classifier.score(x_train, y_train)
print(训练集数据测试的accuracy值为{}.format(train_score))
# 训练集数据评估指标报告
train_predict classifier.predict(x_train)
print(训练集数据评估指标报告)
print(metrics.classification_report(y_train, train_predict))test_score classifier.score(x_test, y_test)
print(测试集数据测试的accuracy值为{}.format(train_score))
# 测试集数据评估指标报告
test_predict classifier.predict(x_test)
print(测试集数据评估指标报告)
print(metrics.classification_report(y_test, test_predict))结果如下 由于此数据集的数据量太少降维前后的模型训练结果基本差不多在大的数据集中对比最终的结果可能会更加明显
四、PCA降维的优缺点
优点 1.计算方法简单容易实现。2.可以减少指标筛选的工作量。3.消除变量间的多重共线性。4.在一定程度上能减少噪声数据。 缺点 1.特征必须是连续型变量可以在一定范围内连续取值的变量。2.无法解释降维后的数据是什么。3.有时候贡献率小的成分有可能更重要但是会被降维的时候舍弃掉。