[Data Science] Data Mining
Association Rule Mining
A를 구매한 사람은 B도 같이 구매하더라~ 같은 패턴을 찾는게 목표
itemset : 물건들의 집합
support : 아이템셋이 전체 거래 중 몇 비율에서 등장하는지


나이브하게 생각하면 모든 가능한 연관 규칙을 찾고 support값과 confidence값을 계산해도 된다.
다만 이렇게 하면 규칙 수가 너무 많아져서 느림 -> Apriori 알고리즘 사용
최소 지지도인 minsup과 최소 신뢰도인 minconf를 지정하고 비교함 (각각 직접 설정하는 파라미터)
support >= minsup , confidence >= minconf (흔한 패턴만 보겠다 + 믿을 만한 규칙만 보겠다)
어떤 itemset이 frequent 하다면 (support >= minsup 이면) 그 모든 부분집합도 frequent 하다.
즉, 어떤 itemset이 frequent하지 않으면 그걸 포함하는 큰 itemset도 frequent하지 않다.
이러면 특정 item이 탈락하는 순간 그 item을 포함하는 itemset을 계산하지 않고 한 번에 쳐낼 수 있다. (prunning)
Apriori
크기가 k인 frequent itemset을 Fk라고 부른다. 작은 것 부터 한 층씩 올라감.
Fk가 공집합이면 종료하고, 공집합이 아니면 k+1 후 반복한다.
F1을 계산할 때는 물건이 n개면 후보가 n개 뿐이니 각각 support를 세고 frequent한 것만 남긴다
k가 1보다 클 때는 두 단계로 나눠서 계산함
1. 후보 집합 Ck를 만든다
2. Ck의 각 원소 support를 세서 frequent 한 것만 Fk에 남긴다.
1번 계산 시 모든 k 조합을 후보로 넣으면 계산량이 너무 많으니 이미 구한 Fk-1을 사용한다.
{a1, a2 ... ak} 가 frequent 한 k-아이템셋이라면, {a1, a2 ... ak-1} 과 {a1, a2, ... ak-2, ak} 는 Fk-1에 있어야 한다.
저 두 아이템셋의 prefix는 {a1, a2, ... ak-2} 로 똑같다.
그러니 모든 아이템에 순서를 정하고 Fk-1을 prefix로 정렬한 후 prefix가 같은 것 끼리 그룹화한다.
각 그룹 안에서 위의 두 아이템셋의 pair 마다 합친 결과를 Ck에 추가하는 방식을 사용함.
즉, 앞부분 똑같고 마지막 항목만 다른 것들을 추가하는 방식이다.
예를 들면 C3를 만들 때는 3-2=1로 맨 앞 1글자가 같은걸 대상으로 그룹으로 묶는다.
그리고 그 그룹 안에서 서로 다른 2개를 짝지어서 합치는 것. 후보가 3개면 3C2로 3개가 나온다.
F2={{a,b},{a,c},{a,d},{b,c},{c,d}} 에서 C3는 abc abd acd 가 나옴
그리고 abc abd acd 에서 ab ac bc ad bd cd 가 모두 F2에 있는지 확인하는데, bd는 F2에 없으니 prunning 된다.
prefix가 다르면 어차피 합쳐봐야 의미 없으니 계산하지 않는다. 이러면 후보 수가 확 줄어듦.
이제 k>=2 인 빈발 아이템셋 I를 하나 고르고 겹치지 않는 두 조각 I1 I2로 나눈다. (I1 U I2 = I)
이러면 I1 -> I2 가 후보 규칙으로 정해짐.

각 후보 규칙의 confidence를 계산해서 minconf 이상인 것만 보고한다.
이미 분자와 분모는 1단계에서 모두 구해뒀으니 규칙 생성 단계에서는 계산만 하면 된다.
I가 frequent 하니까 support는 신경쓰지 않아도 되고 confidence만 검사함.
한 쪽이 통째로 비는 두 경우를 제외하면 I 하나당 2^k - 2개의 후보 규칙이 나온다.
열심히 계산해서 confidence 값이 mincof 이하인걸 잘라내면 됨.

