赞
踩
sklearn的wine数据,它有178个样本,13个特征(Alcohol ,Malic acid ,Ash等),总共分为三类。
- #葡萄酒数据集+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()
降维前:
降维后
- #标准化后做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,标准差为1
- 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。
与PCA相比,LDA能够将三类样本完全分开,且同类样本之间更为密集,一般而言,有监督的LDA更加准确。
PCA:
通过坐标轴转换,寻找数据分布的最优子空间。用协方差矩阵前N个最大特征值对应的特征向量构成映射矩阵,然后原始矩阵左乘映射矩阵实现降维。特征向量可以理解为坐标转换中新坐标轴的方向,特征值表示对应特征向量上的方差。
LDA:
将带标签的数据通过投影降低维度,使投影不同类距离远,同类点分散程度小。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。