PCA 다운
9975 단어 특징 공학
통속 적 인 이해: 가장 주요 한 특징 을 찾 아 분석 예 를 들 어 한 사람의 지적 상황 을 고찰 하고 수학 성적 을 직접 보면 된다. 예 를 들 어 텔레비전 을 보면 모니터 의 백만 화소 를 3 차원 이미지 중점 으로 전환시킨다. 즉, 강 차원 기술 주성 분 분석 (PCA) 은 반도체 데 이 터 를 강 차원 으로 처리한다.
강 차원 기술
1.
2.
3.
4. ---( )
몇 가지 서로 다른 차원 을 낮 추 는 방법: 1. 주성 분 분석 (Principal Component Analysis, PCA) 의 통속 적 인 이해: 가장 주요 한 특징 을 찾 아 분석 예 를 들 어 한 사람의 지적 상황 을 고찰 하고 수학 성적 을 직접 보면 된다. 원리 소개: PCA 에서 데 이 터 는 원래 의 좌표계 에서 새로운 좌표계 로 바 뀌 었 다.새 좌표계 의 선택 은 데이터 자체 에 의 해 결정 된다. 첫 번 째 새 좌표 축 은 원시 데이터 에서 방 차 가 가장 큰 방향 을 선택 하고 두 번 째 새 좌표 축 의 선택 은 첫 번 째 좌표 축 과 교차 하 며 가장 큰 방 차 를 가 진 방향 이다.표지 축 에 있 기 때문에 남 은 좌표 축 즉 데 이 터 를 내 려 놓 는 것 을 무시 할 수 있다.
2. (Factor Analysis)
: :
: 3 ( ),
:
,
3. (Independent Component Analysis, ICA)
: ICA ICA
: KTV ? ICA (2 ( / ))
ICA N ,
PCA
PCA 주성 분 분석 장점: 데이터 의 복잡성 식별 을 낮 추 는 가장 중요 한 여러 가지 특징 단점: 꼭 필요 하지 않 고 유용 한 정보 적용 데이터 유형: 수치 형 데이터
PCA 는 어떻게 차원 을 낮 춥 니까?이동 좌표 축 1.1 이동 좌표 축 첫 번 째 좌표 축 은 데 이 터 를 덮 는 최대 분산 위치 로 회전 합 니 다 - – > 데이터 의 최대 분산 은 데이터 의 가장 중요 한 정 보 를 제공 합 니 다. 두 번 째 좌표 축 은 데이터 의 차 이 를 덮 는 좌표 축 입 니 다.
?
SVM
PCA SVM
PCA 강 차원 의 기본 과정 주성 분 분석 첫 번 째 주성 분 은 데이터 차이성 이 가장 큰 방향 에서 추출 한 것 이다. 두 번 째 주성 분 은 데이터 차이성 이 큰 방향 에서 나 온 것 이 고 이 방향 은 첫 번 째 주성 분 방향 과 교차 하여 데이터 세트 의 협 방 차 행렬 과 특징 치 분석 을 통 해 이런 주성 분 의 값 을 구 할 수 있다.
N N
N
특징 치 분석 은 선형 대수 중의 한 분야 로 데이터 의 일반 형식 을 통 해 데이터 의 '진실' 구 조 를 밝 힐 수 있다. 즉, 흔히 말 하 는 특징 벡터 와 특징 치 Av =λv 에서 v 는 특징 벡터 이다.λ특징 값 특징 값 은 모두 간단 한 스칼라 값 이기 때문에 이 공식 은 특징 벡터 v 가 특정한 행렬 A 에 의 해 왼쪽 곱 하면 특정한 스칼라 와 같다 는 것 을 나타 낸다.λ곱 하기 v A v =λ v 에서 v 는 특징 벡터 이다.λ 특징 값 특징 값 은 모두 간단 한 스칼라 값 이기 때문에 이 공식 은 특징 벡터 v 가 특정한 행렬 A 에 의 해 왼쪽 곱 하면 특정한 스칼라 와 같다 는 것 을 나타 낸다.λ 곱 하 다
PCA 작업 원리 1. 첫 번 째 주성 분 의 방향, 즉 데이터 편차 가 가장 큰 방향 을 찾아낸다. 2. 두 번 째 주성 분 의 방향, 즉 데이터 편차 가 큰 방향 을 찾아내 고 이 방향 은 첫 번 째 주성 분 방향 과 교차한다 (2 차원 공간 이 라면 수직 이 라 고 한다)3. 이러한 방식 으로 모든 주성 분 방향 을 계산한다. 4. 데이터 세트 의 협 방 차 행렬 의 특징 값 과 특징 벡터 를 통 해 이러한 주성 분 의 값 을 얻 을 수 있다. 5. 협 방 차 행렬 의 특징 값 과 특징 벡터 를 얻 으 면 가장 큰 N 개의 특징 을 유지 할 수 있다. 이런 특징 벡터 도 N 개의 가장 중요 한 특징 을 가 진 진실 한 구 조 를 제시 하면 데 이 터 를 곱 할 수 있다.N 개의 특징 벡터 를 새로운 공간 으로 전환 합 니 다.
?
1.
2.
특징 값 과 특징 벡터 가 대수 와 기하학 적 차원 에서 의 실제 의 미 는 무엇 입 니까?Ax = cx A 는 매트릭스 x 를 특징 벡터 c 로 특징 값 매트릭스 A 곱 하기 x 는 벡터 x 에 대해 1 차 전환 (회전 또는 스 트 레 칭) 을 하 는 것 은 선형 변환 이 고 이 전환 의 효 과 는 상수 곱 하기 벡터 x (즉 스 트 레 칭 만 하 는 것) 이다. 보통 특징 값 과 특징 벡터 를 구 하 는 것 은 이 행렬 이 어떤 벡터 (당연히 특징 벡터) 를 스 트 레 칭 만 할 수 있 는 지 를 구 하 는 것 이다.스 트 레 칭 정도 (특징 값 크기)
의미: 하나의 행렬 이 어떤 측면 에서 가장 큰 효 과 를 낼 수 있 는 지 알 고 발생 하 는 모든 특징 벡터 (일반 연구 특징 치가 가장 큰 몇 개) 에 따라 분류 토론 과 연 구 를 한다.
알고리즘 구현 PCA 주성 분 분석 데이터 에서 전 N 개 주성 분 으로 전환 하 는 위조 코드 는 대체적으로 다음 과 같다. 평균 값 계산 협 방 차 행렬 계산 협 방 차 행렬 의 특징 값 과 특징 벡터 를 제거 하고 특징 값 을 큰 것 에서 작은 것 으로 정렬 하여 맨 위의 N 개 특징 벡터 를 보존 하여 데 이 터 를 상기 N 개 특징 벡터 로 구축 하 는 새로운 공간 으로 전환시킨다.
코드 구현:
import numpy as np
print(__doc__)
"""
PCA
N :
N
N
"""
# def loadDataSet(fileName, delim='\t'):
# fr = open(fileName)
# stringArr = [line.strip().split(delim) for line in fr.readlines()]
# datArr = [map(float, line) for line in stringArr]
# return mat(datArr)
def load_data(filename, delim='\t'):
fr = open(filename)
data_set = list()
string_set = [line.strip().split(delim) for line in fr.readlines()]
# print('string_set', string_set)
for line in string_set:
data_set.append(list(map(float, line)))
return np.mat(data_set)
def pca(data_set, top_features=999999999):
"""
principal component analysis
:param data_set:
:param top_features: N
:return:
low_data_mat
recon_mat
"""
# step1
data_mean = np.mean(data_set, axis=0)
# print('data_mean', data_mean)
mean_removed = data_set - data_mean
cov_mat = np.cov(mean_removed, rowvar=0)
# print('cov mat', cov_mat)
# step2
eig_vals, eig_vects = np.linalg.eig(np.mat(cov_mat))
print('eig vals', eig_vals)
print('eig_vects', eig_vects)
# step3 N
eig_vals_index = np.argsort(eig_vals) #
# print('eig_vals_index', eig_vals_index)
eig_vals_index = eig_vals_index[:-(top_features + 1): -1] #
print('eig_vals_index', eig_vals_index)
read_eig_vects = eig_vects[:, eig_vals_index] # N
# step4
low_data_mat = mean_removed * read_eig_vects # 1000x2 * 2x1 = 1000x1
recon_mat = (low_data_mat * read_eig_vects.T) + data_mean
# print('low_data_mat', low_data_mat)
# print('recon_mat', recon_mat)
return low_data_mat, recon_mat
def mat_fig(data_set, recon_mat):
import matplotlib.pyplot as plt
figure = plt.figure()
ax = figure.add_subplot(111)
ax.scatter(data_set[:, 0].flatten().A[0], data_set[:, 1].flatten().A[0], marker='^', s=90)
ax.scatter(recon_mat[:, 0].flatten().A[0], data_set[:, 1].flatten().A[0], marker='o', s=50, c='r')
# figure.show()
plt.show()
def replace_nan_with_mean():
data_set = load_data('secom.data', ' ')
num_feature = np.shape(data_set)[1]
for i in range(num_feature):
mean_val = np.mean(data_set[np.nonzero(~np.isnan(data_set[:, i].A))[0], i])
data_set[np.nonzero(np.isnan(data_set[:, i].A))[0], i] = mean_val
return data_set
def main():
# filename = 'testSet.txt'
# data_set = load_data(filename)
# print('data_set', data_set)
# low_data_mat, recon_mat = pca(data_set, top_features=1)
# print(' ', np.shape(low_data_mat))
# print('low_data_mat', low_data_mat)
# print(' recon_mat', recon_mat)
# mat_fig(data_set, recon_mat)
data_set = replace_nan_with_mean()
print('data_set', data_set)
if __name__ == '__main__':
main()