왼쪽이 클수록 confidence가 높다 - 어차피 분자는 같고 더 작은 집합이 더 흔하니까..
이걸 left-contains 한다고 부름.
그러니 규칙을 Lattice로 두고 왼쪽이 큰 규칙부터 top-down으로 검사한다.
어떤 규칙이 minconf 에 도달하지 못하면 left-contains하는 모든 아래쪽 규칙도 자동으로 미달이니 confidence를 계산하지 않고 쳐낼 수 있음.
PCA meets SVD
데이터가 d개의 특징을 가질 때, 그 특징들이 서로 상관되어 있는 경우 진짜 중요한 방향은 몇 개 없다.
PCA는 데이터가 가장 크게 퍼지는 직교 방향을 찾고 새 좌표축으로 삼는다.
이러면 상위 n개 축만 남기고 나머지를 버리니 d차원을 k차원으로 줄이면서 정보를 최대한 보존할 수 있음.
원래 PCA는 공분산 행렬을 만들고 고유값 분해를 하는 방법이지만 실무에서는 PCA 대신 SVD를 사용한다.
공분산 + 고유값분해 대신 SVD로 PCA를 수행함.
행렬의 대각합과 고유값의 합은 동일함. 분산은 사라지지 않고 PC로 재분배되기 때문

SVD는 데이터 X를 회전(V^T) -> 축 별로 늘리기(S) -> 회전(U) 세 동작으로 분해해서 다룬다. (행렬 하나를 셋으로 쪼개서 다룸)
V는 방향, S는 그 방향으로 데이터가 퍼진 정도를 의미함.
n개의 데이터(행), d개의 특징(열), d < n 가정
S는 대각행렬
U * U^T = I
V * V^T = I
PC 값은 그 자체가 분산이니 제곱하지 않아도 됨. 특이값을 줬을 때만 제곱해서 쓴다.
복원이 정확하려면 버리는 방향의 분산이 0이여야 함. k=n으로 줄일때 버려지는게 0이 아니면 부정확하다.

두 특징이 있는 데이터를 점으로 찍으면 한쪽으로 길쭉하게 펴진다.
가장 많이 퍼진 한 방향이 PC1이고, 수직이면서 그 다음으로 퍼진 방향은 PC2이다. PCA는 데이터에 맞춰 좌표축을 다시 그어준다.
데이터는 PC1 방향으로 길고 PC2 방향으로는 거의 펴지지 않았다. 그러니 각 점을 PC1 위에서 어디쯤인지로 표현해도 됨.
이게 d차원을 k차원으로 줄이는 테크닉이다.
즉, V의 열은 PC 방향 그 자체이고 S의 특이값은 각 화살표 방향으로 데이터가 퍼진 크기를 의미한다 - PC1은 크고 PC2는 작다.
특이값이 큰 것 부터 정렬되어 있으니 앞에서 k개만 챙기면 좋은거만 가져가는 셈.
어떤 점이 PC1 위에서 어디쯤 있는지 알기 위해서는 방향선에 수직으로 점의 그림자를 떨어뜨리면 된다. (투영)
내적으로 계산하면 됨.
PCA는 데이터가 가장 퍼진 방향을 찾고 각 점을 그 방향에 투영해서 새 좌표를 얻고 그 방향 퍼짐의 크기를 계산하는 것.
PCA 공식 : Z = XV 데이터를 PC 방향에 투영해서 줄인 결과
Z = XV = (USV^T)V = US(V^TV) = US
PC의 분산과 방향은 따로 구해야함
V의 열은 X^TX의 고유벡터이고 U의 열은 XX^T의 고유벡터이다.
Clustering
정답 라벨 없이 비슷한 점끼리 묶는 테크닉으로 같은 그룹은 가깝게 다른 그룹은 멀게 매핑한다.
클러스터 개수 k를 미리 정해두면 n개의 점을 k개의 클러스터로 나누되 이 값을 최소화함.

