Loading...
2024. 7. 5. 00:49

추천시스템 평가 방법

사용자별 상품에 대한 평점을 원소로 가지는 행렬데이터를 생각 평점을 주지 않거나 구매하지 않은 경우에 대해서는 원소가 비어있다.     주어진 데이터를 적절한 비율의 훈련데이터와 평가데이터로 나누고  평가데이터는 추천시스템 모형을 만드는데 사용하지 않는다. 주어지지 않았다고 가정하자.    훈련 데이터를 이용해 만든 추천 시스템으로 평가 데이터의 빈 곳을 추정함     실제 평가데이터와 추정된 평가데이터를 비교하여 모형의 성능을 평가  비교하는 지표로는 MSE,RMSE부터 여러가지를 사용함     추정한 평점으로 순위를 매긴 후 실제 평점으로 매긴 순위와의 상관계수 추천한 상품 중 실제 구매로 이루어진 것의 비율 추천의 순서나 다양성까지 고려한 여러 지표들

가방이 여러개인 multiple 0-1 knapsack(배낭 문제) 해법 배우기

1. 다중 배낭 문제(multiple 0-1 knapsack) https://atcoder.jp/contests/past202206-open/tasks/past202206_h H - Two KnapsacksAtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.atcoder.jp  각각 무게 제한이 A,B인 2개의 가방이 있다고 하자. 이 2개의 가방에 무게가 W, 가치가 V인 물건을 담고자 한다. 2개의 가방에 담긴 물건 가치 합이 최대가 되도록 하는 방법은? 처음에는... 단순히 무게 제한이 A인 가방에 물건을 담고, 담은 물건은 제외한 다음 무..

0-1 knapsack 배낭 문제 해법 반드시 알아야하는 디테일(물건을 중복해서 담는 경우)

12865번: 평범한 배낭 (acmicpc.net) 최대 한도 무게가 K로 정해진 가방 1개에 무게가 W이고 가치가 V인 N개의 물건을 담고자 할때, 가치가 최대가 되도록 담고자 한다. 당연히 하나의 물건은 가방에 한번만 담을 수 있다  1. 1차원 배열 DP[i] = 가방에 담긴 물건들의 무게 합이 i일때, 가치의 최댓값 DP[i] = max(DP[i], DP[i-w] + v) dp = [0]*(K+1)for w,v in bag: for i in range(K,-1,-1): if i-w >= 0: dp[i] = max(dp[i], dp[i-w] + v)print(dp[K])  주목할 부분은 무게 i = 0,1,2,3,..,K가 아..

2024. 7. 2. 00:34

여러가지 matrix decomposition(eigenvalue, singular value, CP, Tucker, non-negative,...)

1. 용어 matrix나 tensor는 데이터 모델링을 위한 도구이다. matrix가 2차원에 숫자를 나열해놓는 것이라면 tensor는 3차원에 숫자를 나열해놓는 데이터 모델링 도구     n*n square matrix에 대한 decomposition으로 1) eigenvalue decomposition, diagonalization은  $A = PDP^{-1}$ 혹은 A가 대칭행렬이면 $A = PDP^{-1} = PDP^{T}$ D는 대각행렬로 원소들이 eigenvalue이고 P는 eigenvector로 이루어진 행렬 eigenvalue decomposition은 다른 수식 $A = \sum_{}^{} \lambda uu^{T}$으로 나타내면 2) spectral decomposition이라고 부름 ..

2024. 6. 26. 03:24

i < j < k < l을 O(N)에 도는 미친 다이나믹 프로그래밍 테크닉

15487번: A[j]-A[i]+A[l]-A[k] (acmicpc.net) 크기 N인 주어진 배열 A에서 i  N은 최대 1000000이라 4중 for문으로 찾는건 당연히 불가능하다 A[j] - A[i]의 최댓값과 A[l] - A[k]의 최댓값을 나눠서 구하면 좋을 것 같다  근데 i  어떻게 구할 수 있을까? 현재 0 ~ j 구간을 보고 있을때 A[j] - A[i]의 최댓값은, A[j] - (A[0] ~ A[j-1]중 최솟값) dp[j] = i  j = 0, 1, 2, 3, ... 가면서 A[j]의 최솟값을 min_value로 항상 갱신해놓는다면, 현재 j에 대해 0~j-1까지 최솟값은 min_value이고 그러므로 A[j] - min_value로 최댓값을 구할 수 있다. 이를 dp[j]에 저장해놓고 ..

게임이론 기본기 익히기1 - 약수 더하기 게임에서 반드시 이기는법

22846번: 인증된 쉬운 게임 (acmicpc.net) 모니터에 1이 쓰여있는데, 두 사람이 선공부터 번갈아가며 모니터에 쓰인 수의 약수를 더해간다. 이 때 제한 k를 초과한 사람이 패배하게 된다. k가 주어질때, 항상 완벽하게 플레이하는 두 사람중 누가 이길까 이런 게임 문제는 보통 1부터 최선의 전략으로 해보면 눈치로 풀면 풀리는 경우가 종종 있더라 실제로 해보면 k = 2,6의 경우에만 선공이 이길 수 있고 나머지는 후공이 반드시 이긴다  k = int(input())if k == 2 or k == 6: print('Kali')else: print('Ringo')  근데 언제까지 이렇게만 할 수는 없지 그리고 이렇게 찾기 힘든 문제도 있더라 개념을 확실히 알아야돼 1) 상..