1. 주성분 분석(PCA)
- 의미
- PCA(Principal Component Analysis) 는 차원 감소, 특징 추출, 데이터 시각화, 노이즈 감소와 같은 다양한 응용 분야에 널리 사용됩니다.
- 가장 유익한 기능을 식별하고 중복 정보를 제거하며 중요한 정보의 손실을 최소화하면서 데이터를 압축하는 데 도움이 됩니다.
2. PCA 수행과 관련된 단계
- 데이터 준비: 평균을 빼고 각 기능의 표준 편차로 나누어 데이터를 정규화합니다. 이 단계는 모든 기능이 동일한 척도에 있는지 확인합니다.
- 공분산 행렬 계산: 정규화된 데이터의 공분산 행렬을 계산합니다. 공분산 행렬은 데이터 세트의 서로 다른 기능 간의 관계를 나타냅니다.
- 고유값 및 고유벡터 계산: 공분산 행렬의 고유값과 해당 고유벡터를 계산합니다. 각 고유 벡터는 주성분을 나타내고 해당 고유 값은 해당 구성 요소가 설명하는 분산의 양을 나타냅니다.
- 주성분 선택: 고유값을 기준으로 고유 벡터를 내림차순으로 정렬합니다. 데이터에서 대부분의 분산을 설명하는 상위 k 고유 벡터(주성분)를 선택합니다. 일반적으로 상위 구성 요소는 분산의 상당 부분(예: 90% 이상)을 유지하도록 선택됩니다.
- 투영: 원본 데이터를 선택한 주성분에 투영하여 축소된 차원 표현을 얻습니다. 이것은 데이터 행렬의 전치를 선택한 고유 벡터와 곱함으로써 수행됩니다.
- Python에서 TensorFlow를 사용하여 주성분 분석(PCA)을 MNIST 데이터 세트에 적용하는 방법의 예
- 이 예제에서는 먼저 Fashion MNIST 데이터 세트를 로드하고 입력 이미지를 재구성합니다. 그런 다음 scikit-learn의 PCA 클래스를 사용하여 PCA를 수행합니다. 유지할 구성 요소 수를 100으로 지정합니다.
- 다음으로 학습된 PCA 모델을 사용하여 교육 및 테스트 데이터를 변환합니다. 그런 다음 변환된 데이터는 몇 개의 밀집 계층으로 TensorFlow 모델을 교육하는 데 사용됩니다. 모델은 변환된 데이터에서 컴파일, 학습 및 평가됩니다.필수 라이브러리(numpy, tensorflow, sklearn)를 가져오고 특정 요구 사항에 따라 추가 매개변수 또는 하이퍼 매개변수를 조정해야 합니다.
- 이 코드에서는 교육 및 평가에 사용할 수 있는 레이블(y_train 및 y_test)이 있다고 가정했습니다. 레이블이 없는 경우 그에 따라 코드를 수정해야 합니다.
- 필수 라이브러리(numpy, tensorflow, sklearn)를 가져오고 특정 요구 사항에 따라 추가 매개변수 또는 하이퍼 매개변수를 조정해야 합니다.
import numpy as np
import tensorflow as tf
from tensorflow.keras.datasets import fashion_mnist
from sklearn.decomposition import PCA
# Load the Fashion MNIST dataset
(x_train, _), (x_test, _) = fashion_mnist.load_data()
# Reshape and normalize the data
x_train = x_train.reshape(-1, 784) / 255.0
x_test = x_test.reshape(-1, 784) / 255.0
# Perform PCA
pca = PCA(n_components=100) # Specify the number of components to keep
pca.fit(x_train)
# Transform the data using the learned PCA model
x_train_pca = pca.transform(x_train)
x_test_pca = pca.transform(x_test)
# Print the explained variance ratio
print("Explained variance ratio:", np.sum(pca.explained_variance_ratio_))
# Create a new TensorFlow model
model = tf.keras.Sequential([
tf.keras.layers.Dense(256, activation='relu', input_shape=(100,)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')
])
# Compile and train the model
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train_pca, y_train, epochs=10, batch_size=32, validation_data=(x_test_pca, y_test))
# Evaluate the model
_, accuracy = model.evaluate(x_test_pca, y_test)
print("Test accuracy:", accuracy)
3. PCA 라이브러리 또는 패키지
- PCA 알고리즘 및 기능을 제공하는 소프트웨어 라이브러리 또는 패키지
- 라이브러리/패키지
- 일반적으로 효율적이고 최적화된 PCA 구현을 제공하므로 사용자가 처음부터 알고리즘을 구현하지 않고도 데이터에 PCA를 쉽게 적용할 수 있습니다
- 인기 있는 PCA용 라이브러리에는 Python의 scikit-learn, numpy 및 MATLAB이 있습니다
- 이러한 PCA 라이브러리는 PCA 모델 피팅, 데이터 변환, 고유값, 고유벡터 및 설명 분산 비율과 같은 중요한 특성 계산과 같은 작업을 수행하는 기능을 제공합니다. 또한 시각화, 차원 감소, 기능 추출과 같은 추가 기능을 제공할 수도 있습니다.
- PCA에서 "파라미터"
- PCA 알고리즘을 적용할 때 지정할 수 있는 설정이나 옵션을 의미
- 이러한 매개변수는 PCA 프로세스의 다양한 측면을 제어하고 얻은 결과에 영향을 줄 수 있습니다
- PCA에서 일반적으로 사용되는 몇 가지 매개변수
- n_components: 이 매개변수는 유지할 주성분의 수 또는 축소된 데이터의 원하는 차원을 결정합니다. 데이터가 투영되는 하위 공간의 차원을 지정합니다.
- whiten: True로 설정하면 이 매개변수는 데이터에 백색화 변환을 적용하여 투영된 데이터의 분산을 정규화합니다.
- svd_solver: 이 매개변수는 PCA의 핵심 단계인 SVD(Singular Value Decomposition)에 사용되는 알고리즘을 결정합니다. 'auto', 'full', 'arpack' 또는 'randomized'와 같은 값을 가질 수 있으며 각각 속도와 메모리 사용량 측면에서 장단점이 있습니다.
- explained_variance_ratio_: 이것은 각 주성분이 설명하는 분산의 양을 나타내는 PCA 모델의 속성입니다. 유지할 구성 요소 수를 결정하는 데 도움이 될 수 있습니다.
- 라이브러리/패키지
4. SVM에서 PCA
- SVM에서 PCA란한편, SVM (Support Vector Machines)은 분류 및 회귀 작업에 사용되는 지도 학습 알고리즘입니다. SVM은 레이블이 지정된 훈련 데이터를 기반으로 다른 클래스를 분리하거나 연속적인 값 예측에 사용되는 최적의 초평면을 찾습니다.
- 차원 축소: SVM에 입력되는 데이터가 때로는 많은 특성 또는 차원을 가질 수 있습니다. 이는 계산 복잡성을 증가시키고 과적합 가능성을 초래할 수 있습니다. PCA는 입력 데이터의 차원을 줄이는 전처리 단계로 적용될 수 있습니다. 데이터의 분산을 가장 잘 설명하는 주요 주성분(subset of principal components)을 선택함으로써 PCA는 효과적으로 특성 공간을 축소시킵니다.
- PCA와 SVM은 기계 학습 파이프라인에서 따로 사용되는 기법입니다. PCA를 SVM과 함께 적용하는 방법은 다음과 같습니다:
- PCA (Principal Component Analysis)는 기계 학습과 데이터 분석에서 일반적으로 사용되는 차원 축소 기법입니다. 이 기법은 고차원 데이터를 낮은 차원의 표현으로 변환하는 것을 목표로 하면서도 가장 중요한 정보를 보존합니다.
궁금증
- 주성분 분석을 사용하여 이미지를 압축시킬 때 기밀 데이터를 어느 성분에 넣는게 좋은가?
(복원할 때도 기밀데이터가 잘 나오도록)
- 압축할 때 기밀 데이터가 들어갈 때는?
- 주성분 분석(PCA)을 사용하여 이미지를 압축할 때 기밀 데이터를 가장 낮은 주성분에 넣는 것이 좋습니다. 가장 낮은 주성분은 이미지의 대부분의 변동을 설명하는 데 사용되는 반면, 가장 높은 주성분은 이미지의 세부 사항을 설명하는 데 사용됩니다. 따라서 기밀 데이터를 가장 낮은 주성분에 넣으면 이미지의 대부분의 변동을 유지하면서도 기밀 데이터를 숨길 수 있습니다.
- 예를 들어, 100개의 주성분으로 구성된 이미지가 있다고 가정해 보겠습니다. 기밀 데이터를 가장 낮은 10개의 주성분에 넣으면 이미지의 90%의 변동을 유지하면서도 기밀 데이터를 숨길 수 있습니다.
- PCA를 사용하여 이미지를 압축할 때 기밀 데이터를 보호하는 데 도움이 되는 몇 가지 팁이 있습니다.
- 가장 낮은 주성분에 기밀 데이터를 넣으십시오.
- 기밀 데이터를 넣는 주성분의 수를 제한하십시오.
- 기밀 데이터를 암호화하십시오.
- 이러한 팁을 따르면 PCA를 사용하여 이미지를 압축할 때 기밀 데이터를 보호할 수 있습니다.
728x90
'공부 > 데이터 수집과 관리' 카테고리의 다른 글
[NLP] 자연어처리(NLP), 워드클라우드(Word Cloud: Python) (0) | 2023.06.23 |
---|---|
[클라우드 컴퓨팅] 온프레미스와 클라우드들(SaaS, PaaS, IaaS) (0) | 2023.06.23 |
[Rapid Miner] 래피드마이너를 활용하여 클러스터링 수행 (0) | 2023.06.23 |
[Rapid Miner] 래피드마이너를 활용하여 데이터 분석 (0) | 2023.05.01 |
[RapidMiner] 래피드마이너 설치 가이드 (0) | 2023.04.26 |