logo

Python을 이용한 주성분 분석

주요 구성 요소 분석 기본적으로 상관관계가 있을 수 있는 변수의 관측값 집합을 선형적으로 상관되지 않은 변수의 값 집합으로 변환하는 통계 절차입니다.

각 주성분은 대부분의 여전히 사용 가능한 분산을 설명하고 이러한 모든 주성분이 서로 직교하는 방식으로 선택됩니다. 모든 주성분에서 첫 번째 주성분은 최대 분산을 갖습니다.

PCA의 용도:



  1. 데이터에서 변수 간의 상호 관계를 찾는 데 사용됩니다.
  2. 데이터를 해석하고 시각화하는 데 사용됩니다.
  3. 변수의 수가 감소하여 추가 분석이 더 간단해졌습니다.
  4. 이는 집단 간의 유전적 거리와 관련성을 시각화하는 데 자주 사용됩니다.


이는 기본적으로 정사각형 대칭 행렬에서 수행됩니다. 이는 순수 제곱합과 교차곱 행렬 공분산 행렬 또는 상관 행렬일 수 있습니다. 개인분산의 차이가 클 경우에는 상관행렬을 사용합니다.

PCA의 목표:

피트 데이비슨 국적
  1. 이는 기본적으로 많은 수의 변수에서 더 적은 수의 요인으로 속성 공간을 줄이는 비종속 절차입니다.
  2. PCA는 기본적으로 차원 축소 프로세스이지만 차원을 해석할 수 있다는 보장은 없습니다.
  3. 이 PCA의 주요 작업은 원래 변수가 원금 금액과 가장 높은 상관 관계를 갖는 것을 기반으로 더 큰 세트에서 변수의 하위 집합을 선택하는 것입니다.
  4. 패턴 식별: PCA는 원본 데이터에서 명확하지 않을 수 있는 변수 간의 패턴이나 관계를 식별하는 데 도움이 됩니다. PCA는 데이터의 차원을 줄임으로써 데이터를 이해하고 해석하는 데 유용할 수 있는 기본 구조를 밝힐 수 있습니다.
  5. 특징 추출: PCA는 원래 변수보다 더 유익하거나 관련성이 높은 변수 세트에서 특징을 추출하는 데 사용할 수 있습니다. 그런 다음 이러한 기능을 모델링이나 기타 분석 작업에 사용할 수 있습니다.
  6. 데이터 압축: PCA는 가능한 한 많은 정보를 유지하면서 데이터를 표현하는 데 필요한 변수 수를 줄여 대규모 데이터 세트를 압축하는 데 사용할 수 있습니다.
  7. 노이즈 감소: PCA는 데이터의 노이즈 부분에 해당하는 주요 구성 요소를 식별하고 제거하여 데이터 세트의 노이즈를 줄이는 데 사용할 수 있습니다.
  8. 시각화: PCA를 사용하면 고차원 데이터를 저차원 공간에서 시각화하여 보다 쉽게 ​​해석하고 이해할 수 있습니다. 데이터를 주성분에 투영함으로써 변수 간의 패턴과 관계를 보다 쉽게 ​​시각화할 수 있습니다.

주축 방법: PCA는 기본적으로 변수의 선형 조합을 검색하여 변수에서 최대 분산을 추출할 수 있습니다. 이 프로세스가 완료되면 이를 제거하고 기본적으로 직교 요인으로 이어지는 남은 분산의 최대 비율에 대한 설명을 제공하는 또 다른 선형 조합을 검색합니다. 이 방법에서는 전체 분산을 분석합니다.

고유벡터: 행렬 곱셈 후에도 평행을 유지하는 0이 아닌 벡터입니다. Mx와 x가 평행할 경우 x가 차원 r*r을 갖는 행렬 M의 차원 r의 고유벡터라고 가정해 보겠습니다. 그런 다음 고유벡터와 고유값을 얻으려면 x와 A가 모두 알려지지 않은 Mx=Ax를 풀어야 합니다.
고유 벡터에서 주성분은 변수의 공통 분산과 고유 분산을 모두 표시한다고 말할 수 있습니다. 기본적으로 전체 분산과 모든 구성 요소의 상관 관계를 재현하려는 분산 중심 접근 방식입니다. 주성분은 기본적으로 특정 직교 차원의 분산을 설명하기 위해 기여도로 가중된 원래 변수의 선형 조합입니다.

