1️⃣ 머신러닝의 학습 방법
▪️ 지도학습
- 말 그대로 정답이 있는 데이터를 활용해 데이터를 학습시키는 것
- 입력 값이 주어지면 입력값에 대한 Label을 주어 학습시키며 대표적으로 분류, 회귀
- 예를 들어 3*3을 주고 라벨 데이터 셋을 입력 데이터 셋의 정답인 9를 알려주면 주어지지 않은 데이터 셋 9*3도 해결할 수 있음
▪️ 비지도학습
- 지도 학습과 달리 정답이 없는 데이터
- 비슷한 특징끼리 군집화하여 새로운 데이터에 대한 결과를 예측하는 방법
- 라벨링이 되어 있지 않은 데이터로부터 패턴이나 형태를 찾아야 하기 때문에 지도학습보다는 조금 더 난이도가 있음
- 비지도 학습의 대표적인 종류로는 클러스터링(Clustering), 차원 축소(Dimentionality Reduction)이 있음
2️⃣ 차원 축소
- 데이터에서 차원 = 변수의 수 (차원이 크다는 것은 변수가 많다는 것)
- 차원이 크면 시각화가 어렵고, 이해하기 어렵고, 분석하기도 어렵다
- 그래서 이 차원을 줄이는 다양한 기법들을 차원 축소라고 한다
▪️ PCA (주성분 분석, Principal Component Analysis)
- 대표적인 차원 축소 알고리즘
- PCA는 시각화를 위해 사용되며, 다차원의 시각화도 가능해진다
- 차원을 줄이기 위해서 축을 회전시켜 새로운 축을 찾아내는 방법이다
- 몇 개의 점은 서로 겹치게 되는 문제점이 발생하는데 이 경우 정보의 유실이 있을 수 있다
- 그러므로 분산이 가장 넓은 지역을 찾는다
- 분산이 가장 넓은 지역을 직선으로 표시해 점을 옮겨 점들이 퍼져있는 정도를 지켜준다
- 각 점들이 겹치지 않도록 하는 방법
Scree Plot
- PCA 분석 후 주성분 수를 선정하기 위해 고유값-주성분의 분산 변화를 보는 그래프
- 설명된 분산의 비율이 완만하게 감소되는 차원들은 버림
Python
seaborn.scatterplot(x='petal_length', y = 'petal_width', hue='species', data=iris)
from sklearn.decomposition import PCA
# 2차원으로 축소
pca = PCA(n_components=2) # n_components = 주성분의 갯수를 결정
pca.fit(x) # 각도를 찾음
# 축소된 차원으로 데이터를 변환
z = pca.transform(x)
# 축소된 차원을 이용해 시각화
# 4가지 변수를 잘 보여줄 수 있는 2차원으로 축소함
# 모든 변수가 다 반영이 되어있다
seaborn.scatterplot(
x=z[:, 0],
y=z[:, 1],
hue=iris.species
)
▪️ NMF (비음수 행렬 분해, Non-negative Matrix Factorization)
- PCA에 비해 점수의 해석이 좀 더 쉽다
- 마이너스가 필요한 경우에는 사용할 수 없다
- 텍스트 데이터를 쓸 때 효과적
- 문서별 단어의 빈도를 정리
- 어떤 문서들을 이루는 주제의 축을 찾을 수 있다
더보기
예시 : 고객 리뷰
- 청결(청소, 깨끗, 더럽, 지저분, 깔끔..)
- 서비스(친절, 안내, 접객..)
- 인테리어(가구, 실내, 장식, 벽지..)
데이터를 가지고 NMF로 뽑아낼 수 있다
# 10차원으로 축소
from sklearn.decomposition import NMF
nmf = NMF(n_components=10)
nmf.fit(psyabs)
# 단어별 가중치
weight = pd.DataFrame(nmf.components_.T)
weight.index = psyabs.columns
# 0번 차원 확인
weight.sort_values(by=0, ascending=False).head(10)
# 1번 차원 확인
weight.sort_values(by=1, ascending=False).head(10)
▪️ MDS(다차원 척도법, Multi Dimensional Scaling)
- 개체들 사이의 유사성/비유사성을 측정하여 유사도(근접성, 거리)를 시각화
- 객체들 사이의 유사도(거리)를 최대한 유지하는 방법
- MDS의 장점은 거리를 유지한다는 점
- MDS의 축은 의미가 없어서 해석 자체가 되지 않음
- 시각화할 때만 사용하며 거리와 방향이 의미가 없음
더보기
예시 : 브랜드 지도, 마케팅 전략, 포지셔닝 맵 -> 마케팅도 분석이다
import matplotlib.pyplot as plt
# MDS를 이용해 거리를 좌표로 바꾸기
mds = MDS(n_components=2, dissimilarity='precomputed')
z = mds.fit_transform(d)
# 시각화
seaborn.scatterplot(
x = z[:, 0],
y = z[:, 1],
)
for c, p in zip(name2id, z):
plt.text(p[0], p[1], c,)
▪️ 차원 축소 정리
PCA | NMF | MDS |
시각화, 단점 가중치가 -인 경우가 있어서 해석이 어려울 때가 있다 | PCA와 비슷하지만 해석이 좀 더 잘 됨 | 방향에 대한 해석이 필요가 없고, 원래의 거리를 가능한 지켜서 그리고 싶을 때 |
3️⃣ 군집 분석(Clustering)
- 비슷한 사례들을 군집으로 묶음
- 고객을 성별, 연령 등 인구학적 변수에 따라 그룹화 → 그러나 고객들은 단순하게 나눠지지 않으며, 정확성도 떨어짐
- 구글, 넷플릭스 등의 서비스는 인구학적 변수를 사용하지 않음
- 데이터에 기반해서 고객들을 그룹화할 필요가 있을 때 군집 분석을 사용함
- 분류분석은 label이 있을 때 새로운 데이터 그룹을 예측하기 위한 목적이며, 군집분석은 label이 없을 때 데이터 자체의 특성에 대해 알고자 하는 목적
k-Means
- k개의 평균이라는 뜻으로 가장 널리 사용되는 클러스터링 방법
- 군집의 평균(중심점)을 구함
- 사례를 중심점이 가장 가까운 군집에 포함시킴
# 데이터
iris = pd.read_excel('iris.xlsx')
x = iris.iloc[:, 0:4]
# 학습
from sklearn.cluster import KMeans
km = KMeans(n_clusters=3)
km.fit(x)
# 예측
cluster = km.predict(x)# 같은 번호가 있으면 같은 그룹
# 시각화
seaborn.scatterplot(x=z[:,0], y=z[:,1], hue=cluster, data=iris)
반응형
'Database > Statistics' 카테고리의 다른 글
[통계] 혼동 행렬(Confusion Matrix) + Python (0) | 2021.09.07 |
---|---|
[통계] 로지스틱 회귀분석(Logistic Regression) (0) | 2021.09.05 |
[통계] 로그 함수 + Python (0) | 2021.09.04 |
[통계] 회귀분석(회귀계수, R제곱, 더미코딩) + Python (0) | 2021.09.04 |
[통계] 상관분석 + Python (0) | 2021.09.04 |