使用skleaen.datasets自带的鸢尾花数据集进行PCA降维
首先,导入IRIS鸢尾花数据集:
from sklearn.datasets import load_iris
其次,对鸢尾花数据集进行探索:
iris = load_iris()
X = iris.data
y = iris.target
iris.data是一个四维的数据集,iris.target将每一条鸢尾花打上标签
1.输入:
数据集D={X1,X2......Xm}
低维空间维数d
2.过程:
求取数据集的协方差矩阵XX
对协方差矩阵作特征值分解
取最大的d个特征值所对应的特征向量w1,w2……wd
3.输出:
投影矩阵W=(w1',w2'……wd')
矩阵协方差:
https://www.cnblogs.com/shenxiaolin/p/8666008.html
特征值分解:
https://zhidao.baidu.com/question/1766625103095080700.html
https://jingyan.baidu.com/article/ce09321b9177222bff858f30.html
投影矩阵:
https://blog.csdn.net/u012421852/article/details/80458340
1、使用算法:PCA降维算法
2、实现过程:
1、建立工程,导入sklearn相关包
import numpy as np
from sklearn.decomposition import PCA
2、加载数据,创建PCA算法实例
3、将降维结果进行可视化
将target中相同的鸢尾花样本的降维结果呈现在二维散点图中
调用PCA方法所需参数:
pca = PCA(n_components=None, copy=True, whiten=False)
n_components:
意义:PCA算法中所要保留的主成分个数n,也即保留下来的特征个数n
类型:int 或者 string,缺省时默认为None,所有成分被保留。
赋值为int,比如n_components=1,将把原始数据降到一个维度。
赋值为string,比如n_components='mle',将自动选取特征个数n,使得满足所要求的方差百分比。
copy:
类型:bool,True或者False,缺省时默认为True。意义:表示是否在运行算法时,将原始训练数据复制一份。
若为True,则运行PCA算法后,原始训练数据的值不会有任何改变,因为是在原始数据的副本上进行运算;
若为False,则运行PCA算法后,原始训练数据的值会改,因为是在原始数据上进行降维计算。
whiten:
类型:bool,缺省时默认为False
意义:白化,使得每个特征具有相同的方差。关于“白化”,可参考:Ufldl教程
其他属性:
参考:https://www.cnblogs.com/eczhou/p/5433856.html
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
pca = PCA(n_components=2)
reduced_X = pca.fit_transform(X)
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])
if y[i]==1:
blue_x.append(reduced_X[i][0])
blue_y.append(reduced_X[i][1])
if 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')
plt.scatter(green_x,green_y,c='g',marker='D')
plt.scatter(blue_x,blue_y,c='b',marker='.')