想象这样一种场景:我们通过电视直播观看足球比赛,电视屏幕大概有200万像素,假设我们关注的是任意时刻足球的位置。在这一场景中,人们实时地将屏幕上的百万级像素转换成了三维坐标。这个过程就是一种降维(dimensionnality reduction)。
降维是机器学习中很重要的一种思想。在机器学习中经常会碰到一些高维的数据集,而在高维数据情形下会出现数据样本稀疏,距离计算等困难,这类问题是所有机器学习方法共同面临的严重问题,称之为“ 维度灾难 ”。另外在高维特征中容易出现特征之间的线性相关,这也就意味着有的特征是冗余存在的。基于这些问题,降维思想就出现了。
降维通常有以下原因:
在已标注与未标注的数据上均可以应用降维技术。常见的降维算法有:
在上述3种降维算法中,PCA 的应用最为广泛。本篇仅介绍PCA技术,PCA 算法的伪代码如下:
from numpy import *
from matplotlib import pyplot as plt
def loadDataSet(fileName, delim='\t'):
fr = open(fileName)
stringArr = [line.strip().split(delim) for line in fr.readlines()]
datArr = [list(map(float,line)) for line in stringArr]
return mat(datArr)
def pca(dataMat, topNfeat=9999999):
meanVals = mean(dataMat, axis=0)
meanRemoved = dataMat - meanVals #remove mean
covMat = cov(meanRemoved, rowvar=0)
eigVals,eigVects = linalg.eig(mat(covMat))
eigValInd = argsort(eigVals) #sort, sort goes smallest to largest
eigValInd = eigValInd[:-(topNfeat+1):-1] #cut off unwanted dimensions
redEigVects = eigVects[:,eigValInd] #reorganize eig vects largest to smallest
#降维后新坐标系的数据
lowDDataMat = meanRemoved * redEigVects#transform data into new dimensions
#降维后的在原始坐标系下的数据
reconMat = (lowDDataMat * redEigVects.T) + meanVals
return lowDDataMat, reconMat
def replaceNanWithMean():
datMat = loadDataSet('secom.data', ' ')
numFeat = shape(datMat)[1]
for i in range(numFeat):
meanVal = mean(datMat[nonzero(~isnan(datMat[:,i].A))[0],i]) #values that are not NaN (a number)
datMat[nonzero(isnan(datMat[:,i].A))[0],i] = meanVal #set NaN values to mean
return datMat
dataMat = loadDataSet("testSet3.txt")
fig = plt.figure()
plt.title("PCA")
ax = fig.add_subplot(2,1,1)
ax.scatter(array(dataMat[:,0]), array(dataMat[:,1]), s=20, color="b")
lowDMat, reconMat = pca(dataMat, 1)
print(shape(lowDMat))
ax.scatter(reconMat[:,0].flatten().A[0], reconMat[:,1].flatten().A[0], marker='o', s = 15, c='r')
ax = fig.add_subplot(2,1,2)
ax.scatter(lowDMat.flatten().A[0], zeros(lowDMat.shape[0]), s=15, c="g")
plt.show()
该数据集降维后很容易利用决策树进行分类。
本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!