상관 계수는 상관관계 분석에서 두 변수 간에 선형 관계의 정도를 수량화하는 측도

DataFrame의 corr() 메서드를 통해서 쉽게 계산 가능

 

-1 ~ 1 까지 있음

 

두 컬럼의 관계가 1에 가깝다는 것은 : 두 컬럼이 자주 같이 출현

두 컬럼의 관계가 -1에 가깝다는 것은 : 두 컬럼이 아주 드물게 출현, 겹치는 영역이 없음

두 컬럼의 관계가 0에 가깝다는 것은 : 두 컬럼이 관계가 거의 없음

오프라인 평가

사용자의 아이템에 대한 선호 기록과 추천 시스템이 추천한 결과를 비교하여 추천 품질을 평가

 

특징

* 별다른 비용 지출 없이 수집된 데이터만 이용하여 평가 가능

* 여러 모델을 동시에 평가할 수 있음

* 선호 기록이 기존에 사용하고 있는 추천 모델에 영향을 받을 수 있으므로,

실제 사용자의 만족도와 평과 결과가 다를 수 있음

 

온라인 평가

만들어진 추천 시스템을 직접 사용자에게 노출시켜 사용자의 반응을 수집하여 평가

 

특징

* 실제 사용자의 만족도를 측정한다는 측면에서 정화한 방식

* 비용이 비싼 평가 방식 (사용자의 만족도 감소 가능성 등)

 

 

Knowledge-based Filtering

추천하고자 하는 분야의

도메인 지식을 활용해 추천하는 방식

 

ex. 성별/연령별로 많이 팔리는 상품들을 모아 추천에 활용

 

Content-based Filtering

추천하려는 아이템의

콘텐츠 정보를 분석하거나,

정리된 메타 정보를 활용해

콘텐츠별로 특징 정보를 만들고

이를 활용해 추천

 

ex. 상품 페이지 하단에

같은 카테고리에 있는 인기 상품 추천

 

Collaborative Filtering

소비자들의 소비 이력을 사용해

소비하지 않은 새로운 아이템을 추천

 

ex. 클릭 이력을 바탕으로

소비자가 다음으로 클릭할 만한 상품을 추천

검색 필터링

 

정보의 양이 폭증함에 따라 정보 소비자가 원하는 정보를 얻는데 시간과 노력이 많이 필요

정보  소비자에게 원하는 정보를 쉽게 얻도록 도와주는 분야

정보 필터링의 대표적인 분야

* 검색

* 추천 시스템

 

추천 시스템

 

정보 소비가자 원하는 정보를 찾아 소비자에게 추천하는 시스템

검색과의 차이점

* 검색은 소비자가 관심사를 표현하는 검색이라는 행위를 해야함 (액티브)

* 추천은 특별한 행위 없이도 정보 전달이 가능 (패시브)

 

추천 시스템 분류

 

시나리오에 따른 분류

* 연관된 아이템 추천

** 현재 소비되고 있는 아이템과 연관된 아이템을 추천

* 개인화 아이템 추천

**소비중인 아이템이 없더라도, 개인의 관심사를 찾아 소비할 만한 아이템을 추천

피드백 종류에 따른 분류

* 명시적 피드백을 사용하는 추천 시스템

**영화 평점/좋아요, 싫어요와 같이 소비자가 명시적으로 자신의 선호를 표현한 데이터

* 암시적 피드백을 사용하는 추천 시스템

** 웹 페이지 접속 기록(상품), 음악 청취 기록과 같이 소비자가 명시적으로 표현하지는 않았지만,

   선호를 보여주는 피드백

업데이트 주기에 따른 분류

* 오프라인 추천 시스템

** 특정 시점의 데이터를 사용해 추천 결과를 계산하는 방식

* 온라인 추천 시스템

** 지속적으로 사용자의 데이터를 받아 추천 결과를 업데이트 하는 방식 (요즘 거의 주로 사용))

 

현업에서는 다양한 추천 로직이 섞인 하이브리드 추천 시스템을 많이 사용합니다.

Graphics Pipeline

물체를 화면에 그리는데 필요한 과정을 의미한다.

우리가 이용하는 모니터에서 3D 영화나 게임이 재생될 때 사용자는 3차원 물체를 모두 그린다고 착각할 수 있지만

실제로 화면에 그려지고 있는 것은 자원의 효율적인 활용을 위하여 2차원의 형태를 그리고 있는 것이다.

이렇게 3차원의 정보를 2차원의 형태로 변환하고 모니터에 찍어내기 위해 필터링 과정을 거치는 작업을

그래픽스 파이프 라인이라고 한다.

 