최적해는 가능한 모든 경우를 다 따져봐야하는데 이러면 시간이 너무 오래 걸리니 휴리스틱인 K-Means를 사용한다.
1. k를 정하고 중심 k개를 아무렇게나 찍는다.
2. 각 점을 가장 가까운 중심의 색으로 칠하고, 각 색의 중심을 점들의 평균 위치로 옮긴다. (centroid)
3. 어떤 점도 색이 바뀌지않으면 끝
global optimum이 아니라 local optimum에 수렴함. 처음 중심을 어디에 찍는지에 따라 결과가 달라진다.
그러니까, 처음부터 모든 점이 특정 클러스터에 속하는거고 클러스터의 중심을 바꿔가면서 조작하는 것
Hierarchical Agglomerative는 기존 K-Means와 정반대로 아래에서 위로 쌓는다.
처음에는 모든 점이 각자 클러스터고, 그 중 가장 가까운 두 클러스터를 합치는걸 가장 큰 클러스터가 남을 때 까지 반복한다.
Single Linkage : 두 클러스터에서 가장 가까운 점 한 쌍의 거리
Complete Linkage : 두 클러스터에서 가장 먼 점 한 쌍의 거리
Average Linkage : 모든 점 쌍 거리의 평균
연결 기준을 정해야 두 클러스터 사이의 거리를 측정할 수 있다.
알고리즘의 결과는 하나의 큰 클러스터가 아니라 합쳐진 전체 과정이다. (덴드로그램)
이 덴드로그램 안에는 모든 단계의 클러스터링이 들어있으니 나무를 끝까지 키운 뒤 원하는 높이에서 자르면 클러스터의 답이 된다.

클러스터링을 돌렸는데 이게 잘 된건지를 측정하려면 Silhouette Score를 사용한다.
점 X 하나에 대해서 두 거리를 측정함. (내 무리랑은 가깝고 남의 무리랑은 멀어야 함)
A. X에서 자기 클러스터 안의 다른 점들까지의 평균 거리 -> 작을수록 좋다
B. X에서 가장 가까운 다른 클러스터의 점들까지의 평균 거리 -> 클수록 좋다

A가 작고 B는 크면 S가 1에 가깝다.
A랑 B가 유사하면 S가 0에 가깝고 경계에 애매하게 걸친 점이 됨
A가 더 크면 S가 음수가 되고 잘못 묶였다고 볼 수 있다.
모든 점의 S값을 평균 내면 클러스터링 점수가 된다 - k를 설정할 때 사용함
평균 실루엣이 가장 높은 k를 선택한다.
DBSCAN
클러스터를 점이 모인 지역으로 보고, 떨어진 부분은 노이즈로 처리한다.
잡음점 주변은 sparse하고 같은 클러스터의 두 점은 dense한 지역만 밟아서 오갈 수 있어야 함
K-Means처럼 덩어리만 잘 찾는게 아니라 구불구불한 모양도 밀도만 이어지면 하나의 클러스터로 설정할 수 있다.
그러니 k를 미리 정하지 않아도 됨.

엡실론 값은 거리 문턱값이고 MinPts는 정수 상수를 의미함.
점 p를 중심으로 반경이 엡실론인 공은 p의 이웃 영역이 된다.
한 구역 안에 점이 MinPts개 이상 들어있는 점은 핵심점으로 DBSCAN의 가장 중요한 부분이다.
초록색 점 p는 핵심점이고 보라색 점은 핵심이 될 수는 없으니 경계점이다.
회색 점은 외딴 곳에 있으니 노이즈.
클러스터는 두 가지 단계를 통해 만들어짐
1. 핵심점끼리 묶기 - p를 구간 안의 점들과 선으로 연결하고 이어진 덩어리 하나하나를 클러스터로 본다.
2. 경계점 배정 - 비핵심점 p는 모든 핵심점의 클러스터에 추가되니 여러 클러스터에 동시에 속할 수 있다.
처음 중심을 어디에 찍는지에 따라서 결과가 달라지는 K-Means와 다르게 결과가 유일하다.
Single Linkage 덴드로그램이 있을 때 minPts가 1이면 모든 점이 핵심점이니 덴드로그램을 엡실론에서 자른것과 같음.
한 클러스터 안에 핵심점이 여러개 있을 수 있고, 경계점은 이웃이 부족해 핵심점은 아니지만 어떤 핵심점의 원 안에 들어가는 경우를 의미한다.
Neural Network
입력 데이터를 받아서 쓸모 있는 출력으로 바꾸는 기계이고, 그 변환 규칙이 학습 가능한 파라미터로 정해진다.
Encoder - 큰 입력 데이터를 하나의 대표 벡터로 압축한다.
Head - 대표 벡터로 실제로 풀고 싶은 문제를 풀어서 출력을 만들어낸다.



