기계 학습 고전 알고리즘 11 - PCA
우리 의 눈 은 최대 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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.