본 글에서는 DirectX 11을 기준으로 서술할 예정이고

DX9 나 OpenGL은 세세한 부분은 다르지만 큰 틀에서 보면 비슷하다고 하기에 따로 정리하진 않을 예정이다.

 

Pipelines for Direct3D Version 11 from MS Documentation

마이크로소프트에서 제공하는 도큐먼트에서는 상기 이미지와 같이 그래픽스 파이프라인을 정리하였다.

가장 눈에 띄는 것은 Hull Shader에서 Domain Shader 까지의 과정이다.

이 과정을 Tessellation(테셀레이션) 과정이라고 하며 D9에서 D11로 넘어오면서 추가된 기능이다.

'테셀레이션'은 '쪽매붙임' 이라고도 하는데 바닥에 타일을 깔때 빈틈이 생기는 부분을

더 작은 조각으로 채우는 기법에서 유래된 듯하다.

(옛날부터 있던 기법인데 환경의 문제 때문에 D11이 되서야 실현 가능해졌다고 한다.)

 

이 외에 Vertex Shader, Geometry Shader, Rasterizer, Pixel Shader 등의 과정은 이전 버전에도 존재했으며

각각, 입력받은 정점 정보를 토대로 수학적인 효과를 부여한다거나 (Vertex Shader)

그 처리된 정점을 추가/제거 하여 정점 수를 조절하고 선, 삼각형을 생성한다거나 (Geometry Shader)

만들어진 결과물을 화면에 띄우기 위해 픽셀 이미지화 시키고 다듬고 (Rasterizer)

래스터화 된 이미지의 픽셀들의 색을 계산하는 역할을 한다. (Pixel Shader)

 

 

Graphics pipeline - Win32 apps

This section describes the Direct3D 11 programmable pipeline.

learn.microsoft.com

 

'Computer Science > Computer Graphics' 카테고리의 다른 글

[Computer Graphics] 셰이더의 종류  (0) 2022.10.27

0. Shader

컴퓨터 그래픽스 분야에서 셰이더(shader)는 소프트웨어 명령의 집합으로

주로 그래픽 하드웨어의 렌더링 효과를 계산하는 데 쓰인다.

셰이더는 그래픽 처리 장치(GPU)의 프로그래밍이 가능한 렌더링 파이프라인을 프로그래밍하는 데 쓰인다.

 

1. Vertex Shader

버텍스 셰이더는 주로 물체의 정점 정보에 수학적인 연산을 함으로써 물체에 특별한 효과를 주는 데 쓰인다.

각각의 정점이 정의되는 방법은 다양하다. 정점이 가지는 정보는 예를 들어 3차원의 위치를 나타내는 x, y, z 좌표나,

색상, 텍스처, 조명 정보 등이 있다. 버텍스 셰이더는 이런 정점의 정보값을 변화시켜서,

물체를 특별한 위치로 옮기거나, 텍스처를 바꾸거나, 색상을 바꾸는 등의 일을 할 수 있다.

하지만 기존의 정점을 지우거나 새로운 정점을 추가하는 등의 작업은 할 수 없다.

 

2. Geometry Shader

지오메트리 셰이더는 버텍스 셰이더에서는 할 수 없는 점이나, 선, 삼각형 등의 도형을 생성할 수 있는 기능이 있다.

지오메트리 셰이더 프로그램은 버텍스 셰이더가 수행되고 난 뒤에 수행된다. 지오메트리 셰이더 프로그램은 

버텍스 셰이더를 거쳐온 도형 정보를 입력받는데, 예를 들어 정점 3개가 지오메트리 셰이더에 들어오면,

셰이더는 정점을 모두 없앨 수도 있고 더 많은 도형을 만들어 내보낼 수도 있다.

지오메트리 셰이더를 지나간 도형 정보는 레스터라이즈를 거친 뒤 픽셀 셰이더를 통과하게 된다.

지오메트리 셰이더는 테셀레이션이나 그림자 효과, 큐브 맵을 한번의 처리로 렌더링하는 데에 주로 쓰인다.

지오메트리 셰이더는 어셈블리어나, Cg, HLSL, GLSL 등으로 프로그래밍할 수 있다.

지오메트리 셰이더는 DirectX 10 버전부터 시작되었으므로, DirectX10 버전 이상의 HLSL로만 프로그래밍 할 수 있다. OpenGL 은 3.2 이상부터 GLSL 로 프로그래밍 할 수 있다.

 

3. Fragment Shader

프래그먼트 셰이더는 오브젝트가 화면에서 차지하고 있는 모든 픽셀마다 실행되는 프로그램이며

