Python教程-用Python进行主成分分析(PCA)

主成分分析(PCA)是一种代数技术,用于将一组可能相关的变量的观测转换为线性不相关变量的值集。
所有主成分被选择来描述变量中大部分可用的方差,而且所有主成分彼此正交。在所有主成分集合中,第一个主成分总是具有最大的方差。
主成分分析的不同用途:
- PCA可用于查找数据中各个变量之间的相互关系。
- PCA可用于解释和可视化数据集。
- PCA还可用于可视化基因距离和不同群体之间的关系。
- PCA还通过减少变量的数量来简化分析。
主成分分析通常在一个方阵对称矩阵上执行,这可以是纯平方和交叉乘积矩阵、相关矩阵或协方差矩阵。如果各个变量的方差存在明显差异,那么通常使用相关矩阵。
主成分分析的目标是什么?
PCA的基本目标如下:
- PCA是一种无依赖方法,可用于从一组较多变量的属性空间减少到较少因子的数量。
- 它是一种降维技术,但不能保证降维后的因子是可解释的。
- 在PCA中,主要工作是从较多变量的集合中选择一组子集,该子集的原始变量与主要量的相关性最高。
主轴法:主成分分析搜索变量的线性组合,以从变量中提取最大方差。完成PCA后,它将继续寻找能够解释剩余方差最大比例的其他线性组合,从而导致正交因子集。这种方法用于分析变量集中的总方差。
特征向量:它是在矩阵乘法后保持平行的非零向量。假设“V”是矩阵K的维度为R的特征向量,K的维度为R * R。如果KV和V平行,则用户必须解决KV = PV,其中V和P都是未知的,以解决特征向量和特征值。
特征值:在PCA中也称为“特征根”。它用于衡量所有变量中由该因子报告的方差。特征值的比例是关于变量的因子的描述性重要性的比率。如果因子较小,它对变量的描述贡献较小。
现在,我们将使用Python讨论主成分分析。
使用Python进行PCA的步骤如下:
在本教程中,我们将使用wine.csv数据集。
步骤1: 导入所需的库。
import numpy as nmp
import matplotlib.pyplot as mpltl
import pandas as pnd
步骤2: 导入数据集(wine.csv)
首先,我们将导入数据集并将其分为X和Y组件以进行数据分析。
DS = pnd.read_csv('Wine.csv')
# Now, we will distribute the dataset into two components "X" and "Y"
X = DS.iloc[: , 0:13].values
Y = DS.iloc[: , 13].values
步骤3: 将数据集分为训练集和测试集。
from sklearn.model_selection import train_test_split as tts
X_train, X_test, Y_train, Y_test = tts(X, Y, test_size = 0.2, random_state = 0)
步骤4: 特征缩放。
在此步骤中,我们将对训练集和测试集进行再处理,例如,拟合标准缩放。
from sklearn.preprocessing import StandardScaler as SS
SC = SS()
X_train = SC.fit_transform(X_train)
X_test = SC.transform(X_test)
步骤5: 应用PCA函数。
我们将在训练集和测试集上应用PCA函数以进行分析。
from sklearn.decomposition import PCA
PCa = PCA (n_components = 1)
X_train = PCa.fit_transform(X_train)
X_test = PCa.transform(X_test)
explained_variance = PCa.explained_variance_ratio_
步骤6: 现在,我们将对训练集进行逻辑回归拟合。
from sklearn.linear_model import LogisticRegression as LR
classifier_1 = LR (random_state = 0)
classifier_1.fit(X_train, Y_train)
输出:
LogisticRegression(random_state=0)
步骤7: 在这里,我们将预测测试集的结果。
Y_pred = classifier_1.predict(X_test)
步骤8: 创建混淆矩阵。
from sklearn.metrics import confusion_matrix as CM
c_m = CM (Y_test, Y_pred)
步骤9: 然后,预测训练集的结果。
from matplotlib.colors import ListedColormap as LCM
X_set, Y_set = X_train, Y_train
X_1, X_2 = nmp.meshgrid(nmp.arange(start = X_set[:, 0].min() - 1,
stop = X_set[: , 0].max() + 1, step = 0.01),
nmp.arange(start = X_set[: , 1].min() - 1,
stop = X_set[: , 1].max() + 1, step = 0.01))
mpltl.contourf(X_1, X_2, classifier_1.predict(nmp.array([X_1.ravel(),
X_2.ravel()]).T).reshape(X_1.shape), alpha = 0.75,
cmap = LCM (('yellow', 'grey', 'green')))
mpltl.xlim (X_1.min(), X_1.max())
mpltl.ylim (X_2.min(), X_2.max())
for s, t in enumerate(nmp.unique(Y_set)):
mpltl.scatter(X_set[Y_set == t, 0], X_set[Y_set == t, 1],
c = LCM (('red', 'green', 'blue'))(s), label = t)
mpltl.title('Logistic Regression for Training set: ')
mpltl.xlabel ('PC_1') # for X_label
mpltl.ylabel ('PC_2') # for Y_label
mpltl.legend() # for showing legend
# show scatter plot
mpltl.show()
输出:
步骤10: 最后,我们将可视化测试集的结果。
from matplotlib.colors import ListedColormap as LCM
X_set, Y_set = X_test, Y_test
X_1, X_2 = nmp.meshgrid(nmp.arange(start = X_set[: , 0].min() - 1,
stop = X_set[: , 0].max() + 1, step = 0.01),
nmp.arange(start = X_set[: , 1].min() - 1,
stop = X_set[: , 1].max() + 1, step = 0.01))
mpltl.contourf(X_1, X_2, classifier_1.predict(nmp.array([X_1.ravel(),
X_2.ravel()]).T).reshape(X_1.shape), alpha = 0.75,
cmap = LCM(('pink', 'grey', 'aquamarine')))
mpltl.xlim(X_1.min(), X_1.max())
mpltl.ylim(X_2.min(), X_2.max())
for s, t in enumerate(nmp.unique(Y_set)):
mpltl.scatter(X_set[Y_set == t, 0], X_set[Y_set == t, 1],
c = LCM(('red', 'green', 'blue'))(s), label = t)
# title for scatter plot
mpltl.title('Logistic Regression for Testing set')
mpltl.xlabel ('PC_1') # for X_label
mpltl.ylabel ('PC_2') # for Y_label
mpltl.legend()
# show scatter plot
mpltl.show()
输出:
结论
在本教程中,我们学习了如何使用Python进行主成分分析,以及它的用途和目标,以及如何在数据集上使用它来分析测试和训练集的数据。