자신의 가치: 기본적으로 특징적인 뿌리로 알려져 있습니다. 기본적으로 해당 요인에 의해 설명되는 모든 변수의 분산을 측정합니다. 고유값 비율은 변수에 대한 요인의 설명적 중요성의 비율입니다. 요인이 낮으면 변수 설명에 덜 기여하는 것입니다. 간단히 말해서, 요인에 의해 설명된 전체 데이터베이스의 변동량을 측정합니다. 요인의 고유값은 모든 변수에 대한 요인 로딩 제곱의 합으로 계산할 수 있습니다.

C의 ASCII 테이블

이제 Python을 이용한 주성분 분석에 대해 알아보겠습니다.

구현에 사용되는 데이터 세트를 얻으려면 여기 .

1 단계: 라이브러리 가져오기

Java의 arraylist 정렬
파이썬
# importing required libraries import numpy as np import matplotlib.pyplot as plt import pandas as pd>

2 단계: 데이터 세트 가져오기

데이터 세트를 가져오고 데이터 분석을 위해 데이터 세트를 X 및 y 구성 요소로 배포합니다.

파이썬
# importing or loading the dataset dataset = pd.read_csv('wine.csv') # distributing the dataset into two components X and Y X = dataset.iloc[:, 0:13].values y = dataset.iloc[:, 13].values>


3단계: 데이터 세트를 훈련 세트와 테스트 세트로 분할

파이썬
# Splitting the X and Y into the # Training set and Testing set from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)>

4단계: 기능 스케일링

표준 척도 맞추기와 같은 훈련 및 테스트 세트에 대한 사전 처리 부분을 수행합니다.

선주문 순회
파이썬
# performing preprocessing part from sklearn.preprocessing import StandardScaler sc = StandardScaler() X_train = sc.fit_transform(X_train) X_test = sc.transform(X_test)>

5단계: PCA 기능 적용

분석을 위해 훈련 및 테스트 세트에 PCA 기능을 적용합니다.

파이썬
# Applying PCA function on training # and testing set of X component from sklearn.decomposition import PCA pca = PCA(n_components = 2) X_train = pca.fit_transform(X_train) X_test = pca.transform(X_test) explained_variance = pca.explained_variance_ratio_>

6단계: 훈련 세트에 로지스틱 회귀 피팅

파이썬
# Fitting Logistic Regression To the training set from sklearn.linear_model import LogisticRegression classifier = LogisticRegression(random_state = 0) classifier.fit(X_train, y_train)>

산출:

7단계: 테스트 세트 결과 예측

파이썬
# Predicting the test set result using  # predict function under LogisticRegression  y_pred = classifier.predict(X_test)>


8단계: 혼동 행렬 만들기

파이썬
# making confusion matrix between # test set of Y and predicted value. from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred)>


9단계: 훈련 세트 결과 예측

파이썬
# Predicting the training set # result through scatter plot  from matplotlib.colors import ListedColormap X_set, y_set = X_train, y_train X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01), np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('yellow', 'white', 'aquamarine'))) plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max()) for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1], color = ListedColormap(('red', 'green', 'blue'))(i), label = j) plt.title('Logistic Regression (Training set)') plt.xlabel('PC1') # for Xlabel plt.ylabel('PC2') # for Ylabel plt.legend() # to show legend # show scatter plot plt.show()>

산출:

적대적 검색

10단계: 테스트 세트 결과 시각화

파이썬
# Visualising the Test set results through scatter plot from matplotlib.colors import ListedColormap X_set, y_set = X_test, y_test X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01), np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('yellow', 'white', 'aquamarine'))) plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max()) for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1], color = ListedColormap(('red', 'green', 'blue'))(i), label = j) # title for scatter plot plt.title('Logistic Regression (Test set)') plt.xlabel('PC1') # for Xlabel plt.ylabel('PC2') # for Ylabel plt.legend() # show scatter plot plt.show()>

새로운 주성분 공간에서 데이터를 시각화할 수 있습니다.

파이썬
# plot the first two principal components with labels y = df.iloc[:, -1].values colors = ['r', 'g'] labels = ['Class 1', 'Class 2'] for i, color, label in zip(np.unique(y), colors, labels): plt.scatter(X_pca[y == i, 0], X_pca[y == i, 1], color=color, label=label) plt.xlabel('Principal Component 1') plt.ylabel('Principal Component 2') plt.legend() plt.show() 7>

이것은 Python을 사용하여 PCA를 수행하는 방법에 대한 간단한 예입니다. 이 코드의 출력은 처음 두 개의 주성분과 설명된 분산 비율의 산점도입니다. 적절한 수의 주성분을 선택하면 데이터 세트의 차원을 줄이고 데이터에 대한 이해를 높일 수 있습니다.