PCA비지도 학습의 일종으로 한국어로 번역하면 '주성분 분석'이라고 부른다.지금까지 정리한 내용들 중에 중요도 순위를 매기면 1, 2위를 다툴 정도로 머신러닝에서 매우 중요한 개념이다. 차원의 저주 지금까지는 데이터나 데이터들을 다루는 작업과 관련된 함수를 찾았었다.회귀는 데이터 자체와 직접 관련된 함수였고, 분류와 클러스터링은 데이터를 다루는 작업과 관련된 함수였다. 그런데 28*28 크기의 작은 흑백 이미지 데이터를 분류하려고 하면, 하나의 데이터당 28*28 = 784 개 픽셀 정보를 다루다보니 kNN같은 단순한 알고리즘에서도 동작 시간이 오래 걸렸다.게다가 흑백 이미지가 아니라 실제와 비슷한 이미지라면 rgb 값이 들어가면서 차원이 하나 더 늘어나 784 * 3 이 된다. 그래서 이렇게 실..
K-Means지금까지는 지도학습의 예시로 대표적인 회귀와 분류 모델의 학습 알고리즘을 정리하였다.이번 글에서는 비지도학습의 예시로 K-Means 를 정리해본다. K-means는 라벨링이 되어있지 않은 데이터들을 비슷한 특징을 가진 데이터들끼리 묶어서 라벨링하는 '클러스터링' 에 사용하는 알고리즘이다. 이때 k는 클러스터의 개수를 가리키는 하이퍼파라미터이다.K-means는 클러스터링 알고리즘으로 굉장히 간단하고 유명하면서 또 강력하다. K-Means 는 라벨이 없는 비지도학습 알고리즘이므로, K-Means 알고리즘을 적용하면 그제서야 데이터들이 어떤 클러스터에 속해있는지 라벨이 생기게 된다. 클러스터링은 이미지에 적용해서 비슷한 rgb 값을 갖고 있는 픽셀들끼리 분류할 수도 있고,의류회사의 경우 사람들..
Polymorphism 한국어로는 '다형성' 이라고 번역되나 abstraction 과 마찬가지로 영어 단어로 봐야 그 의미가 제대로 이해된다.polymorphism 은 poly + morph + ism 의 합성어로, poly 는 '다수의' 라는 의미를 갖고 있고, morph 는 '모양' 을 가리킨다.그래서 한국어로도 다형성이라고 번역을 한 것인데, 사실 코드에서 '모양' 이라고 하면 잘 와닿지 않는다. 소스코드에서 '모양, 형태' 라는 말을 더 와닿게 번역하면 '구현' 이 된다.즉, polymorphism은 구현이 다양하게 있다는 뜻이다.이 말은 다음과 같이 표현할 수 있다. one interface, multiple implementation 말 그대로 하나의 인터페이스에 여러가지 구현이 존재할 수 있..
SVM 개요SVM은 전통적인 분류 알고리즘 중 가장 성능이 좋은 알고리즘으로, 딥러닝이 자주 쓰이는 요즘도 종종 사용된다고 한다. SVM의 기본적인 아이디어는 데이터를 분류하는 기준선을 찾는 것이다.예를 들어 고양이 사진과 개 사진을 분류하는 경우를 생각해보자.고양이 사진을 나타내는 점들과 개 사진을 나타내는 점들이 위 그림과 같이 분포되어 있을 때, 이 두 그룹을 나누는 선을 찾아야 한다.그리고 새로운 데이터가 주어졌을 때는 그 데이터의 위치가 구분선 기준으로 어느쪽에 있는지 확인해서 분류하게 된다. 그런데 데이터를 구분하는 선은 위 그림과 같이 다양하게 존재한다.이 중에서 '가장 좋은 선'은 어떤 선일까? 가장 좋은 선을 정하는 기준을 생각할 때 떠올리기 좋은 아이디어는 선형회귀와 비슷하게 ..
이번 글부터는 객체지향의 주요 개념을 소프트웨어 개발 방법의 관점에서 살펴보려고 한다. 먼저 객체지향이 등장한 배경은 SW의 모듈화를 위해서였다.모듈은 소프트웨어를 설계할 때 '독립적인 기능을 수행하는 개발단위'를 말한다.기능이 독립적이라는 뜻은 이 기능이 다른 모듈의 변화에 영향을 주지도, 받지도 않는다는 것을 말한다. HW에서의 모듈화를 생각해보자.컴퓨터를 조립할 때, CPU, RAM, SSD, 그래픽카드, 네트워크카드, 파워, 팬, 마더보드 등의 부품이 필요하다.그런데 이 각각의 부품들은 모두 서로 다른 제조사에서 만든다.하지만 이 부품들을 잘 모아서 조립하면 하나의 온전한 컴퓨터로서 기능한다.다른 부품을 그대로 두고 RAM 만 바꾸거나, 그래픽카드만 바꾸거나 해도 다른 하드웨어의 동작에는 전혀 영..
AgileSoftware Process글에서 Agile을 Plan-Driven 방식과 비교하며 사용자의 요구사항 변경에 민첩하게 반응하는 개발 방법론이라고 정리했었다.이번 글에서는 이 애자일 방법론에 대해 더 자세히 정리해본다. 애자일 개발 방법론이 등장한 배경은 기존 개발 방법론에서 발생하는 오버헤드에 대한 부담이었다.예를 들어 waterfall 방식은 각 단계가 끝날 때마다 document가 나오는 것이 장점이었지만, 고객의 요구사항이 빠르게 바뀌는 상황에서 매번 바뀌는 요구사항에 맞춰 문서화를 하고나서 개발하는 것은 오버헤드가 존재한다. 그래서 애자일은 요구사항이 변화할 때 부가적인 작업 없이 빠르게 대응해서 software delivery time을 줄이는 것을 목표로 한다. 과거의 plan-ba..
sklearn 라이브러리에는 다양한 데이터 셋이 존재한다.그 중에서 Iris (붓꽃) 데이터 셋을 사용해 붓꽃의 종류를 구분하는 모델을 KNN으로 만들어보자. 먼저 붗꽃 데이터를 가져온다.붓꽃 데이터는 이렇게 4개의 실수로 구성된 리스트의 나열이다. 4개의 실수는 각각 꽃받침과 꽃잎의 크기를 나타낸다.iris 데이터는 data 부분과 target 부분이 있다. target 부분에는 data 영역에 있는 붓꽃이 어떤 class 의 붗꽃인지를 나타내는 정보가 같은 인덱스에 맞춰 들어가있다.이제 이 데이터를 사용하여 새로운 붓꽃의 꽃받침과 꽃잎 길이가 주어졌을 때 이 붓꽃의 class 가 어디에 속하는지 분류해보자. kNN 알고리즘으로 분류 모델을 만들기에 앞서 성능을 테스트할 테스트 데이터를 분리..
RUP(Rational Unified Process) (⭐️⭐️⭐️)RUP는 Rational 라는 회사에서 만든 소프트웨어 개발 프로세스를 말한다.보통 3번째 글에서 정리한 소프트웨어 모델들을 조합하여 소프트웨어를 개발하는데, 각자 자신들만의 개발 방법론을 쓴다고 해도 그 3가지를 조합해서 사용하는 것은 비슷하기 때문에 RUP 만 살펴봐도 다른 개발 방법론을 이해하는데는 충분하다. RUP에서는 크게 3가지 perspective를 가지고 process 를 설명한다. dynamic perspectivedynamic perspective 에서는 RUP 의 소프트웨어 개발 단계(Phase)를 크게 4개로 나눈다.각 단계는 그 안에서 반복될 수 있으며, 전체 프로세스도 계속해서 반복되는 것을 나타낸다. 각각의 P..
모든 소프트웨어 개발 방법론에는 공통적으로 Specification - Design and Implementation - Testing - Maintenance 의 5단계가 들어간다.Waterfall은 각 단계가 1번씩만 등장하며 하나의 단계가 끝나야만 다음 단계로 넘어갈 수 있었고, Incremental Development 는 이 단게가 반복되었다.이제 각각의 자세한 단계를 정리해보자. Software Specification흔히 '스펙' 이라고 부르는 specification 은 이름 그대로 소프트웨어 개발에 있어 필요한 사항을 명시하는 과정이다.이때 스펙에 명시하는 사항에는 크게 소프트웨어에서 필요로 하는 기능과 시스템 기능과 개발 단계에서 나타나는 제약 조건이 있다.제약 조건에는 소프트웨어가 동..
지난 글까지 지도학습으로 만들 수 있는 모델 중 선형회귀 모델에 대해서 정리하였다.이번 글부터는 지도학습으로 만들 수 있는 분류 모델 중 KNN 이라는 모델에 대해 정리해본다. KNN내가 사용하던 핸드폰을 중고로 판매한다고 생각해보자.그러면 휴대폰 사양도 올리고, 사진도 올리고, 가격도 올릴 것이다.이때 중고폰의 가격을 정할 때는 '시세'를 참고해서 정한다.'시세'라고 하면 나와 같은 기종, 사양, 상태의 핸드폰이 최근 얼마에 거래되고 있는지를 보는 것이다. 기계학습에서는 '사양, 기종, 상태'와 같은 시세 평가 기준 역할을 하는 것을 가리켜 '피처' 라고 부른다.현재 데이터의 피처를 알고, 이 피처와 비슷한 피처들을 찾아 그 피처들의 가격과 비슷하게 가격을 매기는 것과 같다. KNN 알고리즘을 사용한 ..