기계 학습 고전 알고리즘 11 - PCA

2535 단어
1. 기본 소개
         우리 의 눈 은 최대 3 차원 의 것 을 볼 수 있 지만 현실 생활 에는 3 차원 이상 의 것 이 많다. 그러면 어떻게 이런 데 이 터 를 시각 화 할 수 있 습 니까?그 밖 에 다 차원 의 데 이 터 를 압축 하여 저장 공간 을 줄 일 수 있 습 니까?이것 은 모두 차원 을 낮 추 는 방식 으로 목적 을 달성 할 수 있 는데 그 중에서 광범 위 하 게 사용 되 는 것 이 바로 PCA (Principle Component Analysis) 이다. PCA 는 알고리즘 계산 비용 을 낮 추고 소음 을 제거 하 며 결 과 를 쉽게 보 여주 고 이해 할 수 있 도록 할 수 있다.
        PCA 는 기 존의 n 차원 데이터 점 에서 n - 1 차원 의 평면 을 찾 아 n 차원 의 데이터 점 에서 n - 1 차원 면 의 투영 거 리 를 최소 화 하 는 것 으로 볼 수 있다.
        여기 서 훈련 에 m 개의 견본 이나 사례 가 집중 되 어 있다 고 가정 하고 모든 견본 의 특징 이나 속성 수 는 n 이다.
2. 기본 절차
       데 이 터 를 이전 N 개 (즉 n 차원 에서 N 차원 으로) 주성 분 의 위조 코드 로 바 꿉 니 다.
       1. 데이터 전처리.여기 서 예비 처 리 는 두 가지 부분 을 포함한다. 평균 값 의 획일 화 와 속성 범위 조정 이다.평균치 귀 일 화 는 해당 속성 에서 그 평균 치 를 뺀 것 이다.속성 범 위 는 귀 일 화 를 바탕 으로 속성 분산 으로 나 뉜 다.
       2. 특징 간 의 협 방 차 행렬 을 계산한다.이 행렬 은 n * n 의 대칭 행렬 이다.
       3. 협 방 차 행렬 의 특징 값 과 특징 벡터 를 계산한다.
       4. 특징 값 을 큰 것 에서 작은 것 으로 정렬
       5. 맨 위의 N 개 특징 벡터 유지
       6. 원 데 이 터 를 N 개의 특징 벡터 로 구 성 된 새로운 공간 에 투사 합 니 다.
3. 코드 예시
         여기 서 협 방 차 행렬 covMat 는 n * n 이 고 N 개의 특징 벡터 로 구 성 된 행렬 은 redEigVects 는 n * N 차원 이 며, 내 려 간 데 이 터 는 lowDDataMat 는 m * N 차원 이 고, reconMat 는 내 려 간 후에 n 차원 으로 복원 한 데이터 이다.
from numpy import *
import matplotlib.pyplot as plt
def loadDataSet(fileName, delim='\t'):
    fr = open(fileName)
    stringArr=[line.strip('
').split(delim) for line in fr.readlines()] fr.close() datArr=[map(float,line) for line in stringArr] return mat(datArr) def pca(dataMat, topNfeat=9999): meanVals = mean(dataMat, axis=0) meanRemoved = dataMat-meanVals covMat=cov(meanRemoved, rowvar=0) print covMat eigVals, eigVects=linalg.eig(mat(covMat)) eigValInd=argsort(eigVals) eigValInd=eigValInd[:-(topNfeat+1):-1] redEigVects=eigVects[:,eigValInd] lowDDataMat=meanRemoved*redEigVects reconMat=(lowDDataMat*redEigVects.T)+meanVals return lowDDataMat, reconMat dataMat=loadDataSet("testSet.txt") low, rec=pca(dataMat,1) i=0 while i<shape(dataMat)[0]: print dataMat[i,:],"_",rec[i,:] i=i+1

testset. txt 의 데 이 터 는 다음 과 같 습 니 다.
1.658985
4.285136
-3.453687
3.424321
4.838138
-1.151539
-5.379713
-3.362104
0.972564
2.924086
-3.567919
1.531611
0.450614
-3.302219
-3.487105
-1.724432
2.668759
1.594842
-3.156485
3.191137
3.165506
-3.999838
-2.786837
-3.099354

좋은 웹페이지 즐겨찾기