当前位置:   article > 正文

PCA、LDA降维——应用于wine葡萄酒数据集_葡萄酒lda降维r语言

葡萄酒lda降维r语言

参考教程:https://mp.weixin.qq.com/s/QqqLAxx92v_HOg7QBKrK6A

一、wine数据集介绍

sklearn的wine数据,它有178个样本,13个特征(Alcohol ,Malic acid ,Ash等),总共分为三类。

二、查看三个特征下的数据分布

  1. #葡萄酒数据集+PCA
  2. import matplotlib.pyplot as plt#画图工具
  3. from mpl_toolkits.mplot3d import Axes3D
  4. from sklearn import datasets
  5. data=datasets.load_wine()
  6. X=data['data']
  7. y=data['target']
  8. ###########
  9. #选取三个特征查看IRIS数据分布
  10. ax = Axes3D(plt.figure())
  11. for c,i,target_name in zip('>o*',[0,1,2],data.target_names):
  12. ax.scatter(X[y==i ,0], X[y==i, 1], X[y==i,2], marker=c, label=target_name)
  13. ax.set_xlabel(data.feature_names[0])
  14. ax.set_ylabel(data.feature_names[1])
  15. ax.set_zlabel(data.feature_names[2])
  16. ax.set_title("wine")
  17. plt.legend()
  18. plt.show()

注意:与鸢尾花数据集相比,绘图时的区别是‘>o*’和marker

三、不标准化下的降维前和降维后

  1. #选取两个特征查看IRIS数据分布
  2. # ax = plt.figure()
  3. # for c, i, target_name in zip("rgb", [0, 1, 2], data.target_names):
  4. # plt.scatter(X[y == i, 0], X[y == i, 1], c=c, label=target_name)
  5. # plt.xlabel(data.feature_names[0])
  6. # plt.ylabel(data.feature_names[1])
  7. # plt.title("wine")
  8. # plt.legend()
  9. # plt.show()
  10. #利用PCA降维,降到二维
  11. from sklearn.decomposition import PCA
  12. pca = PCA(n_components=2)
  13. X_p =pca.fit(X).transform(X)
  14. ax = plt.figure()
  15. for c, i, target_name in zip("rgb", [0, 1, 2], data.target_names):
  16. plt.scatter(X_p[y == i, 0], X_p[y == i, 1], c=c, label=target_name)
  17. plt.xlabel('Dimension1')
  18. plt.ylabel('Dimension2')
  19. plt.title("wine")
  20. plt.legend()
  21. plt.show()

 

降维前:

 

降维后

四、标准化后做PCA降维

  1. #标准化后做PCA
  2. from sklearn.preprocessing import StandardScaler
  3. X=StandardScaler().fit(X).transform(X)
  4. from sklearn.decomposition import PCA
  5. pca = PCA(n_components=2)
  6. X_p =pca.fit(X).transform(X)
  7. ax = plt.figure()
  8. for c, i, target_name in zip("rgb", [0, 1, 2], data.target_names):
  9. plt.scatter(X_p[y == i, 0], X_p[y == i, 1], c=c, label=target_name)
  10. plt.xlabel('Dimension1')
  11. plt.ylabel('Dimension2')
  12. plt.title("wine-standard-PCA")
  13. plt.legend()
  14. plt.show()

标准化后均值为0,标准差为1

五、不需要标准化的LDA有监督降维

  1. from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
  2. lda = LDA(n_components=2)
  3. X_r =lda.fit(X,y).transform(X)
  4. ax = plt.figure()
  5. for c, i, target_name in zip("rgb", [0, 1, 2], data.target_names):
  6. plt.scatter(X_r[y == i, 0], X_r[y == i, 1], c=c, label=target_name)
  7. plt.xlabel('Dimension1')
  8. plt.ylabel('Dimension2')
  9. plt.title("LDA")
  10. plt.legend()
  11. plt.show()

 

有监督在程序中表现在X_r =lda.fit(X,y).transform(X),用到了标签y。

 

与PCA相比,LDA能够将三类样本完全分开,且同类样本之间更为密集,一般而言,有监督的LDA更加准确。

六、PCA、LDA原理

PCA:

  通过坐标轴转换,寻找数据分布的最优子空间。用协方差矩阵前N个最大特征值对应的特征向量构成映射矩阵,然后原始矩阵左乘映射矩阵实现降维。特征向量可以理解为坐标转换中新坐标轴的方向,特征值表示对应特征向量上的方差。

LDA:

   将带标签的数据通过投影降低维度,使投影不同类距离远,同类点分散程度小。

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/106790
推荐阅读
相关标签
  

闽ICP备14008679号