카테고리 없음

6/23 머신러닝도 러닝이다.

tundercloud 2026. 6. 23. 17:05

에이타니

 

설명 가능한 AI (XAI)

● 필요한 이유

1. 이미 학습된 모델의 이사결정 과정을 해석하고 설명한다.

2. 블랙박스 모델의 신뢰성 확보

3. 규제 준수를 위한 설명 제공

4. 모델의 문제점 진단 및 개선 방향 파악

 

SHAP (SHapley Additive exPlanations)

● 협력 게임 이론의 Shapley Value 개념을 기반으로 각 특성(feature)예측에 기여한 정도를 공정하게 분배하는 방법

● 개별 예측(local)뿐만 아니라 특성 중요도를 집계하여 전역적(global) 해석도 가능하다.

● 모델에 구애받지 않는(model-agnustic) 기법으로 선형 모델, 트리 기반 모델, 딥러닝 등 다양한 모델에 적용 가능하다.

● 이미 학습된 모델의 예측을 설명하는 사후 해석(post-hoc interpretation) 기법이다.

◎ Summary Plot

● 각 점의 색상은 해당 피처의 원래 값(Feature value)의 크기를 나타낸다.

● 일반적으로 붉은색은 피처 값이 높음을, 푸른색은 피처 값이 낮음을 의미하며, 모델의 예측 확률 자체를 나타내는 것이 아니다.

 

LIME (Local Interpretable Model-agnostic Explanations)

● 복잡한 블랙박스 모델의 특정 예측을 설명하기 위해

  1. 해당 예측 주변(local)에서 새로운 데이터를 샘플링하고,

  2. 이 국소 영역에서 해석 가능한 단순 모델(예 : 선형 모델)을 학습하는 방식으로 작동한다.

● 한계점 : 분석하고자 하는 샘플 근처의 데이터를 무작위 생성(Perturbation)하여 로컬 대리 모델(Local Surrogate)을 학습시키므로

→ 시드(Seed)를 고정하지 않으면 실행할 때마다 설명이 달라질 수 있는 불안정성(Instability)이 한계점으로 지적된다.


코드카타

 

86번 H-Index

H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 

어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 

위키백과1에 따르면, H-Index는 다음과 같이 구합니다.

어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.

어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.

제한사항
  ● 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
  ● 논문별 인용 횟수는 0회 이상 10,000회 이하입니다.

🤔
H-Index 문제는 논문 인용 횟수를 내림차순 정렬한 후,
현재 위치(i+1)와 해당 논문의 인용 횟수를 비교하는 방식으로 해결한다.

정렬된 배열에서 citations[i] >= i+1이면
현재 논문 개수만큼 인용 조건을 만족한다는 의미이다.

조건을 만족하지 않는 순간 이전 값이 최대 H-Index가 된다.

 

def solution(citations):
    
    # 인용 횟수가 많은 순서대로 정렬
    citations.sort(reverse=True)
    
    # 논문 개수만큼 반복
    for i in range(len(citations)):
        
        # 현재 논문 개수 = i + 1
        # 현재 논문의 인용 횟수 = citations[i]
        if citations[i] < i + 1:
            
            # i번째 논문부터 조건을 만족하지 않음
            # 따라서 이전 값이 H-Index
            return i
    
    # 모든 논문이 조건을 만족하는 경우
    return len(citations)

87번 n^2 배열 자르기

정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다.

n행 n열 크기의 비어있는 2차원 배열을 만듭니다.
i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다.
1행 1열부터 i행 i열까지의 영역 내의 모든 빈 칸을 숫자 i로 채웁니다.
1행, 2행, ..., n행을 잘라내어 모두 이어붙인 새로운 1차원 배열을 만듭니다.
새로운 1차원 배열을 arr이라 할 때, arr[left], arr[left+1], ..., arr[right]만 남기고 나머지는 지웁니다.
정수 n, left, right가 매개변수로 주어집니다. 주어진 과정대로 만들어진 1차원 배열을 return 하도록 solution 함수를 완성해주세요.

n² 크기의 배열을 직접 생성하면 메모리 초과
필요한 구간(left~right)만 계산하는 방식 사용
2차원 배열의 값 규칙 발견:
arr[row][col] = max(row, col) + 1

1차원 인덱스를 2차원 좌표로 변환:
row = index // n
col = index % n

시간복잡도: O(right-left)
공간복잡도: O(right-left)
def solution(n, left, right):
    answer = []

    for i in range(left, right + 1):
        # 현재 위치의 행
        row = i // n
        
        # 현재 위치의 열
        col = i % n
        
        # 값 계산
        answer.append(max(row, col) + 1)

    return answer

88번 행렬의 곱셈

2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.

제한 조건
  ● 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
  ● 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
  ● 곱할 수 있는 배열만 주어집니다.

결과 배열 크기:
행 → arr1의 행 개수
열 → arr2의 열 개수
i: 결과 행 위치
j: 결과 열 위치
k: 곱셈에 사용되는 중간 인덱스

행렬 곱셈은
answer[i][j] += arr1[i][k] * arr2[k][j]
형태로 구현한다.

