일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- modern c++
- SECS-II
- Spring
- Computer Science
- Gem
- C++
- SECS
- 프로그래머스
- Baekjoon
- regression
- 회원가입
- 스포티파이
- Spring JPA
- Spotify Api
- python
- MYSQL
- SECS/GEM
- SWEA
- c
- 백준
- spotify
- SW Expert Academy
- java
- CS
- 회귀
- programmers
- 비트겟
- spring boot
- 파이썬
- 자바
Archives
- Today
- Total
비버놀로지
[K-Means 클러스터링] PCA 차원축소 본문
728x90
PCA 차원축소
주성분 분석(Principal Component Analysis, PCA)은 고차원 데이터를 저차원의 데이터로 변환하는 알고리즘입니다.
13차원의 와인 데이터셋을 2차원으로 변환해보겠습니다.
sklearn.decomposition.PCA
PCA를 사용하기 위하여 scikit-learn에 구현된 함수를 호출합니다. PCA() 함수를 이용해 쉽게 PCA를 적용할 수 있습니다.
다음은 13차원의 데이터 X를 2차원으로 줄이는 코드입니다. 이때 X의 shape은 (n, 13) 형식이 되어야 합니다.
pca = sklearn.decomposition.PCA(n_components=2)
pca.fit(X)
pca_array = pca.transform(X)
실습에 사용된 와인 데이터는 UCI Machine Learning Repository의 Wine Data Set에서 받을 수 있습니다.
실습
이번 실습에서는 와인 데이터를 입력받아 PCA를 통해 2차원으로 줄인 뒤, 이것을 matplotlib을 이용해 출력하는 연습해보겠습니다.
data/wine.csv에 와인 데이터가 준비되어 있습니다. 각 행과 열은 각각 와인과 와인의 특성을 나타냅니다.
import sklearn.decomposition
import matplotlib.pyplot as plt
import numpy as np
import elice_utils
import csv
def main():
X, attributes = input_data()
#print(X)
#print(X.shape)
pca_array = normalize(X)
#print(X)
pca, pca_array = run_PCA(X, 2)
visualize_2d_wine(pca_array)
def input_data():
X = []
attributes = []
with open('data/attributes.txt') as fp:
attributes = fp.readlines()
attributes = [x for x in attributes]
#print(attributes)
csvreader = csv.reader(open("data/wine.csv"))
for line in csvreader:
float_numbers = [float(x) for x in line]
X.append(float_numbers)
#print(line)
return np.array(X), attributes
def run_PCA(X, num_components):
pca = sklearn.decomposition.PCA(n_components=num_components)
pca.fit(X)
pca_array = pca.transform(X)
#print(pca_array)
return pca, pca_array
def normalize(X):
'''
각각의 feature에 대해,
178개의 데이터에 나타나는 해당하는 feature의 값이 최소 0, 최대 1이 되도록
선형적으로 데이터를 이동시킵니다.
'''
for i in range(X.shape[1]):
X[:,i] = X[:,i] - np.min(X[:,i])
X[:,i] = X[:,i] / np.max(X[:,i])
return X
def visualize_2d_wine(X):
'''X를 시각화하는 코드를 구현합니다.'''
plt.scatter(X[:,0],X[:,1])
plt.savefig("image.png")
elice_utils.send_image("image.png")
if __name__ == '__main__':
main()
728x90
'인공지능 머신러닝' 카테고리의 다른 글
[K-Means 클러스터링] 이미지 색상 수 줄이기 (0) | 2022.11.04 |
---|---|
[K-Means 클러스터링] K-Means 클러스터링 (0) | 2022.11.04 |
[나이브 베이즈 분류] 네이버 영화평 감정분석 (0) | 2022.11.03 |
[나이브 베이즈 분류] Bag of Words (0) | 2022.11.03 |
[나이브 베이즈 분류] 나이브 베이즈 분류기 (0) | 2022.11.03 |
Comments