분류 전체보기 170

KNN (K-Nearest Neighbor)

0. Intro KNN이란 k의 개수만큼 주변의 샘플 정보를 이용해서 새로운 관측치의 종속변수(y값)을 예측하는 지도학습 1. KNN (K-Nearest Neighbor) 1.1 KNN (K-Nearest Neighbor) ? 위 그림에서, 빨간색과 파란색의 종속변수의 범주가 있습니다. 일반적으로, 새로운 관측치인 녹색을 분류해야 하는데, 실선으로 k가 3일 때에는 빨강으로, 점선으로 k가 5일 때에는 파란색으로 판별합니다. 가까운 곳에 위치한 것에 따라 가중치(Weight)를 많이 주는 방법도 있습니다. 그리고, KNN은 종속 변수가 어떻게 되는가에 따라 방법이 달라집니다. 범주형 변수의 경우 가장 많이 나타나는 범주로 y를 추정하고, 연속형 변수의 경우 KNN의 평균으로 y를 추정합니다. 중요한 것은..

데이터로 좋은 결정 내리는 방법, 의사결정 나무

0. Intro ‘특정 질병에 가장 영향을 크게 미치는 유전자가 무엇인지 알 수 있을까?’, ‘카드사에서 고객의 특성에 맞춰 어떤 혜택이 가장 적합할지 어떻게 파악할 수 있을까?’ ​ 이러한 질문들에 대답할 수 있는 기술이 바로 ‘알고리즘’입니다. 알고리즘이란 어떠한 문제를 논리적으로 해결하기 위한 절차를 말하는데요. 이러한 알고리즘을 연구하는 분야를 머신러닝이라고 부릅니다. 머신러닝의 작업 분야는 크게 지도학습과 자율학습으로 나뉘죠. 이 중 지도학습은 다시 분류와 예측으로 나누어지는데, 알고리즘은 분류와 예측 작업을 통해 데이터로부터 의미 있는 결론을 이끌어내는 역할을 합니다. 이러한 알고리즘은 빅데이터의 발달과 함께 매우 빠르게 발전하고 있습니다. ⓒPixabay 구글의 데이터 분석 커뮤니티 캐글(K..

인공 신경망의 구조

0. Intro 텐서플로(Tensorlfow) 2.0 기반의 고수준 API인 케라스(Keras)를 중심으로 딥러닝 모델을 구축하고 훈련하는 방법을 소개한다. 케라스는 딥러닝 모델을 간단한 함수 형태로 구현했기 때문에 배우기 쉽고, 대부분의 딥러닝 문제를 해결할 수 있을 만큼 성능도 뛰어난 편이다. ​ 인공 신경망은 뇌 신경계의 정보 처리 구조를 모방하여 만든 컴퓨터 계산 알고리즘이다. 뇌 신경은 수많은 신경세포(뉴런, neuron)들이 연결되어 정보를 처리하고 전달한다. 신경세포는 신호를 입력받아 다음 신경세포에 출력 형태로 연결한다는 점에서 입력과 출력을 갖는 함수와 비슷하다. 인공 신경망은 이처럼 수많은 신경세포가 연결되는 뇌 신경계와 같이 수많은 함수를 서로 연결하여 복잡한 정보를 처리하는 네트워크..

[CSAPP] Ch 2. 정보의 표현과 처리 : (2) 정수의 표시

2.0 Intro 이 절에선 정수를 인코딩하기 위해 사용할 수 있는 두 가지 방법 (양수만 표시할 수 있는 방법과, 음수, 0, 양수 모두를 표시할 수 있는 방법) 에 대해 설명한다. 나중에 이들이 수학적 특성, Low-Level 수준을 볼 때 매우 연관되어있음을 알게 될 것이다. 그리고 인코딩된 정수를 다른 길이의 표현에 맞도록 조절하기 위해 확장하거나 축소하는 효과에 대해서도 살펴본다. 2.1 정수형 데이터 타입 2.1.1 C의 다양한 정수형 데이터 타입 아래 두 그림에는 전형적인 32bit와 64bit 프로그램들에서 이들이 갖는 값의 범위를 나타내었다. 각 타입은 unsigned로 선언되어 표시된 숫자가 모두 양수인지, 아니면 기본타입으로 음수도 나타낼 수 있는지 뿐만 아니라 키워드 char, sh..

[CSAPP] Ch 2. 정보의 표현과 처리 : (1) 정보의 저장

Ⅱ. 정보의 표현과 처리   2.0. Intro   현대의 컴퓨터는 두 개의 값을 갖는 신호로 표현되는 정보를 저장하고 처리한다. 이진수인 비트는 디지털 혁명의 근원인다. 이 비트들을 묶어서 가능한 다른 비트 패턴에 의미를 부여하도록 특정 해석방법을 적용하면(PCM), 어떤 유한집합의 원소들을 표시할 수 있게 된다.   이 장에서는 세 개의 가장 중요한 숫자 표현에 대해 살펴본다.    비부호형 인코딩 : 어떤 연산의 경우에는 그 결과값이 표시할 수 없을 정도로 커서 오버플로우를 발생시킬 수 있다.   2의 보수 인코딩 : 양수, 또는 음수값을 같는 부호형 정수를 표시하는 가장 일반적인 방법이다.    예상된 결과를 컴퓨터가 만들어 내지 않았을지는 몰라도, 적어도 일관된 결과를 만든다.   부동소수점 인..

The Stack : 인터럽트 메커니즘(Interrupt Mechanism)

0. Intro TRAP 명령어를 활용하면 운영체제의 코드에 해당하는 서비스 루틴을, JSR/JSRR 명령어를 활용하면 프로그래머가 직접 작성한 서브 루틴을 실행한 뒤 원래 프로그램의 실행 흐름으로 돌아온다. 그리고 둘 다 돌아올 때는 RET(= JMP R7) 명령어를 사용한다. 인터럽트 메커니즘도 어찌 보면 비슷할 수 있다. 외부 장치에 의해 인터럽트가 발생하면 그 장치가 요청한 인터럽트 서비스 루틴을 실행하러 잠시 어디론가 갔다가 다시 돌아오기 때문이다. 하지만 인터럽트 메커니즘은 TRAP 서비스 루틴 호출이나 JSR/JSRR 서브 루틴 호출과 그 방식이 아예 다르다. 인터럽트 메커니즘의 중요한 핵심은 해당 인터럽트 서비스 루틴에 갔다가 돌아왔다는 사실을 프로세서가 전혀 알지 못해야 한다는 것이며, ..

Trap Routines and Subroutines - 시스템 함수와 사용자 함수

0. Intro 인간의 뇌가 감당할 수 있는 복잡성에는 한계가 있기에, 인간은 여러 추상화 기법들을 발전시켜 나갔다. 대표적으로 데이터 추상화(Data Abstraction)와 함수 추상화(Functional Abstraction)가 있다. 데이터 추상화(Data Abstraction)는 현실에 존재하는 특정 객체의 복잡한 속성을 딱 필요한 것으로만 단순화하여 표현하는 것을 말한다. 가령 '학생'이라는 객체는 이름, 키, 나이, 학번 등의 속성으로 정의할 수 있다. 반면 함수 추상화(Functional Abstraction)는 자주 수행되는 특정 동작의 코드들을 하나의 뭉치(Segments)로 만들고, 필요할 때마다 그것을 재활용하는 것을 말한다. 그 코드 뭉치(Code Segments)를 컴퓨터 용어로..

IO - 입출력장치

0. Intro 우리는 지금까지 메모리에 올라가 있는 프로그램의 명령어들을 해석하고 실행하는 것과 관련한 내용들을 다루었다. 그러면 이제 다음 물음을 던져야 할 때이다. "메모리의 데이터는 어디에서 온 것일까??", "메모리의 데이터는 어떤 과정을 거쳐서 인간이 볼 수 있는 형태로 출력이 되는 것일까?" 이 물음에 대한 답은 바로 입출력(I/O) 장치에서 찾을 수 있다. 프로그램을 실행하는 것도 결국은 하드디스크라는 외부 장치로부터 프로그램 코드를 입력받아 메모리에 올리는 것으로 해석할 수 있다. 이번 포스팅에서는 그러한 입출력 장치에 대해 조금 더 자세히 알아보도록 할 것이다. 1. 입출력 장치 (Input and Output Device) 1-1. 장치의 분류 I/O 장치는 다음과 같이 대략 두 가지..

어셈블리어, 어셈블러 (Assembly Language)

이전엔 ISA에 대해 공부했고, 그 규칙을 이해하여 기계어를 코딩하면 CPU에게 원하는 동작을 수행시킬 수 있음을 알게 되었다. 그러나 0과 1만으로 직접 코딩을 하는 건 너무 불편했다. (오래 전 전산학 전공하신 분께서 천공 뚫는게 지겨워 그만두셨다는걸 힘껏 이해할 수 있었다.) 그래서 인간에게 조금 더 친숙한 형태로 어셈블리어(Assembly Language)가 고안이 되었고, 그 결과 프로그램 개발 속도가 혁신적으로 향상되었다. 어셈블리어는 저급 언어(Low-level Language)라고 부르기도 한다. CPU가 저급 언어로 작성된 프로그램을 이해해서 실행하려면 변환 과정이 필요하다. 저급 언어로 작성된 코드는 어셈블러(Assembler)라는 프로그램에 의해 CPU의 ISA 체계에 맞게 기계어로 ..

Sampling & Quantization

표본화(Sampling) 소리는 연속적인 데이터이다. 소리 데이터를 컴퓨터에 저장하기 위해서는 Sampling과 Quantization을 통해 discrete하게 표현해야 한다. 먼저, 실수형태인 시간을 저장하기 위해 sampling을 진행한다. □ Sampling이란 시간을 이산적인 구간으로 나누는 것이다. 즉, 샘플링 간격에 따라 amplitude를 측정하는 것이다. 1초의 연속적인 신호를 몇개의 숫자들의 sequence로 표현할 것인가를 sampling ratefs​이다. sampling rate가 클수록 즉, 자주 sampling할 수록 원본 데이터와 비슷할 것이다. 그러나 그만큼 저장해야 하는 데이터의 양이 늘어나게 된다. sampling rate가 작게 되면 아래와 같이 aliasing이 일어..