시간복잡도는 O(행 × 열 × 중간크기) 이다.
def solution(arr1, arr2):
    
    # 결과 배열 생성
    # arr1의 행 개수 × arr2의 열 개수 크기
    answer = [[0] * len(arr2[0]) for _ in range(len(arr1))]
    
    
    # arr1의 행 순회
    for i in range(len(arr1)):
        
        # arr2의 열 순회
        for j in range(len(arr2[0])):
            
            # 곱한 값을 저장할 변수
            total = 0
            
            # arr1의 열과 arr2의 행 크기는 같음
            for k in range(len(arr2)):
                
                # 행렬 곱셈 계산
                total += arr1[i][k] * arr2[k][j]
            
            
            # 계산 결과 저장
            answer[i][j] = total
    
    
    return answer

머신러닝 기초 강의

 

강의에서는 라이브세션에서 다뤘던 이론적인 부분과 실습부분으로 나눠서 다뤘다. 이론부분은 전에 TIL에서 정리한 내용이 있기 때문에 실습 내용 위주로 정리하겠다.

선형회귀 적용.ipynb
0.15MB
로지스틱회귀.ipynb
0.09MB


머신러닝 심화 라이브 세션 2회차

 

⭐ 클러스터링 (Clustering, 군집화)

 

● 분석 대상이 되는 데이터의 그룹을 만드는 방법론

 

● 그룹을 만들 때는 마구잡이로 만드는 것이 아니라 특정 기준을 가지고 제작

  ○ intra-cluster(군집 내 거리) : 군집 사이의 데이터들의 거리는 가까울수록 좋음

  ○ inter-cluster(군집 간 거리) : 각각의 군집 사이의 거리는 멀수록 좋음.

 

● 필요한 경우

1. 머신러닝 문제해결 과정에서 학습 데이터의 구조적 이해

→ 크고 복잡한 데이터셋을 소수의 균일한 범주로 단순화

2. 새로운 데이터 분류

→ 정답이 없거나 모르는 경우

3. 이상 탐지

→ 이미 보유하고 있거나, 수집하고 있는 데이터셋과 다른 패턴 식별

 

- 요약 및 시각화 (Summarization)

사용 목적 : 수많은 양의 데이터를 몇 개의 그룹으로 묶어서 전체 특성을 파악할 때

장점 : 모든 데이터를 확인하지 않아도 전체 데이터 특성을 이해할 수 있다.

 

- 데이터 이해 (Understanding)

사용 목적 : 라벨링이 되어있지 않은 데이터의 분포 및 특성을 확인할 때

장점 : 데이터의 숨겨진 패턴이나 구조를 발견할 수 있다.

 

- 전략 수립 (Strategy Planning)

사용 목적 : 클러스터링 결과를 통해 실제 비즈니스 Action Item을 도출할 때

특징 : 현업에서 많이 활용되며, 분석가의 해석 능력이 중요하다.

 

프로세스

 

계층적 군집화 (Hierarchical Clustering)

- 데이터 간의 거리를 계산하여 나무 모양의 계층 구조(Dendrogram)를 만들어가는 방식

 

 

K-means

● 데이터를 k개의 군집으로 나누는 분할 기반 클러스터링 방법

 

● 동작 원리 1

1. 군집의 개수 설정

2. 초기 중심(Centroid) 설정

3. 데이터를 군집에 할당

4. 중심점 재설정(갱신)

5. 수렴까지 반복

https://velog.io/@jhlee508/머신러닝-K-평균K-Means-알고리즘

 

[머신러닝] K-평균(K-Means) 알고리즘

머신러닝 비지도학습에 속하는 K-means 알고리즘은 K개의 군집(Cluster)로 묶는(Clusting) 알고리즘이다.

velog.io

 

● 최적의 K를 정하는 방법

K-Means의 유일한 단점이자 가장 중요한 하이퍼파라미터는 K(군집 개수)이다. 두가지 방법으로 정함.

1. Elbow Method 

- K를 늘릴수록 inertia(군집 내 거리 합)가 감소

- 감소 폭이 급격히 꺾이는 지점(팔꿈치)을 선택

2. Silhouette Score 

- 개별 데이터가 할당된 군집 내 데이터와 얼마나 가깝게 군집화 되어있는지,

  그리고 다른 군집에 있는 데이터와는 얼마나 멀리 분리되어 있는지를 수치로 나xksoa.

- -1 ~ 1 사이. 1에 가까울수록 군집이 잘 분리됨. 최고점을 선택

 

● 장점과 한계

- 빠르고 단순하다.

- 클러스터의 갯수를 지정해주어야 한다.

- 클러스터 생성 시 데이터의 분포 및 특성을 반영하기 어렵다.

- Outlier에 취약한 편이다.

 

 

Density Based Clustering (밀도 기반 군집화)

밀도 기반 클러스터링 알고리즘으로, 데이터 포인트가 밀집된 영역을 클러스터로 정의한다.

→ 밀도 = 데이터 포인트가 얼마나 가깝게 모여있는지


 차원축소

고차원 데이터의 복잡성을 줄이면서 중요한 정보는 보존하는 차원 축소 기법을 학습한다.

데이터의 숨겨진 패턴을 발견하고 효과적으로 시각화할 수 있다.

 

PCA (주성분 분석)

● 여러개의 센서 데이터를 가장 중요한 몇개의 축으로 요약하는 기법

  

t-SNE

● 고차원에서 가까운 점들은 저차원에서도 가깝게, 먼 점들은 멀게 배치하는 방법