모든 입력 뉴런이 모든 출력 뉴런과 연결되니 fully-connected 이다.
출력 뉴런 하나하나는 W의 한 행과 x의 내적으로 표현되고, 그림의 선 하나가 가중치 하나를 의미한다.
활성화 함수로 가중합 결과를 비선형으로 구부려주고 bias로 결과를 살짝 밀어줌.
활성화 함수가 없으면 그냥 선형 변환일 뿐이니 층을 아무리 여러 개 쌓아도 선형 변환으로 합쳐져 버린다.
그러니 할성화 함수를 통해 매 층마다 비선형하게 구부려줘야 층을 쌓는 의미가 생기고, Neural Network가 거의 모든 함수를 흉내낼 수 있다. (ex. ReLU)
Convolution Neural Network
이미지는 2D 격자라서 한 줄로 펴서 MLP에 넣을 수도 있지만 Overfit 위험이 크고 가중치도 너무 많아서 적합하지 않음. 그리고 주변 픽셀도 못본다. Locality 편향이 있어야 하는데.
그러니 Convolution을 사용한다.
작은 창 하나를 이미지 위에 두고 그 내부 값들을 Kernel과 원소별로 곱해서 더한다 (내적)
그 결과로 출력 뉴런이 하나 나오고, 이걸 Feature Map이라고 부른다.
핵심은 같은 Kernel을 모든 위치에 재사용 - 이러면 파라미터도 줄고 Locality 편향이 생긴다.
Kernel을 슬라이딩 윈도우 방식으로 다루니 Feature Map은 입력보다 작아진다.

Stride - 창이 한 번에 몇 칸씩 건너뛸지를 정한다.
Padding - 연산 시 가장자리가 깎여 크기가 줄어드는데, 입력 테두리에 0을 둘러서 크기를 키워놓고 연산하면 입력과 출력이 같은 크기로 유지된다.
Pooling - 가중치 없이 창 안에 있는 값을 최댓값 또는 평균값을 사용해서 계산한다.
Convolution 뉴런은 Fully Connected 대신 Locality Window만 보니 가중치가 적으니 과적합이 방지된다.
가중치를 공유해 같은 Kernel을 모든 위치에 재사용할 수 있어 공간 상관관계를 포착할 수 있음.
채널은 같은 크기의 2D 격자 한 장으로, Tensor는 이런 격자를 여러 장 쌓아올린걸 의미한다.
이미지는 RGB로 채널이 3개 -> Convolution을 지나면 채널은 색이 아니라 Feature Map이 된다.
Filter 하나가 Feature Map 한 장을 만들어낸다. 세로 모서리.. 곡선.. 무늬..
채널 수가 늘어나는건 Filter를 많이 써서 Feature Map을 여러 장 뽑는다는 것.
Convolution의 Kernel은 공간만 k * k 이고 항상 입력 채널 전부를 한 번에 본다.

