일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Django
- 컴퓨터 과학이 여는 세계
- Programmers
- mysql
- stored function
- Recommender system
- Til
- 한 권으로 읽는 컴퓨터 구조와 프로그래밍
- 멀티스레딩
- 프로그래머스
- 1463
- 다시 왔다!
- FastAPI
- computer science
- 백준
- 덴드로그램
- Stored Procedure
- CS
- 미래혁신대전
- JP Study
- 퓨처셀프
- 문제풀이
- 선형대수
- 2023
- PCA
- WIL
- MVT
- SQL
- 혼자 공부하는 SQL
- 엘런 튜링
- Today
- Total
Growth Hoon
20231202_TIL_{ 추천 시스템 : [ feature 유사도 평가 metric, KNN], 코딩 테스트 : [프로그래머스 -다트게임] } 본문
20231202_TIL_{ 추천 시스템 : [ feature 유사도 평가 metric, KNN], 코딩 테스트 : [프로그래머스 -다트게임] }
sayhoon 2023. 12. 2. 18:22Feature들 간의 유사도 평가 Metric
1. 유클리드 거리 (Euclidean Distance)
- 거리 기반 유사도 측정 방법
- 여러 차원을 갖는 점과 점 사이의 거리를 계산 할 수 있다.
2. 코사인 유사도 (Cosine Similarity)
- 각도 기반 유사도 측정
- Vector 비교시 가장 많이 사용되는 평가 metric
- Text 데이터가 얼마나 유사한지 많이 사용함
** 두 Metric 비교
- 비교하고자 하는 Data(=Vector)간의 Scale간의 차이가
크게 날 경우 = Cosine Similarity
크지 않을 경우 = Euclidean Distance
그 외 평가 Metric : 멘하탄 거리, 피어슨 상관계수, 민코스키 거리, 자카드 유사도, Mean squared difference 유사도
근접 이웃 추천 알고리즘 ( K - Nearest Neightbor )
- 거리가 가까운 K개의 다른 데이터를 선택하는 알고리즘
- Data와 Data사이에 Euclidean distance와 같은 거리 측정 metric을 활용한다.
해당 알고리즘에서 가장 중요한 점은 K값과 거리를 측정하는 metric
K값에 따라 overfitting or underfitting이 될 수 있다.
-> K값은 홀수로 두는 것이 좋다. (과반수를 선택하기 위함 !)
고려사항
- 변수간의 분포가 다르기 때문에 Data를 정규화 해주어야 한다. ( z-score, min-max scaler ... )
- Data간 거리 측정을 효율화 해야함. (계속해서 계산하는 것은 비효율적)
> Local sensitive hashing, Network based indexer
- 공간상 Data representation 상태를 확인해야함.
> 다른 model에 비해서 outliner에 강건한 편, Data 특성에 따라 위치와 거리가 적절히 분포 되어있어야 함.
프로그래머스 문제 - [1차] 다트게임
def solution(dartResult):
score_list = []
# 10을 구별하기 위한 변수
num = ''
for dart in dartResult:
# 점수 데이터 넣기
if (num != '') and (not dart.isdigit()):
score_list.append(int(num))
num = ''
# 점수 데이터 뽑기
if dart.isdigit():
num += dart
# S, D, T 구분하여 점수 추가
elif dart in ['S','D','T']:
if dart == 'D':
score_list[-1] = score_list[-1] ** 2
elif dart == 'T':
score_list[-1] = score_list[-1] ** 3
# 옵션에 따른 점수 부여
elif dart in ['*', '#']:
if dart == '*':
if len(score_list) == 1:
score_list[0] = score_list[0] * 2
else:
for index in range(1,3):
score_list[-index] = score_list[-index] * 2
elif dart == '#':
score_list[-1] = score_list[-1] * -1
return sum(score_list)
print(solution("1S2D*3T"))
print(solution("1D#2S*3S"))
print(solution("1D2S#10S"))
print(solution("1T2D3D#"))
좀 더 효율적인 코드가 있을 것 같은데 !...
우선 스스로 풀었다는 것에 성취감이 느껴진다 !
'TIL_Today I Learned' 카테고리의 다른 글
20231203_TIL_{ 오전 : [ 프로그래머스 문제, TF-IDF], 오후 : [ 프로그래머스 문제, Django, 아이디어 회의 ] } (0) | 2023.12.03 |
---|---|
20231201_TIL_{오전 : [ 추천시스템 -모델 ] , 오후 [프로그래머스 문제]} (0) | 2023.12.01 |
20231129_TIL_{ 오전 : [프로그래머스 문제 ], 오후 : [추천시스템 공부] } (0) | 2023.11.29 |
20231128_TIL_{ 오전 : [프로그래머스 문제] } (0) | 2023.11.28 |
20231126_TIL_{ 오전 : [ 프로그래머스, Django_migration], 오후 : [선형대수학 - python 정리] } (2) | 2023.11.26 |