sklearn的wine数据,它有178个样本,13个特征(Alcohol ,Malic acid ,Ash等),总共分为三类。python
#葡萄酒数据集+PCA import matplotlib.pyplot as plt#画图工具 from mpl_toolkits.mplot3d import Axes3D from sklearn import datasets data=datasets.load_wine() X=data['data'] y=data['target'] ########### #选取三个特征查看IRIS数据分布 ax = Axes3D(plt.figure()) for c,i,target_name in zip('>o*',[0,1,2],data.target_names): ax.scatter(X[y==i ,0], X[y==i, 1], X[y==i,2], marker=c, label=target_name) ax.set_xlabel(data.feature_names[0]) ax.set_ylabel(data.feature_names[1]) ax.set_zlabel(data.feature_names[2]) ax.set_title("wine") plt.legend() plt.show()
注意:与鸢尾花数据集相比,绘图时的区别是‘>o*’和marker工具
#选取两个特征查看IRIS数据分布 # ax = plt.figure() # for c, i, target_name in zip("rgb", [0, 1, 2], data.target_names): # plt.scatter(X[y == i, 0], X[y == i, 1], c=c, label=target_name) # plt.xlabel(data.feature_names[0]) # plt.ylabel(data.feature_names[1]) # plt.title("wine") # plt.legend() # plt.show() #利用PCA降维,降到二维 from sklearn.decomposition import PCA pca = PCA(n_components=2) X_p =pca.fit(X).transform(X) ax = plt.figure() for c, i, target_name in zip("rgb", [0, 1, 2], data.target_names): plt.scatter(X_p[y == i, 0], X_p[y == i, 1], c=c, label=target_name) plt.xlabel('Dimension1') plt.ylabel('Dimension2') plt.title("wine") plt.legend() plt.show()
降维前:spa
降维后3d
#标准化后作PCA from sklearn.preprocessing import StandardScaler X=StandardScaler().fit(X).transform(X) from sklearn.decomposition import PCA pca = PCA(n_components=2) X_p =pca.fit(X).transform(X) ax = plt.figure() for c, i, target_name in zip("rgb", [0, 1, 2], data.target_names): plt.scatter(X_p[y == i, 0], X_p[y == i, 1], c=c, label=target_name) plt.xlabel('Dimension1') plt.ylabel('Dimension2') plt.title("wine-standard-PCA") plt.legend() plt.show()
标准化后均值为0,标准差为1code
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA lda = LDA(n_components=2) X_r =lda.fit(X,y).transform(X) ax = plt.figure() for c, i, target_name in zip("rgb", [0, 1, 2], data.target_names): plt.scatter(X_r[y == i, 0], X_r[y == i, 1], c=c, label=target_name) plt.xlabel('Dimension1') plt.ylabel('Dimension2') plt.title("LDA") plt.legend() plt.show()
有监督在程序中表如今X_r =lda.fit(X,y).transform(X),用到了标签y。component
与PCA相比,LDA可以将三类样本彻底分开,且同类样本之间更为密集,通常而言,有监督的LDA更加准确。orm
PCA:blog
经过坐标轴转换,寻找数据分布的最优子空间。用协方差矩阵前N个最大特征值对应的特征向量构成映射矩阵,而后原始矩阵左乘映射矩阵实现降维。特征向量能够理解为坐标转换中新坐标轴的方向,特征值表示对应特征向量上的方差。教程
LDA:ip
将带标签的数据经过投影下降维度,使投影不一样类距离远,同类点分散程度小。