카테고리 없음

2025-04-15 머신러닝 7

seyeon1130 2025. 4. 15. 20:26

머신러닝 특강

분류 

이진분류 (암진단) :성능 더 좋음

다중분류:선택지가 비슷한 것이 있을 때 성능 안좋아짐

 

분류 회귀 차이점

분류: 결정경계 학습

회귀 : 데이터를 가장 잘 설명하는 함수 학습

 

분류 알고리즘

로지스틱 회귀: 단순해서 과적합 위험 낮음, 대신 과소적합 위험있으, 이상치 민감, Standardscaler 하는게 좋음.

knn : z 스케일링 필수

SVM : StandardScaler 필수, 하이퍼파라미터에 따라 성능 차이가 크므로 GridSearchCV 하이파라미터 튜닝 추천

트리기반 모델

의사결정나무는 스케일링 필요 없고 결측치 처리가 필요 없음, 근데 과적합 위험이 있음 그래서 랜덤포레스트 탄생

랜덤 포레스트 :

그래디언트 부스팅도 결정나무 순차적으로 학습하는 것

 

 

 

 

분류 평가

정확도 Accuracy : 클래스간 비율이 균등할 때 사용

정밀도(스팸, 결제사기), 재현율(암 진단) : 불균등할 때 사용

 

모델 해석

특성 중요도 (Feature Importance) : 다중공선성이 있어도 판별 못함, 상관관계를 고려하지 않고 중요한 변수만 나타냄

 

 

기타 팁

테스트 사이즈는 0.2~0.3까지 

 

테스트데이터는 마지막 평가하기 전, TRAIN 데이터랑 분리돼있는 상태에서 이상치, 결측치 처리하면 됨.

EDA는 데이터 분리 후 실행.

 

머신러닝 8강 차원축소

차원축소

이상치처리, 특성 스케일링 이후 사용

2차원 변형 뿐만 아니라 필요없는 컬럼들을 제거해줘서 노이즈 제거 효과가 있음

 

선형 차원축소: PCA

PCA: 데이터의 가장 큰 분산을 찾아서 그 부분을 사진찍듯이 보여줌(주성분을 찾는다)

 

비선형 차원축소: 구겨져있는 상태의 종이(3차원)을 피는 것(2차원)( t-SNE, UMAP)

t-SNE : 가까운 데이터는 더 가까이, 먼 데이터는 더 멀리 배치하는 차원축소,지역적 구조만 파악 -> 시각화에는 좋지만 왜곡 가능성

UMAP: t-SNE랑 비슷하지만 지역적 구조, 전체 구조 파악, 정보왜곡 가능성은 여전히 있음

 

 

# 2. PCA
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

# 3. t-SNE
from sklearn.manifold import TSNE
tsne = TSNE(n_components=2, perplexity=30, random_state=42)
X_tsne = tsne.fit_transform(X)

# 4. UMAP
# (umap-learn 설치 필요할 수 있습니다 : pip install umap-learn)
from umap import UMAP
umap = UMAP(n_components=2, n_neighbors=15, random_state=42)
X_umap = umap.fit_transform(X)

# 5. 시각화 (PCA, t-SNE, UMAP 결과 비교)
fig, axes = plt.subplots(1, 3, figsize=(15, 4))

axes[0].scatter(X_pca[:, 0], X_pca[:, 1], c=y)
axes[0].set_title("PCA (2D)")

axes[1].scatter(X_tsne[:, 0], X_tsne[:, 1], c=y)
axes[1].set_title("t-SNE (2D)")

axes[2].scatter(X_umap[:, 0], X_umap[:, 1], c=y)
axes[2].set_title("UMAP (2D)")

plt.tight_layout()
plt.show()

 

 

차원축소 실습문제

 

import numpy as np
import matplotlib.pyplot as plt

# 1. Wine 데이터셋 불러오기
from sklearn.datasets import load_wine
wine = load_wine()
X = wine.data
y = wine.target  # 3가지 와인 품종(0, 1, 2)

from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

