更新 PCA md文档

This commit is contained in:
jiangzhonglian
2017-08-23 14:19:32 +08:00
parent 0f39daac3e
commit 877fee7a9a
2 changed files with 69 additions and 48 deletions

View File

@@ -7,10 +7,9 @@ Update on 2017-05-18
@author: Peter Harrington/片刻
《机器学习实战》更新地址https://github.com/apachecn/MachineLearning
'''
print(__doc__)
from numpy import *
import matplotlib
import matplotlib.pyplot as plt
print(__doc__)
def loadDataSet(fileName, delim='\t'):
@@ -106,6 +105,32 @@ def show_picture(dataMat, reconMat):
plt.show()
def analyse_data(dataMat):
meanVals = mean(dataMat, axis=0)
meanRemoved = dataMat-meanVals
covMat = cov(meanRemoved, rowvar=0)
eigvals, eigVects = linalg.eig(mat(covMat))
eigValInd = argsort(eigvals)
topNfeat = 20
eigValInd = eigValInd[:-(topNfeat+1):-1]
cov_all_score = sum(eigvals)
sum_cov_score = 0
for i in range(0, len(eigValInd)):
line_cov_score = eigvals[eigValInd[i]]
sum_cov_score += line_cov_score
'''
我们发现其中有超过20%的特征值都是0。
这就意味着这些特征都是其他特征的副本,也就是说,它们可以通过其他特征来表示,而本身并没有提供额外的信息。
最前面15个值的数量级大于10^5实际上那以后的值都变得非常小。
这就相当于告诉我们只有部分重要特征,重要特征的数目也很快就会下降。
最后我们可能会注意到有一些小的负值他们主要源自数值误差应该四舍五入成0.
'''
print '主成分:%s, 方差占比:%s%%, 累积方差占比:%s%%' % (format(i+1, '2.0f'), format(line_cov_score/cov_all_score*100, '4.1f'), format(sum_cov_score/cov_all_score*100, '4.1f'))
if __name__ == "__main__":
# # 加载数据并转化数据类型为float
# dataMat = loadDataSet('input/13.PCA/testSet.txt')
@@ -119,30 +144,8 @@ if __name__ == "__main__":
# 利用PCA对半导体制造数据降维
dataMat = replaceNanWithMean()
print shape(dataMat)
# # 分析数据
# analyse_data(dataMat)
lowDmat, reconMat = pca(dataMat, 20)
print shape(lowDmat)
show_picture(dataMat, reconMat)
# meanVals = mean(dataMat, axis=0)
# meanRemoved = dataMat-meanVals
# covMat = cov(meanRemoved, rowvar=0)
# eigvals, eigVects = linalg.eig(mat(covMat))
# eigValInd = argsort(eigvals)
# topNfeat = 20
# eigValInd = eigValInd[:-(topNfeat+1):-1]
# cov_all_score = sum(eigvals)
# sum_cov_score = 0
# for i in range(0, len(eigValInd)):
# line_cov_score = eigvals[eigValInd[i]]
# sum_cov_score += line_cov_score
# '''
# 我们发现其中有超过20%的特征值都是0。
# 这就意味着这些特征都是其他特征的副本,也就是说,它们可以通过其他特征来表示,而本身并没有提供额外的信息。
# 最前面15个值的数量级大于10^5实际上那以后的值都变得非常小。
# 这就相当于告诉我们只有部分重要特征,重要特征的数目也很快就会下降。
# 最后我们可能会注意到有一些小的负值他们主要源自数值误差应该四舍五入成0.
# '''
# print '主成分:%s, 方差占比:%s%%, 累积方差占比:%s%%' % (format(i+1, '2.0f'), format(line_cov_score/cov_all_score*100, '4.1f'), format(sum_cov_score/cov_all_score*100, '4.1f'))