主成分分析(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()  

输出:

327-1.png

步骤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()  

输出:

327-2.png

结论

在本教程中,我们学习了如何使用Python进行主成分分析,以及它的用途和目标,以及如何在数据集上使用它来分析测试和训练集的数据。

标签: Tkinter教程, Tkinter安装, Tkinter库, Tkinter入门, Tkinter学习, Tkinter入门教程, Tkinter, Tkinter进阶, Tkinter指南, Tkinter学习指南, Tkinter进阶教程, Tkinter编程