그러니 1*1 Kernel를 사용하면 픽셀 하나만 보되 그 칸의 모든 채널 값을 다 섞어버린다.
사실상 1*1 Kernel은 1*1*in Kernel과 같다고 보면 됨. 출력 채널 수는 사용하는 Kernel 개수와 같다.
파라미터 개수는 k*k*in*out + out(bias)
in은 입력 채널 out은 출력 채널
3*3 커널 2개를 사용하면 결국 5*5 시야를 가지는데, 5*5 커널 한개를 사용할 때 보다 파라미터 수가 적다
그러니 CNN은 큰 커널 대신 작은 커널을 여러 번 쌓는 방식을 사용함.
Text Mining
컴퓨터가 문서를 다루려면 문서를 벡터로 변환해야 한다. (Vector Space Model)
각각의 concept을 차원으로 본다. concept이 k개면 k차원 공간
각 문서는 두 공간의 벡터이고 문서 벡터 사이의 거리는 문서의 관계도를 의미함.
VSM은 concept을 어떻게 고르는지를 정해주지 않는다.
의미가 서로 겹치지 않는 Orthogonal 상태이고 가중치를 알아서 매길 수 있어야 한다. (Bag-of-Words)
Bag-of-Words
단어 하나하나를 차원으로 써서 문서를 벡터로 바꾸고 벡터 거리로 비교한다.
1. 문서에 나온 단어를 모아서 목록을 만든다. 이 단어 하나하나가 차원이 됨.
2. 문서마다 벡터를 채워준다.
text mining is mining 에서는
[1,2,0,1] 각각 text mining apple is
이런식으로 단어의 등장 횟수만
RAG가 하는 일과 정확히 일치함. 질문과 문서를 벡터로 바꿔서 가장 가까운 문서 벡터를 찾아온다.
다만 BoW 대신 임베딩을 사용해 의미까지 담은 벡터를 만드는 것.
다만 원문을 그대로 BoW에 넣으면 지저분하니 벡터로 만들기 전에 다듬는 과정을 거친다.
토큰화 -> 정규화 + 스테밍(mining을 mine으로. Vocabulary Gap을 커버함) -> 불용어 제거 -> BoW 벡터 완성
단어 빈도는 순위에 반비례한다. 그러니 단어를 빈도순으로 줄세우면 this that of a 같은 불용어가 대부분이라 일단 버림
또 sesquipedalianism 같은 희귀어는 거의 안나오니까 이것도 버림
이렇게 양 끝을 쳐내는걸 Zipf 법칙이라고 부른다.
TF-IDF
BoW는 단어를 그냥 카운트하는데, 모든 단어가 똑같이 중요하지는 않음.
단어가 문서를 잘 대표하려면 이 문서에는 자주 나오고 전체 문서 모음에서는 드물어야한다. TF-IDF는 이걸 정확하게 계산할 수 있음.
Term Frequency는 단어 t가 문서 d에 몇 번 나오는지를 의미한다.
많이 나오면 그 문서에 중요한거고, 근데 그냥 횟수만 쓰면 긴 문서가 무조건 유리하니 완화해서 사용함.
sub-linear : wf = 1 + log(count)
최대 TF 스케일링 : 문서 내 최대 단어 횟수로 나눠서 0~1로 표준화
Inverse Document Frequency는 단어가 전체에서 얼마나 Rare한지를 판단한다.
df(t) 는 그 단어를 포함하는 문서 개수로, 적은 문서에 나올수록 더 변별력이 강해짐.
df는 단어에 대해서 계산하는 것


이 문서에는 자주 등장하고 전체에서는 드물게 나타나는 요소에 대해 높은 점수를 부여한다.
+1을 붙이는 이유는 흔한 단어도 최소 가중치 1은 남도록 하기 위해서임
Skip-gram
BoW와 TF-IDF 벡터는 어휘 크기만큼 길고 의미를 담을 수 없다.
그러니 의미가 비슷한 단어는 벡터도 가깝게 표현할 수 있어야 한다.
비슷한 문맥에 등장하는 단어는 의미가 비슷하다. 그러니 주변 단어를 잘 골라내도록 벡터를 학습시킨다.

텍스트 위로 윈도우를 놓고, 가운데가 중심 단어 c이고 양 옆 +- m개가 주변 단어로 간주한다. (총 2m개)
중심 단어 c로 주변 단어 o를 맞출 확률을 벡터 내적 + softmax로 정의함.

두 벡터가 비슷한 방향일수록 이웃일 확률이 높고, 단어마다 벡터를 두 개 가진다.
주변 단어들의 확률을 최대화하고 Negative Log-Likelihood를 최소화한다. 이를 통해 SGD로 학습함.
학습이 끝나면 비슷한 문맥에 쓰이는 단어는 벡터가 가까워지고 의미 연산도 가능해진다.
이 의미 벡터는 NLP와 RAG의 기반이 됨.
비슷한 의미의 단어는 비슷한 문맥에 등장하니까 같은 이웃을 잘 맞히려면 벡터가 서로 비슷해진다.
사실 Skip-gram은 고전 임베딩이라 가볍고 로컬에서도 다룰 수 있다.
요즘은 거대 트랜스포머 모델이 문맥까지 반영해서 같은 단어도 문장에 따라 벡터가 다르고 의미 보존이 훨씬 잘 된다.
- log P(dog | cat) 을 줄이려면 P(dog | cat)을 키워야 하고, 내적값을 키워야 한다.
SGD가 서로 닮은 방향으로 밀어서 내적이 커짐.
Vcat (1,0) Udog (0,1) 이라고 하면
서로 가까워지도록 살짝씩 밀어주는 역할
Graph Mining
그래프에서 누가 중요한 노드인지 따지는 Centrality와 웹페이지 중요도인 PageRank와 Random Walk로 구분된다.
Centrality
노드와 간산으로 구성되는 그래프에서 어떤 노드가 가장 중요한지를 점수로 매기기 위해 Centrality를 측정한다.

