PCA 다운

9975 단어 특징 공학
PCA 간소화 데이터
통속 적 인 이해: 가장 주요 한 특징 을 찾 아 분석 예 를 들 어 한 사람의 지적 상황 을 고찰 하고 수학 성적 을 직접 보면 된다. 예 를 들 어 텔레비전 을 보면 모니터 의 백만 화소 를 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()

좋은 웹페이지 즐겨찾기