최근에 훌륭한 PCA에 대해 배웠으며 scikit-learn documentation에 요약 된 예를 수행했습니다 .
분류 목적으로 새 데이터 포인트에 PCA를 적용하는 방법을 알고 싶습니다.
PCA를 2 차원 평면 (x, y 축)으로 시각화 한 후 한 점은 한 분류가되고 다른 한 분류는 분류 할 수 있도록 데이터 점을 구분하기 위해 선을 그릴 수 있습니다. 이 "경계"를 그리고 새로운 데이터 포인트에 어떻게 적용합니까?
최근에 훌륭한 PCA에 대해 배웠으며 scikit-learn documentation에 요약 된 예를 수행했습니다 .
분류 목적으로 새 데이터 포인트에 PCA를 적용하는 방법을 알고 싶습니다.
PCA를 2 차원 평면 (x, y 축)으로 시각화 한 후 한 점은 한 분류가되고 다른 한 분류는 분류 할 수 있도록 데이터 점을 구분하기 위해 선을 그릴 수 있습니다. 이 "경계"를 그리고 새로운 데이터 포인트에 어떻게 적용합니까?
답변:
PCA는 분류 기가 아닌 치수 축소 도구입니다. Scikit-Learn에서 모든 분류 자와 추정기는 PCA가하지 않는predict
방법을 가지고 있습니다 . PCA 변환 된 데이터에 분류자를 맞춰야합니다. Scikit-Learn에는 많은 분류 기가 있습니다. 다음은 PCA 변환 데이터에서 의사 결정 트리 를 사용하는 예입니다 . 의사 결정 트리 분류기를 선택했습니다. 아이리스 데이터 세트의 경우와 같이 둘 이상의 클래스가있는 데이터에 적합합니다.
from sklearn.decomposition import PCA
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
# load data
iris = load_iris()
# initiate PCA and classifier
pca = PCA()
classifier = DecisionTreeClassifier()
# transform / fit
X_transformed = pca.fit_transform(iris.data)
classifier.fit(X_transformed, iris.target)
# predict "new" data
# (I'm faking it here by using the original data)
newdata = iris.data
# transform new data using already fitted pca
# (don't re-fit the pca)
newdata_transformed = pca.transform(newdata)
# predict labels using the trained classifier
pred_labels = classifier.predict(newdata_transformed)
SciKit learn에는 Pipeline 이라는 편리한 도구가있어 변압기와 최종 분류기를 함께 연결할 수 있습니다.
# you can make this a lot easier using Pipeline
from sklearn.pipeline import Pipeline
# fits PCA, transforms data and fits the decision tree classifier
# on the transformed data
pipe = Pipeline([('pca', PCA()),
('tree', DecisionTreeClassifier())])
pipe.fit(iris.data, iris.target)
pipe.predict(newdata)
이는 교차 검증을 수행 할 때 테스트 데이터 세트에서 파이프 라인의 모든 단계를 실수로 다시 맞추는 것을 방지하므로 특히 유용합니다.
from sklearn.cross_validation import cross_val_score
print cross_val_score(pipe, iris.data, iris.target)
# [ 0.96078431 0.90196078 1. ]
그런데 좋은 분류 결과를 얻기 위해 PCA를 사용할 필요조차 없습니다. iris 데이터 세트에는 많은 차원이 없으며 의사 결정 트리는 변환되지 않은 데이터에서 이미 잘 수행됩니다.
새 데이터에 PCA를 적용하려면 먼저 일부 훈련 데이터 세트에 모델을 맞아야합니다. 물어볼 모델은 무엇입니까? 이것은 데이터 세트에서 뺀 평균 벡터, 각 데이터 벡터를 "미백"하는 데 사용 된 분산 및 학습 된 매핑 매트릭스입니다. 따라서 훈련 데이터와 동일한 공간에 새 데이터 세트를 매핑하려면 먼저 평균을 빼고 희게 한 다음 매핑 행렬로 매핑하십시오.