보통 각 픽셀의 컬러를 계산하고 출력하기 위해 사용된다. 화면에는 보통 수백만 개의 픽셀이 있으며

프래그먼트 셰이더는 이 모든 픽셀에 대해 실행된다.

프래그먼트 셰이더를 최적화하는 것은 전반적인 게임 성능에 있어 매우 중요한 부분이다.

 

4. Pixel Shader

픽셀 셰이더는 렌더링 될 각각의 픽셀들의 색을 계산한다.

때문에 픽셀 셰이더는 최종적으로 픽셀이 어떻게 보일지를 결정한다.

픽셀 셰이더는 간단하게 언제나 같은 색을 출력하는 간단한 일에서부터, 텍스처로부터 색을 읽어오거나,

빛을 적용하는 것, 범프 매핑, 그림자, 반사광, 투명처리 등 복잡한 현상 등을 수행할 수 있다.

픽셀 셰이더는 각각의 픽셀들이 렌더링될 때 수행되기 때문에, 다른 픽셀들과 아무런 연관이 없다.

픽셀 셰이더는 오직 한 픽셀만을 연산하기 때문에, 주변의 픽셀이나, 그리는 도형에 대한 정보를 알 수 없다.

이 때문에 픽셀 셰이더는 스스로 매우 복잡한 효과를 만들어 낼 수는 없다.

픽셀 셰이더는 픽셀의 색 말고도 깊이(Z버퍼에 쓰인다)나 또 다른 색(다른 렌더 목표물에 쓰인다)을 출력할 수 있다.

 

'Computer Science > Computer Graphics' 카테고리의 다른 글

[Computer Graphics] Graphics Pipeline  (0) 2022.11.08

1. 해시

  • 각각 데이터를 고유한 숫자 값으로 표현하여 데이터의 존재 여부를 확인하거나 또는 원본 데이터를 추출하는 과정
  • 빠른 자료 탐색 ( O(1) )
  • 충돌 시, 체이닝( 연결 리스트 뒤에 연결 )과 오픈 어드레싱( 테이블의 빈 곳을 찾아(선형, 제곱) 저장 )을 사용
  • C++은 체이닝 사용 ( std::unordered_set, std::unordered_map 체이닝 사용 시 multi를 사용)

해시의 형성 과정. 에밀리아와 조지는 충돌이 일어났다.

 

2. 그래프

  • 한붓 그리기, 오일러 경로
  • 인접 행렬( O(N^2) )과 인접 리스트( O(N+M) )를 통해서 프로그래밍 표현 ( N : 정점, M : 에지 )
  • 행렬은 그래프에 간선이 많이 존재하는 밀집 그래프일 경우, 리스트는 간선이 적은 희소 그래프일 경우 사용한다.
  • 그래프 순회( DFS( 재귀함수, 스택 ), BFS() )
  • DFS는 경로의 특징을 저장해둬야 하는 문제 BFS는 최단거리 구해야 하는 문제에 각각 유리하다.

 

3. 동적 계획법

  • 복잡한 문제를 여러 개로 나눠서 해결하여 저장한 후, 그 값을 이용하여 전체 문제를 해결.
  • 분할 정복법(ex.퀵 정렬)은 분할된 문제들이 겹치지 않지만 동적 계획법은 작은 문제가 큰 문제의 일부가 될 수 있다.
  • 최적화 문제( 최적해를 구하여 전체 문제의 최적해를 구하는 경우 )와 카운팅 문제에 주로 사용한다.
  • 메모이제이션(top-down) 방법과 타뷸레이션(bottom-up) 방법을 사용.
  • 최소 비용 경로와 정수 삼각형 문제가 유명하다.
  • 기저 위치와 탐색 범위를 조심하여 조건을 설정할 것

1. 재귀 알고리즘 

  • 팩토리얼
  • 피보나치 수
  • 문자열 뒤집기
  • 최대 공약수와 최대 공배수 ( <numeric>(c++17) gcd(), lcm() )
  • 순열 ( <algorithm> next_permutation() )
  • 하노이의 탑

 

2. 정렬 알고리즘

  • 기본 (버블 정렬, 선택 정렬, 삽입 정렬)
  • 분할 정복 (병합 정렬, 퀵 정렬(std::sort(), std::stable_sort()), 힙 정렬)

병합, 퀵의 시간 복잡도

  • std::sort() 사용법 : 연산자 오버로딩( operator< ), 내림차순( greater<T> ), 함수 객체( inline 가능 ), 람다식( [] ))

 

