mirror of
https://github.com/apachecn/ailearning.git
synced 2026-06-16 15:26:39 +08:00
更新13.PCA注释
This commit is contained in:
@@ -117,31 +117,31 @@ if __name__ == "__main__":
|
||||
|
||||
# 利用PCA对半导体制造数据降维
|
||||
dataMat = replaceNanWithMean()
|
||||
# print shape(dataMat)
|
||||
# lowDmat, reconMat = pca(dataMat, 40)
|
||||
# print shape(lowDmat)
|
||||
# show_picture(dataMat, reconMat)
|
||||
print shape(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)
|
||||
# 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。
|
||||
这就意味着这些特征都是其他特征的副本,也就是说,它们可以通过其他特征来表示,而本身并没有提供额外的信息。
|
||||
# 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,实际上那以后的值都变得非常小。
|
||||
这就相当于告诉我们只有部分重要特征,重要特征的数目也很快就会下降。
|
||||
# 最前面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'))
|
||||
# 最后,我们可能会注意到有一些小的负值,他们主要源自数值误差应该四舍五入成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'))
|
||||
|
||||
Reference in New Issue
Block a user