혼자 공부하는 머신러닝 + 딥러닝의 Chapter 6을 공부하면서 정리한 내용을 기반으로 작성하였다.
06-1. 군집 알고리즘
타깃데이터 즉, 미리 정한 정답은 없지만, 종류대로 모으고 분류할 수 있을까?
예를 들어, 고객들의 데이터를 그때 그때 받아서 같은 종류끼리 모아두는 것을 생각한다.
→ 비지도 학습
>> 이해해보자 (타깃데이터 즉 종류를 아는 상황을 가정)
- 사과, 바나나, 파인애플 사진을 분류해보고 싶다.
- 평균과의 오차값이 최대한 적은 샘플들을 모으면 된다.
- |픽셀값 - 해당 위치의 평균 픽셀값|의 합을 픽셀 개수로 나눠 평균을 구한다.
- 샘플 300개 있으므로, (1)의 값(각 샘플에 대한 평균값)이 300개 존재이다
- 여기서 오름차순으로 최초 100개 즉 작은 값 100개를 고른다
- 이 100개 같은 종류일 것이다!
06-2. k-평균 (k-means) 군집 알고리즘
→ 평균을 자동으로 찾아준다. 이 때의 평균값을 cluster center 또는 centroid라고 부른다.
k-평균 (k-means) 군집 알고리즘
1. 작동방식
- 랜덤으로 cluster center 정하고, 여기에 가까운 샘플을 하나의 cluster로 묶는다.
- cluster가 이전과 변동 없을 때까지 반복한다.
- cluster center 중심을 계산한다.
- 다시 여기에 가까운 샘플을 cluster로 묶는다.
2. 코드
from sklearn.cluster import KMeans
km = KMeans(n_clusters=3, random_state=42) # cluster 개수 미리 정해야 함
km.fit(fruits_2d) #타깃데이터 없으니 이대로 훈련
print(km.labels_) # 각 샘플이 어느 cluster로 들어갔는지
print(km.cluster_centers) #cluster centers
3. 속성
- km.labels : 각 샘플이 어느 cluster로 들어갔는지
- km.cluster_centers
- km.n_iter_ : 반복횟수
4. 메소드
- transform()
- predict() : 새로운 샘플에 대해 가장 가까운 cluster를 예측한다
최적의 k찾기
: cluster에 최대한 밀집될 수 있는 최적의 k를 찾아보자.
- elbow 방법 (최적의 k찾는 방법 중 하나)
- inertia(이너셔)
- 이니셔란, cluster에 속한 샘플과 cluster center 과의 거리의 제곱 합
- cluster의 샘플이 얼마나 밀집되어 있는지 알 수 있다.
- 이너셔가 작을수록 더 밀집되어 있다는 것
06-3. PCA(주성분 분석) 모델
특성이 많으면, 선형 모델의 성능이 높아지고, 훈련 데이터에 과대적합될 수 있다. |
차원 축소란 무엇일까? → 데이터를 가장 잘 나타내는 일부 특성을 선택한다. - 차원 축소를 통해, 데이터 크기를 줄일 수 있다. - 차원 축소를 통해, 지도학습 모델의 성능을 향상시킬 수있다. |
PCA(주성분 분석) 모델
→ PCA는 데이터에 있는 분산(데이터가 널리 퍼져있는 정도)이 큰 방향을 찾는 것이다.
1. 코드
from sklearn.decomposition import PCA
pca = PCA(n_components = 50)
pca.fit(fruits) # fruits : 100*100 2차원 배열의 샘플 여러개
2. PCA 클래스의 속성
- n_components :
하이퍼 파라미터- 객체를 만들 때,주성분 개수 지정할 수 있다.
- explained variance(설명된 분산)의 비율로 지정할 수 있다. 예를 들어, 0.5로 지정하면 explained variance의 50%에 달하는 주성분을 찾는다.
- n_components_ : PCA 클래스가 찾은 주성분 개수
- components_ : PCA 클래스가 찾은 주성분
- components_.shape로 확인 했을 때, (주성분 개수, 데이터의 특성 개수)를 반환한다.
- 즉, 첫 번째 차원은 주성분 개수, 두 번째 차원은 데이터의 특성 개수를 말한다.
- explained_variance_ratio_
- 각 주성분의 explained variance(설명된 분산) 비율
- explained variance(설명된 분산) : 주성분이 원본 데이터의 분산을 얼마나 잘 나타내는지 기록한 값
3. 메소드
- transform() : 데이터 차원 줄이기 (주성분 → 특성)
- inverse_transform()
- 원상 복구 (원본 데이터 재구성)
- 예를 들어, 50차원으로 축소했던 데이터를 전달받으면 원래 특성 개수인 10000개로 복원한다.
4. 다른 알고리즘과 함께 사용하기
- LogisticRegression (로지스틱 회귀 모델)를 가지고 미리 타깃데이터를 안 상태에서 분류하는데 쓸 수 있다.
- 차원 축소된 데이터와 타깃데이터를 가지고 교차검증을 한다.
- K-평균 알고리즘
- K-평균 알고리즘에 차원 축소된 데이터를 훈련시킨다(fit()함수 이용)
- K-평균 알고리즘과 차원 축소된 데이터를 이용해 cluster를 찾을 수 있다.
**참고
- 코랩에서 !로 시작하면 리눅스 shell 명령
- 100*100 픽셀 그림을 가로 10개, 세로 10개 그리기
# 서브그래프 만들기
# ratio 매개변수에 비례하여 커진다. ratio의 기본값은 1이다.
fig, axs = plt.subplots(rows, cols, figsize= (cols, rows), squeeze = FALSE)
for i in range(10):
for j in range(10):
axs[i,j].imshow(fruits[apple_index[i*10 + j]], cmap = ‘gray_r’) #열 고려
axs[i, j].axis(‘off’) #좌표축 그리지 않음
plt.show()
'머신러닝 > 혼공머신' 카테고리의 다른 글
[혼공머신] chapter 5. 결정트리 (0) | 2023.01.16 |
---|---|
[혼공머신] chapter 3. 회귀 - k최근접, 릿지/라쏘 (0) | 2022.12.01 |
[혼공머신] chapter 2. k-최근접 이웃 알고리즘 - 실습 (0) | 2022.11.24 |
[혼공머신] chapter 2. k-최근접 이웃 알고리즘 - 데이터전처리 (0) | 2022.11.24 |
[혼공머신] chapter 1. 머신러닝이란? (0) | 2022.11.17 |