网站建设费用折旧年限,免费的外链网站,网站免费软件推荐,厦门网站建设的公司大家在做数据分析或者机器学习应用过程中#xff0c;不可避免的需要对数据进行降维操作#xff0c;好多垂直行业业务中经常出现数据量少但维度巨大的情况。数据降维的目的是为了剔除不相关或冗余特征#xff0c;使得数据易用#xff0c;去除无用数据#xff0c;实现数据可… 大家在做数据分析或者机器学习应用过程中不可避免的需要对数据进行降维操作好多垂直行业业务中经常出现数据量少但维度巨大的情况。数据降维的目的是为了剔除不相关或冗余特征使得数据易用去除无用数据实现数据可视化提高模型精确度减少运行成本减少特征个数并关注本质特征确保数据特征属性间相互独立。
1.数据降维的主要方法
数据降维主要有线性和非线性方法线性方法有PCA 、ICA、LDA、LFA、LPP(LE 的线性表示非线性方法有基于核函数——KPCA 、KICA、KDA基于特征值的流型学习——ISOMAP、LLE、LE、LPP、LTSA、MVU。 本文主要讲述PCA和ICA以及NMFNMF是一种只关注非负值的PCA降维方法。其中PCA是一种全新的正交特征也被称为主成分来表示向数据变化最大的方向投影(最大方差)或者说向重构误差最小化的方向投影形成维度更少、正交的数据特征。
2.数据降维的应用场景
主要应用于文本处理、人脸识别、图片识别、自然语言处理、业务环节的高维数据处理等领域。
3.数据降维示例
数据降维方法的主要示例详见下方。
import numpy as np
import matplotlib.pyplot as plt
import cv2 #主成分分析PCA
mean [20, 20] # 各维度的均值确定数据维度表示1行2列长度为N的一维矩阵
cov [[5, 0], [25, 25]] # 协方差矩阵且协方差矩阵必须是对称矩阵和半正定矩阵(形状为(N,N)的二维数组)
np.random.seed(42) #设置随机种子点这样每次生成数据都一样
x, y np.random.multivariate_normal(mean, cov, 2000).T #根据均值和协方差矩阵情况生成一个多元正态分布矩阵
plt.figure(figsize(10, 6))
plt.plot(x, y, o, zorder1)
plt.axis([0, 40, 0, 40])
plt.xlabel(source feature 1)
plt.ylabel(source feature 2)
plt.show()
X np.vstack((x, y)).T #组合成特征矩阵
mu, eig cv2.PCACompute(X, np.array([])) #以空数组作为蒙版获得平均值和协方差矩阵的特征向量eig
plt.figure(figsize(10, 6))
plt.plot(x, y, o, zorder1)
plt.quiver(mean, mean, eig[:, 0], eig[:, 1], zorder3, scale0.2, unitsxy)
plt.text(mean[0] 5 * eig[0, 0], mean[1] 5 * eig[0, 1], v1, zorder5,
fontsize16, bboxdict(facecolorwhite, alpha0.6))
plt.text(mean[0] 7 * eig[1, 0], mean[1] 4 * eig[1, 1], v2, zorder5,
fontsize16, bboxdict(facecolorwhite, alpha0.6))
plt.axis([0, 40, 0, 40])
plt.xlabel(feature 1)
plt.ylabel(feature 2)
plt.show() #1.opencv提供与PCA密切相关的降维技术
X2 cv2.PCAProject(X, mu, eig) #选择数据将xy坐标轴旋转为以v1v2为坐标轴v1、v2的选择来自于mu和eig
plt.figure(figsize(10, 6))
plt.plot(X2[:, 0], X2[:, 1], ^)
plt.xlabel(first principal component)
plt.ylabel(second principal component)
plt.axis([-20, 20, -10, 10])
plt.show() #2.sklearn提供与PCA密切相关的降维技术ICA
from sklearn import decomposition
ica decomposition.FastICA() #与PCA类似但分解后选择尽量相互独立的成分。
X2 ica.fit_transform(X)
plt.figure(figsize(10, 6))
plt.plot(X2[:, 0], X2[:, 1], ^)
plt.xlabel(first independent component)
plt.ylabel(second independent component)
plt.axis([-0.2, 0.2, -0.2, 0.2])
plt.show() #3.sklearn提供PCA密切相关的降维技术即非负矩阵分解仅仅处理那些非负的数据特征矩阵中不能有负值
from sklearn import decomposition
nmf decomposition.NMF()
X2 nmf.fit_transform(X)
plt.figure(figsize(10, 6))
plt.plot(X2[:, 0], X2[:, 1], o)
plt.xlabel(first non-negative component)
plt.ylabel(second non-negative component)
plt.axis([0, 1.5, -0.5, 1.5])
plt.show()