# 3. t-SNE
from sklearn.manifold import TSNE
tsne = TSNE(n_components=2, perplexity=30, random_state=42)
X_tsne = tsne.fit_transform(X)

# 4. UMAP
# (umap-learn 설치 필요할 수 있습니다 : pip install umap-learn)
from umap import UMAP
umap = UMAP(n_components=2, n_neighbors=15, random_state=42)
X_umap = umap.fit_transform(X)

# 5. 시각화 (PCA, t-SNE, UMAP 결과 비교)
fig, axes = plt.subplots(1, 3, figsize=(15, 4))

axes[0].scatter(X_pca[:, 0], X_pca[:, 1], c=y)
axes[0].set_title("PCA (2D)")

axes[1].scatter(X_tsne[:, 0], X_tsne[:, 1], c=y)
axes[1].set_title("t-SNE (2D)")

axes[2].scatter(X_umap[:, 0], X_umap[:, 1], c=y)
axes[2].set_title("UMAP (2D)")

plt.tight_layout()
plt.show()

✅ perplexity=30

  • t-SNE에서 로컬 구조(근처 이웃)를 얼마나 고려할지 정하는 하이퍼파라미터. 5~50이 적당함

✅ n_neighbors=15

  • UMAP에서 한 점이 몇 개의 이웃과 관계를 맺는다고 볼 것인가?를 정하는 값
  • 이게 클수록 더 전체적인(글로벌) 구조를 많이 고려하고,
  • 작을수록 더 지역적인(로컬) 구조에 집중함

머신러닝 9강 - 이상탐지

이상탐지

비지도학습

test, train 데이터 분리 안해도 됨

fit_predict 가능

 

이상치와 다른 점

이상치 탐지는 단순히 통계적으로 이상치 판단

이상탐지는 시계열 데이터와 주변 데이터를 모두 포함하여 이상을 탐지하는 기법

 

ONE - CLASS -SVM

원 안에 들어가면 정상, 안들어가면 비정상으로 판단

oc_svm = OneClassSVM(nu=0.05)  # 5% 이상치 예상
oc_svm.fit(X_2d)
# 예측: 1(정상), -1(이상치)
y_pred_oc = oc_svm.predict(X_2d)

 

Isolation Forest

랜덤 포레스트랑 비슷함

의사결정에서 가장 첫번째 트리에서 빠져나가는 걸 이상치로 판단

iso_forest = IsolationForest(contamination=0.05, random_state=42) #5% 이상치 예상
iso_forest.fit(X_2d)
# 예측: 1(정상), -1(이상치)
y_pred_if = iso_forest.predict(X_2d)

 

Local outlier Factor(LOF)

한 데이터 포인터가 주변 데이터들과 얼마나 외각져있는지

밀도가 낮으면 이상 가능성