네 가지를 확인한다.
Degree 측면에서는 연결된 간선이 많으면 중심이 된다.
Eccentricity 측면에서는 노드에서 가장 먼 노드까지의 거리를 측정하고 가장 먼 곳이 가까울수록 중심이 된다.
Closeness 측면에서는 다른 모든 노드까지 최단거리 합의 역수를 측정하고 합이 작을수록 중심이 된다.
Betweenness 측면에서는 노드를 지나가는 최단경로의 개수를 측정하고 경로가 많을수록 중심이 된다.
PageRank & Random Walk
웹을 방향 그래프로 본다. 페이지는 노드가 되고 하이퍼링크는 방향 있는 간선이 됨.
나가는 링크가 없는 페이지는 셀프루프를 붙인다.
1. 확률 a : 페이지 u의 나가는 링크 중 하나를 무작위로 따라가서 이동함
2. 확률 1-a : 아무 페이지로 순간이동함
순간이동이 없으면 막다른 곳이나 링크 루프에 갇힐 수 있으니 모든 페이지가 도달 가능하도록 하기 위해 필요하다.
한 페이지의 PageRank는 사용자가 오랜 시간 뒤에도 그 페이지에 있을 확률을 의미한다.
중요한 페이지들이 많이 링크하는 페이지일수록 자주 방문되고 PageRank가 높아진다.
이걸 수학으로 계산하는 방법이 따로 있다.
우선 확률 벡터로 상태를 표현해야함.
페이지가 n개일 때 지금 각 페이지에 있을 확률을 벡터 P로 기록한다. 이게 곧 확률벡터가 됨. (전부 더하면 1)
그리고 이동 규칙을 행렬 M에 담는다. (Stochastic Matrix) - i에 있을 때 j로 갈 확률
전부 1인 벡터를 M의 왼쪽에 곱하면
현재 분포가 P(t) 이면 다음 분포는 P(t+1) = M * P(t) 로 정리됨.
M을 한번 곱할 때 마다 한 번 더 걸은 분포가 나온다.
계속 걷다 보면 분포가 더 이상 변하지 않는 지점에 도달함 (P = MP)
여기서의 P를 정상분포라고 하고, 이게 PageRank벡터.
즉, P는 M의 고유값 1에 대응하는 고유벡터가 됨. (PCA에서 다룬 내용과 같다)

행렬과 그 행렬의 전치행렬은 고유값이 똑같다. 그러니 P = MP 인 정상분포 P가 항상 존재하는게 보장됨.
즉, 전부 1인 벡터를 왼쪽에 곱해주면 열의 합이 1이라서 그대로 나온다는거임
Recommender System
사용자가 아직 평가하지 않은 아이템에 몇 점을 매길지 예측하고, 높을 것 같은걸 추천한다.
이걸 Collaborative Filtering이라고 부른다.
User-User는 나와 취향이 비슷한 사용자를 찾고 걔내들의 평점으로 내 평점을 예측
Item-Item은 내가 평가한 아이템 중 목표 아이템과 비슷한 아이템을 찾고 내가 준 평점의 가중편균으로 예측

웬만하면 Item-Item이 User-User보다 낫다. 아이템은 사람보다 단순하니까..
Collaborative Filtering은 아이템 종류를 가리지 않고 평점만 있어도 된다.
다만 매칭할 사용자가 충분히 쌓여야 하고, 평점표가 비어있어 같은 아이템을 평가한 사용자가 찾기 어려우면 사용하기 힘들다.
아무도 평가하지 않은 새 아이템은 추천하기 어렵고, 독특한 취향을 반영하는것도 어려우며 극단화를 유도할 수 있음.
Netflix의 SVD는 희소성을 정면 돌파한다.
평점 행렬 R을 두 개의 얇은 행렬 곱으로 근사때려버림.

Q는 아이템 i의 요인 벡터 (그 영화의 액션성, 로맨스성, 예술성 등을 얼마나 가지는지)
P는 사용자 x의 요인 벡터 (그 사람이 액션을 얼마나 좋아하는지)
사용자 x의 아이템 i 평점은 두 요인 벡터의 내적으로 구할 수 있다.

