2013-11-15 2 views
6

저는 kaggle.com's digit recognizer competition을 사용하여 파이썬과 scikit-learn을 시도하고 있습니다. 학습 데이터에서 라벨을 제거한 후PCA 수행 전후의 데이터 크기

, 나는 다음과 같이리스트로 CSV의 각 행을 추가

for row in csv: 
    train_data.append(np.array(np.int64(row))) 

나는 테스트 데이터에 대해 동일한 않습니다. (? 및 피쳐 추출)

def preprocess(train_data, test_data, pca_components=100): 
    # convert to matrix 
    train_data = np.mat(train_data) 

    # reduce both train and test data 
    pca = decomposition.PCA(n_components=pca_components).fit(train_data) 
    X_train = pca.transform(train_data) 
    X_test = pca.transform(test_data) 

    return (X_train, X_test) 

I는 다음 KNN 분류를 생성하고 X_train 데이터로 적합하고을 이용 예측을

I는 측정 환원을 수행하기 위해 PCA이 데이터 처리를 미리 X_test 데이터입니다.

이 방법을 사용하면 약 97 %의 정확도를 얻을 수 있습니다.

내 질문하기 전에 데이터의 차원에 관한 것입니다 및 PCA가

을 수행 한 후 train_dataX_train의 크기는 무엇인가?

구성 요소의 수는 출력의 차원에 어떤 영향을 줍니까? 그들은 똑같은가요?

답변

11

PCA 알고리즘은 데이터의 공분산 행렬의 고유 벡터를 찾습니다. 고유 벡터 란 무엇입니까? 아무도 모른다. 그리고 아무도 걱정하지 않는다 (단지 농담한다!). 중요한 것은 첫 번째 고유 벡터가 데이터가 가장 큰 분산 (직관적으로 : 확산)을 따르는 방향과 평행 한 벡터라는 것입니다. 두 번째는 최대 스프레드 측면에서 두 번째로 좋은 방향을 나타냅니다. 또 다른 중요한 사실은이 벡터들이 서로 직각이어서 basis을 형성한다는 것입니다.

pca_components 매개 변수는 많은 최고의 기저 벡터가 당신을 얼마나 관심이 알고리즘을 알려줍니다 그래서, 당신은 100을 통과하면 당신이 (통계는 말할 것입니다 : 설명) 설명 100 기저 벡터를 얻을 것을 의미합니다. 대부분의 데이터의 분산.

transform 함수 변환 (srsly?;))이 예에서 선택된 PCA 성분 (의해 형성된 기준에 기초 원래의 데이터 - 상기 제 가장100 벡터). 이 점을 회전되어 점의 일부가 무시되는 점의 구름으로 시각화 할 수 있습니다. 의견에서 Jaime에 의해 올바르게 지적 된 바와 같이, 이것은 새로운 기준에 projecting the data과 동일합니다.

3D 케이스의 경우 첫 번째 2 고유 벡터로 구성된 기초를 얻으려면 다시 3D 점 구름이 먼저 회전되므로 가장 많은 분산이 좌표 축과 평행합니다. 그런 다음 분산이 가장 작은 축을 버리고 2D 데이터를 남깁니다.

직접 질문에 대답하십시오 : 예, 원하는 PCA 구성 요소의 번호는 출력 데이터의 차원입니다 (변환 후).