from sklearn.neighbors import LocalOutlierFactor
lof  LocalOutlierFactor(n_neighbors=20, contamination=0.01
pred_lof = lof.fit_predict(data_2d)
lof_outliers = data[pred_lof == 1print(f"LOF로 탐지된 이상치 개수: {len(lof_outliers)}")
print(lof_outliers)

 

이상탐지 평가

만약 정답 레이블이 조그이라도 있다면

재현율, 정밀도, roc 로 평가 가능

 

 

 

이상탐지 실습문제

import numpy as np
import matplotlib.pyplot as plt

# 1. Wine 데이터셋 로드
from sklearn.datasets import load_wine
wine = load_wine()
X = wine.data
y = wine.target

# 변수 2개만 선택 (예: 컬럼 0, 1)
X_2d = X[:, :2]  # shape: (178, 2)

# 2. One-Class SVM
from sklearn.svm import OneClassSVM

oc_svm = OneClassSVM(nu=0.05)  # 예시 파라미터
oc_svm.fit(X_2d)
# 예측: 1(정상), -1(이상치)
y_pred_oc = oc_svm.predict(X_2d)

# 3. Isolation Forest
from sklearn.ensemble import IsolationForest

iso_forest = IsolationForest(contamination=0.05, random_state=42)
iso_forest.fit(X_2d)
# 예측: 1(정상), -1(이상치)
y_pred_if = iso_forest.predict(X_2d)

# 4. 이상치로 예측된 샘플 인덱스 추출
outliers_oc = np.where(y_pred_oc == -1)[0]  # One-Class SVM이 예측한 이상치
outliers_if = np.where(y_pred_if == -1)[0]  # Isolation Forest가 예측한 이상치

print("=== One-Class SVM ===")
print("이상치로 탐지된 샘플 개수:", len(outliers_oc))
print("이상치 인덱스:", outliers_oc)

print("\n=== Isolation Forest ===")
print("이상치로 탐지된 샘플 개수:", len(outliers_if))
print("이상치 인덱스:", outliers_if)

# 5. 시각화
# 2차원 특성 공간에서 이상치로 판별된 점들을 빨간색으로 표시
fig, axes = plt.subplots(1, 2, figsize=(12, 5))

axes[0].scatter(X_2d[:, 0], X_2d[:, 1], label='Normal')
axes[0].scatter(X_2d[outliers_oc, 0], X_2d[outliers_oc, 1],
                color='red', edgecolors='k', label='Outliers')
axes[0].set_title("One-Class SVM")
axes[0].set_xlabel(wine.feature_names[0])
axes[0].set_ylabel(wine.feature_names[1])
axes[0].legend()

axes[1].scatter(X_2d[:, 0], X_2d[:, 1], label='Normal')
axes[1].scatter(X_2d[outliers_if, 0], X_2d[outliers_if, 1],
                color='red', edgecolors='k', label='Outliers')
axes[1].set_title("Isolation Forest")
axes[1].set_xlabel(wine.feature_names[0])
axes[1].set_ylabel(wine.feature_names[1])
axes[1].legend()

plt.tight_layout()
plt.show()

 

 

머신러닝 10강 딥러닝

단층 퍼셉트론 -> 다층 퍼셉트론 -> 딥러닝

 

딥러닝 특징

계층적 특징 학습 : 첫 신경망은 선을 따고 그 다음 신경망은 눈 코 입 위치 따고 그 다음은 얼굴형 따고 이런식으로

비선형변환을 반복학습: 비선형관계를 파악하기 위해서 각층마다 비선형 함수를 학습함

오차 역전파: 실제값과 예측값의 차이를 거꾸로 가중치 업데이트

 

아키텍처


CNN: 이미지나 영상 처리에 특화된 딥러닝 모델로, 합성곱 연산을 통해 특징을 추출하며, 필터를 사용해 입력 이미지를 점점 더 작은 특징 맵으로 축소하면서 계층적으로 학습한다.

  • 합성곱 레이어
    • 필터(또는 커널)을 이용해 이미지(특징 맵)을 스캔하며 특징을 추출
  • 풀링(Pooling) 레이어
    • 특징 맵의 크기를 줄이고 주요 특징만 요약
  • 완전연결(FC, Fully Connected) 레이어
    • 추출된 특징 기반으로 신경망 다 연결해서 분류나 회귀 수행

 

RNN : 순차적으로 진행하는 딥러닝, 문장과 음성처럼 시간이 있는 시퀀스 데이터에 적합, 장기메모리 문제 발생(LSTM,GRU사용)

 

Transformers:  인코더와 디코더가 있음, 어텐션 기능이 핵심, 병렬처리인데도 RNN없이도 순차데이터 처리 가능, 자연어 처리뿐 아니라 영상, 음성 등 멀티모달(음성 영상 등 같이 있는 거)에도 응용 가능

attention: 집중해야하는 데이터가 있으면 다른 데이터에 가중치를 부여하여 가장 관련이 깊은 것 찾아냄, ,

 

Hugging face(파이썬 패키지, 딥러닝을 손쉽게 활용)

 

머신러닝과 차이점: 머신러닝은 사람이 개입하여 특징 추출, 딥러닝은 스스로 추출 학습