3. 탐색 알고리즘

  • 선형 탐색 ( O(n) )
  • 이진 탐색 ( O(logn), std::binary_search, 이미 정렬 되어있어야 함 )

 

4. 트리

  • 이진 트리 ( 완전, 정, 포화, 균형, 편향 ) : 연결 리스트, 배열 ( 완전 이진 트리 구현에 사용(우선 순위 큐) )
  • 트리 순회 ( 전위, 중위, 후위, 레벨 순서 )
  • 이진 탐색 트리 ( O(logn), 크기 순서가 중위 순서, 중위 순회하면 오름차순, STL 연관 컨테이너(std::set, std::map) )

탐색, 삽입, 삭제 시간 복잡도 비교

 

5. 힙과 우선 순위 큐

  • 힙 ( 완전 이진 트리, 힙 속성에 따라 정의(최대, 최소) ) : 힙 정렬, 우선 순위 큐, 다익스트라 알고리즘

힙과 이진 탐색 트리 차이

  • 우선 순위 큐 ( 힙을 사용하는 것이 가장 효율적, <queue> std::priority_queue )

 

-. STL 컨테이너

1. API (Application Programming Interface)

컴퓨터나 컴퓨터 프로그램 사이의 연결이다.

일종의 소프트웨어 인터페이스이며 다른 종류의 소프트웨어에 서비스를 제공한다.

컴퓨터와 인간을 연결시키는 UI (User Interface)와 반대로, API는 컴퓨터나 소프트웨어를 서로 연결한다.

 

Google API, Kakao API, Riot API 등 기업이 제공하는 REST API를 이용하여

개발하는 소프트웨어와 기업에서 개발한 소프트웨어나 오픈 소스를 연결하여

다양한 기능의 소프트웨어를 편리하게 개발할 수 있다.

 

2. SDK (Software Develoment Kit)

소프트웨어 개발 도구 모음이라고도 한다.

API, IDE, 문서, 라이브러리, 코드 샘플 및 기타 유틸리티가 포함될 수 있다.

프로그램 및 응용 프로그램 개발의 복잡성을 줄이는 강력한 기능 집합이다.

즉, 어떤 소프트웨어를 만들기 위한 도구 모음을 SDK라고 한다. 그리고 이 도구엔 API도 포함되어 있다.

 

3. Library

소프트웨어 개발에서 자주 쓰고 기초적인 함수들을 중복 개발하는 것을 피하기 위해서

표준화된 함수 및 데이터 타입을 만들어서 모아 놓은 것이다.

 

여기에는 구성 데이터, 문서, 도움말 자료, 메시지 틀, 

미리 작성된 코드, 서브루틴(함수), 클래스, , 자료형 사양을 포함할 수 있다.

실제 실행되어 기능을 수행하는 단편화된 프로그램이라는 점이 API와 다르다.

 

이런 라이브러리는 언제 메인 프로그램에 연결하느냐에 따라서 Static Link와 Dynamic Link로 나뉘며,

스태틱 링크는 컴파일 시점에 라이브러리가 링커에 의해 연결되어 실행 파일의 일부분이 된다.

그러나 다이나믹 링크는 각 실행 파일에서 해당 라이브러리의 기능을 사용 시에만,

라이브러리 파일을 참조하여(혹은 다운로드받아) 기능을 호출한다.

 

C++을 예시로 들면 MFC, DirectX, STL, Boost 등을 주로 사용한다.

 

4. Framework

정의된 API를 제공하는 라이브러리의 모음
라이브러리와 달리 애플리케이션의 틀과 구조를 결정할 뿐만 아니라, 그 위에 개발된 개발자의 코드를 제어함.
소프트웨어 개발에 있어 하나의 뼈대 역할을 한다.

라이브러리는 코드 안에서 호출하여 사용하지만 프레임워크는 코드를 호출한다.

 

라이브러리와 코드는 행동을 정의하고 프레임워크는 큰 틀에서 통제 흐름을 제어한다.

즉, 라이브러리 보다 상위의 그룹이다.

자료 구조(Data structure) 란?

  • 자료(data)를 효율적으로 이용하기 위한 자료의 저장 방식
  • 자료의 형식, 자료 사이의 관계, 자료를 이용하는 방식(연산, 함수)
  • 효율적: 실행 시간 + 메모리 사용량  주어진 문제에 적합한 자료 구조를 선택함으로써 효율적인 알고리즘을 사용할 수 있음

자료 구조의 종류

  • 단순구조(Simple Structure)
  • 선형 자료구조(Linear Data Structure)
  • 비선형 자료구조(NonLinear Data Structure)
  • 파일구조(File structure)

조금 더 세부적인 구조

 

+ Recent posts