결정트리는 Flow-chart와 같이 조건을 가지고 있는 노드를 생성하고 해당 노드에서 참, 거짓을 판단하여 다음 노드로 향하는, Tree Sort 와 비슷한 모델이다. 데이터의 특성에 맞는 조건을 생성하고, 밑으로 쭉쭉 가지를 늘려가며 양성, 음성 클래스를 판단한 뒤, 노드로 떨어지는 샘플의 갯수로 분류를 진행한다. 결정 트리가 가지고 있는 장점은 데이터를 왜 이렇게 예측했는지 설명하기 용이하며, 따로 데이터의 전처리 과정이 필요가 없기 때문이다. 아래 예제와 함께 알아보도록 하자. 우선, 결정 트리를 알아보기 전에 직전 포스팅에서 다뤄본 로지스틱 회귀 모델로 데이터를 분류해보려고 한다. 데이터는 와인의 종류(레드, 화이트)와 도수, 당도, 산도의 컬럼을 가지고 있다. 아래와 같이 데이터를 준비하고, ..
머신러닝 모델에서 훈련 데이터가 매일 추가되는 경우를 생각해보자. 훈련 데이터가 한번에 준비되는 것이 아니라, 조금씩 전달된다고 가정하면, 어떤 알고리즘으로 모델을 만들어야 할 지 애매하다. 데이터가 쌓일 때까지 무작정 기다렸다가 훈련을 시키는 것도 이상하고, 기존 훈련 데이터에 새로운 데이터를 항상 추가한 모델을 매일 다시 훈련한다면 나중에는 훈련 데이터가 감당할 수 없을만큼 많아질 것이다. 그렇다고 기존 훈련 데이터를 버리자니, 버린 데이터가 특정 타깃의 마지막 데이터였다면 더 이상 그 타깃은 제대로 예측할 수 없을 것이다. 가장 좋은 방법은 훈련한 모델을 버리지 않고 새로운 데이터에 대하여만 조금씩 더 훈련을 하는 것이다. 이렇게 하면 훈련한 모델을 버리지 않고, 사용한 데이터를 모두 유지할 수 있..
지금까지 지도 학습을 통해 데이터를 분류하거나 회귀를 이용하여 수를 예측하는 모델을 배웠다면, 특정 데이터가 도출될 확률을 구하는 건 어떨까? 확률은 숫자니까 회귀로 풀어야 하나? 혹은 "특정" 데이터가 나올 확률이니 분류인가? k-최근접 이웃 알고리즘과 선형 회귀 알고리즘 모두 어떤 데이터가 나올 확률을 구할 수 있도록 제공한다. 로지스틱 회귀에 대하여 다루기 전에 k-최근접 이웃 알고리즘으로 특정 데이터를 분류할 확률을 먼저 구한 뒤, 그 한계를 알아보자. 예제에서 사용할 데이터는 생선의 종 이름과 무게, 길이, 대각선, 높이, 너비 데이터이다. 우선, k-최근접 이웃 알고리즘을 사용하여 각 특성에 맞는 생선 종류를 예측하는 모델을 만들자. import numpy as np import matplot..
직전 포스팅에서 선형 회귀를 다루며, 농어의 길이에 따른 무게를 예측하는 모델을 만들었었다. 길이라는 1개의 특성으로 이차 방정식을 도출하여 값을 예측했는데, 길이 뿐만 아니라 다른 특성이 추가가 된다면 방정식에 고차항이 추가가 되며 그 계수 또한 맞춰서 늘어난다. 이를 다중 회귀(multiple regression)이라고 한다. 다중 회귀는 가지고 있는 특성 데이터를 각각 제곱하여 추가하며, 각 특성을 서로 곱하여 또 다른 특성을 만든다. 이렇게 기존의 특성을 사용해 새로운 특성을 뽑아내는 작업을 특성 공학이라고 부른다. 바로 예제로 한번 확인해보자. 이번 예제는 농어의 길이 뿐만 아니라, 높이, 두께 데이터도 함께 사용할 것이다. 아래와 같이 pandas를 사용하여 csv 데이터를 가져와서, 이중 배..
주어진 데이터를 가지고 학습하여 테스트 데이터를 "분류"하는 k-최근접 이웃 알고리즘에 대하여 직전 포스팅에서 다뤘다. 물론 k-최근접 이웃 알고리즘으로도 특정 값을 예측하는 "회귀" 모델을 만들 수 있지만, 그 한계가 명확하다. 아래 예제로 한번 k-최근접 이웃 알고리즘의 회귀 모델이 갖는 한계점을 확인해보자. perch_length = np.array([8.4, 13.7, 15.0, 16.2, 17.4, 18.0, 18.7, 19.0, 19.6, 20.0, 21.0, 21.0, 21.0, 21.3, 22.0, 22.0, 22.0, 22.0, 22.0, 22.5, 22.5, 22.7, 23.0, 23.5, 24.0, 24.0, 24.6, 25.0, 25.6, 26.5, 27.3, 27.5, 27.5, ..
k-nearest neighbors(k-최근접 이웃, kNN) 알고리즘은 이해하기 쉽고, 자주 사용되는 알고리즘이다. 그 이름에서 알 수 있듯, 비교 대상이 되는 데이터 포인트 주변에 가장 가까이 존재하는 k개의 데이터와 비교하여 가장 가까운 데이터 종류로 타깃 데이터를 판별하는 원리이다. 즉, 주어진 데이터셋 내에서 가장 가까운 k개의 이웃을 찾아, 그 이웃들의 Label 값으로 현재 데이터의 레이블 값을 결정한다. 예를 들어, 붓꽃의 꽃받침 길이와 폭을 바탕으로 붓꽃의 종을 분류하는 문제를 생각해보면, k-최근접 이웃 알고리즘을 사용하여 붓꽃이 어떤 종에 속하는지 예측할 수 있다. 새로운 붓꽃과 가장 가까운 k개의 붓꽃을 찾아 그 붓꽃들이 어떤 종에 속하는 지 보고, 그 종들 중 가장 많은 종으로 새..
머신러닝의 학습 방법은 크게 지도 학습(supervised)과 비지도 학습(unsupervised)으로 나눌 수 있다. 지도 학습이란 라벨링이 된 데이터를 학습시키는 것을 의미하며, 비지도 학습은 라벨링이 되지 않은 데이터를 학습시키는 것이다. 이때, 라벨링이란 트레이닝 데이터에 정답이 표시된 것을 의미하며, 정답 부분을 가리켜 타깃 데이터라고 한다. 또한 타깃의 형태에 따라 지도 학습은 세부적으로 두 가지 종류로 나타낼 수 있다. 타깃이 데이터를 클래스 별로 구분하는 범주형인 경우, 이를 분류(classification) 문제라고 하고, 연속형 숫자인 경우에는 회귀(regression) 문제라고 한다. 본격적으로 머신 러닝을 배우기 전에 데이터의 형태에 따른 접근 방식을 알아야 하며, 방식에 따른 트레..
사실, 한참 전에 풀이를 시작했는데, 연결리스트의 조회나, 삭제와 같은 기능의 구조를 이해하고 구현해서 문제에 적용시키는데 굉장히 오랜 시간이 걸렸다. 자바의 경우 Util 패키지에서 해당 자료 구조의 객체를 지원하지만, 파이썬은(아마 내 생각엔) 리스트가 어느 정도 연결리스트의 역할을 하기 때문에 굳이 내장 객체를 지원하지 않는 것 같다. 바로 풀이를 보자. class ListNode: def __init__(self, data): self.val = data self.next = None class LinkedList: def __init__(self): head_node = ListNode(None) self.head = head_node self.tail = head_node self.num_of..
간단하게 구현한 단방향 연결 리스트이다. 이렇게 아예 구현해놓고 문제를 푸는 게 삽입, 삭제, 조회 등을 추가하여 사용하기가 훨씬 편리할 거 같아서 작성했다. class ListNode: def __init__(self, data): self.val = data self.next = None class LinkedList: def __init__(self): head_node = ListNode(None) self.head = head_node self.tail = head_node self.num_of_data = 0 def insert(self, data): insert_node = ListNode(data) self.tail.next = insert_node self.tail = insert_nod..
앞서도 몇번 언급했듯이, ArrayList와 같은 연결 리스트는 자료들이 노드로 하나씩 연결되어 있는 형태이기 때문에, 자료의 삽입이나 삭제는 O(1) 의 매우 유리한 시간 복잡도를 가지지만, 탐색은 노드를 따로 불러올 수 없고, 리스트 전체를 훓어가면서 찾아야 하기 때문에 최악의 경우 O(n)의 복잡도를 가진다. 그렇기 때문에 연결 리스트를 탐색, 비교하는 문제를 풀 때, 문제가 조금 복잡해지면 빈번하게 타임 아웃이 일어나기 쉽다. 이번 포스팅에서는 이런 연결 리스트의 탐색 속도를 2개의 포인터를 이용하여 조금이나마 향상시킬 수 있는 방법인 Runner 기법에 대하여 다룰 것이다. 1. Runner? Runner 기법은 연결 리스트를 순회할 때, 2개의 포인터를 동시에 사용하는 기법이다. 한 포인터가 ..
- javascript
- 정보보안기사 #실기 #정리
- await
- redux-thunk
- AsyncStorage
- 이탈리안 레스토랑
- Promise
- Async
- 인천 구월동 맛집
- redux
- 파니노구스토
- 인천 구월동 이탈리안 맛집
- 맛집
- react
- react-native
- Total
- Today
- Yesterday