PCA降维与线性判别分析--鸢尾花

1.鸢尾花数据集降维(原始数据集维度是4,降维后数据集维度是2)

import matplotlib.pyplot as plt
import numpy as np
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
import pandas as pd
data = load_iris()                 # 以字典形式加载鸢尾花数据集
y = data.target                    # 使用y表示数据集中的标签
X = data.data                      # 使用X表示数据集中的属性数据
pca = PCA(n_components=2)          # 加载PCA算法,设置降维后主成分数目为2
reduced_X = pca.fit_transform(X)   # 对原始数据进行降维,保存在reduced_X中
print("降维前:",X.shape)
print("降维后",reduced_X.shape)

结果:

降维前: (150, 4)
降维后 (150, 2)

2. 对比特征值特征向量

import matplotlib.pyplot as plt
import numpy as np
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
import pandas as pd
data = load_iris()                 # 以字典形式加载鸢尾花数据集
y = data.target                    # 使用y表示数据集中的标签
X = data.data                      # 使用X表示数据集中的属性数据
Xcov=np.cov(X.T)                   #计算协方差矩阵
eig,featueVector=np.linalg.eig(Xcov)
print("原始数据特征值:",eig)#计算降维前数据的特征值
print("原始数据特征向量:\n",featueVector)#计算降维前数据的特征向量
pca = PCA(n_components=2)          # 加载PCA算法,设置降维后主成分数目为2
reduced_X = pca.fit_transform(X)   # 对原始数据进行降维,保存在reduced_X中
X1cov=np.cov(reduced_X.T)                   #计算协方差矩阵
eig1,featueVector1=np.linalg.eig(X1cov)
print("降维数据特征值:",eig1)#计算降维后数据的特征值
print("降维数据特征向量:\n",featueVector1)#计算降维后数据的特征向量
print("\n特征方差百分比:",pca.explained_variance_ratio_)
red_x, red_y = [], []              # 第一类数据点
blue_x, blue_y = [], []            # 第二类数据点
green_x, green_y = [], []          # 第三类数据点
for i in range(len(reduced_X)):    # 按照鸢尾花的类别将降维后的数据点保存在不同的列表中。
    if y[i] == 0:
        red_x.append(reduced_X[i][0])#第一列
        red_y.append(reduced_X[i][1])#第二列
    elif y[i] == 1:
        blue_x.append(reduced_X[i][0])
        blue_y.append(reduced_X[i][1])
    elif y[i]==2:
        green_x.append(reduced_X[i][0])
        green_y.append(reduced_X[i][1])

plt.scatter(red_x, red_y, c='r', marker='x',label='setosa')
plt.scatter(blue_x, blue_y, c='b', marker='D',label='versicolor')
plt.scatter(green_x, green_y, c='g', marker='.', label='Virginica')
plt.show()

结果:

原始数据特征值: [4.22824171 0.24267075 0.0782095  0.02383509]
原始数据特征向量:
 [[ 0.36138659 -0.65658877 -0.58202985  0.31548719]
 [-0.08452251 -0.73016143  0.59791083 -0.3197231 ]
 [ 0.85667061  0.17337266  0.07623608 -0.47983899]
 [ 0.3582892   0.07548102  0.54583143  0.75365743]]
降维数据特征值: [4.22824171 0.24267075]
降维数据特征向量:
 [[1.00000000e+00 1.82279585e-17]
 [0.00000000e+00 1.00000000e+00]]

特征方差百分比: [0.92461872 0.05306648]

3. 降维前的四维图 (平行坐标图 (parallel coordinate plot) 是可视化高维多元数据的一种常用方法,为了显示多维空间中的一组对象,绘制由多条平行且等距分布的轴,并将多维空间中的对象表示为在平行轴上具有顶点的折线。顶点在每一个轴上的位置就对应了该对象在该维度上的中的变量数值) 

import sklearn.datasets as ds
import pandas  as pd
import matplotlib.pyplot as plt
iris = ds.load_iris()
x_name = iris.feature_names   
x = iris.data  #shape (150, 4)
y = iris.target
#鸢尾花平行座标图,不同类别的做了颜色区分
plt.figure(figsize=(10,6))
for i in range(150):
    if y[i] == 0:
        lcolor = 'red'
    elif y[i] == 1:
        lcolor = 'blue'
    else:
        lcolor = 'orange'
    line = x[i,:]
    plt.plot(line,color = lcolor)
plt.show()

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值