빈칸이 많아도 평점만 잘 맞추도록 Q와 P를 학습하면 그 내적값으로 빈칸을 예측할 수 있다.
Lattice는 말 그대로 격자를 의미한다.

모든 아이템셋과 포함관계를 한눈에 그린 그림으로, 어떤 아이템셋이 infrequent하면 그 위쪽도 전부 infrequent함을 보여주기 위해 등장함. 그냥 Apriori 시각화를 위해 사용되는 개념이다.

rank는 0이 아닌 특이값의 개수로, 데이터의 독립적인 방향이 몇 개인지를 의미한다.
점들이 한 직선 위에만 있으면 방향이 1개라서 rank도 1이다.
Orthogonal은 수직을 의미하고 기하적으로는 두 벡터가 수직이라는 뜻이다. (내적값 0)
PCA에서 PC들이 직교하면 서로 수직이라서 정보가 겹치지 않는다.
의미가 서로 겹치지 않아서 독립적이라는 뜻. 독립적이면서 겹치지 않는 방향을 의미함.
BoW는 전처리 후 어휘 만들고 단어 횟수만 세서 벡터로 만든다. 이게 너무 간단하니 TF-IDF와 임베딩이 나온 것.
이미 frequent한 I 에서 I1 -> I2를 만드는거니까 규칙 단계에서는 support를 신경쓰지 않고 confidence만 검사하면 된다.
X = U S V^T
SVD가 데이터 X를 셋으로 쪼갠다 (이게 시작점)
V의 열은 PC의 방향이고, S의 특이값은 그 방향으로 퍼지는 정도
Z = XV (이건 PCA 공식)
Z = XV = U S V^T V = US
X = Z V^T
minPts가 1이면 모든 점이 핵심점이 된다. 이러면 DBSCAN은 거리 엡실론 이하로 이어지는 점을 모두 묶음.
이건 그냥 Single Linkage에서 높이 엡실론으로 덴드로그램 자른거랑 같다.
문서가 길면 그냥 TF가 높아지니까 Scaling이 필요함
sub-linear는 1 + log(횟수). 로그로 눌러버린다
최대 TF Scaling은 그 문서에서 가장 많이 나온 단어로 나눠서 0~1로 맞추고 긴 문서 편향을 제거함
TF만 쓰면 모든 문서에 흔한 단어가 점수를 독식하니 IDF를 사용함 -> TF * IDF 로 최종 계산
df는 그 단어가 몇 개의 문서에 등장하는지를 카운트함
ttf는 그 단어가 전체에서 몇 번 나온지를 카운트함
근데 ttf 대신 df 쓴다. 단어가 한 문서에서만 100번 나오면 ttf는 크지만 df는 1이기 때문 -> 특정 문서 전용단어임을 캐치
희귀할수록 IDF가 올라감
'Computer Science > Data Science' 카테고리의 다른 글
| [Data Science] ETRI 휴먼이해 인공지능 논문경진대회 - 5 (0) | 2026.05.23 |
|---|---|
| [Data Science] ETRI 휴먼이해 인공지능 논문경진대회 - 4 (0) | 2026.05.14 |
| [Data Science] ETRI 휴먼이해 인공지능 논문경진대회 - 3 (1) | 2026.05.09 |
| [Data Science] ETRI 휴먼이해 인공지능 논문경진대회 - 2 (0) | 2026.05.05 |
| [Data Science] ETRI 휴먼이해 인공지능 논문경진대회 - 1 (0) | 2026.05.04 |
댓글
이 글 공유하기
다른 글
-
[Data Science] ETRI 휴먼이해 인공지능 논문경진대회 - 5
[Data Science] ETRI 휴먼이해 인공지능 논문경진대회 - 5
2026.05.23 -
[Data Science] ETRI 휴먼이해 인공지능 논문경진대회 - 4
[Data Science] ETRI 휴먼이해 인공지능 논문경진대회 - 4
2026.05.14 -
[Data Science] ETRI 휴먼이해 인공지능 논문경진대회 - 3
[Data Science] ETRI 휴먼이해 인공지능 논문경진대회 - 3
2026.05.09 -
[Data Science] ETRI 휴먼이해 인공지능 논문경진대회 - 2
[Data Science] ETRI 휴먼이해 인공지능 논문경진대회 - 2
2026.05.05