분류 전체보기
-
ML Development ProcessMachine Learning/Stanford ML Specialization 2024. 4. 28. 12:29
머신러닝을 개발하는 프로세스는 어떻게 진행될까? 먼저 어떤 모델과 데이터등을 사용할지 architecture를 결정하고 모델을 학습시킨다. 이후, bias, variance, error들을 이용해 모델을 진단하고, 만약 결과가 맘에 들지 않는다면 model이나 data를 변경해주고, 이 과정을 반복해준다. Error Analysis위 단계로 스팸 이메일을 찾아내는 Classification 모델을 트레이닝 했는데, 500개의 예시중 Cross Validation에서 100개를 잘못 분류했다고 가정해보자. Error Analysis는 매뉴얼하게 각 에러를 살펴보는 일이다. Cross Validation에서 알고리즘이 잘못 분류한 예제를 직접 찾아서 공통 주제나 속성 등으로 그룹화를 하는것이다. 예를 들어..
-
Bias and VarianceMachine Learning/Stanford ML Specialization 2024. 4. 27. 20:21
머신러닝 클래스들에서 예시로 주는, 잘 정제된 데이터로 모델을 생성하면, 8-90%의 예측률을 보여주는 모델을 만나가 되지만, 실제 현실에서는 그렇지가 않다. 선형 회귀 문제를 생각해보자. Bias가 높아서 underfit하거나, Variance가 높아서 Overfit하는 경우가 발생한다. Underfit의 경우, 오차값이 크기때문에 Jtrain값은 높아지고, Jcv값도 높을것이다. Overfit의 경우, Jtrain값은 낮더라도, Jcv값이 높을수 있다. 이렇게 Jtrain과 Jcv를 비교해서 Underfit인지, Overfit인지 예측할 수 있다. Good fit일 경우에는 Jtrain값도, Jcv값도 낮을것이다. 지난시간, 여러가지 다차항을 이용해서 모델의 성능을 살펴보고, 최적의 모델을 선택하는..
-
Model Selection and EvaluationMachine Learning/Stanford ML Specialization 2024. 4. 27. 11:55
머신러닝 모델을 만들었는데, 결과값이 심각하게 좋지 않을 때, 어떻게 해야할까? 아래를 포함한 여러가지 방법이 있을것이다.트레이닝 데이터 더 수집하기feature를 늘리거나 줄이기ploynomical feature등을 사용하거나 다른 feature engineering 기법을 사용해보기알파/감마값을 줄이거나 늘이기다른 모델 선택하기 Evaluation하지만, 이 모든것을 랜덤하게 해보는것은 수개월이 걸릴지도 모른다. 그렇기 때문에 어떤 문제가 발생하는지 모델을 Evaluation을 잘 하는것은 매우 중요하다. Linear Regression에서, 첫번째로, Train/Test error를 계산하는 방법이 있다. 많이 사용하는 Squared Error Cost를 이용해볼 수 있는데, train값은 0에 가..
-
CTCI | LoopAlgorithm/Linked List 2024. 4. 4. 21:03
Linked List에 있는 Loop을 찾아라 Linked List에 Cycle이 있을 수 있다. 이런 경우, 제일 첫번째 노드를 찾으라는 문제이다. 이 문제는 내가 가장 좋아하는 문제중 하나이다. 플로이드의 거북이와 토끼 알고리즘을 이용해서 풀 수 있는데, 이 알고리즘은 마치 이야기 속에서 튀어나온 듯한, 연결 리스트에서 사이클을 찾는 데에 사용되는 기발한 방법이다. 이 알고리즘은 두 주인공, 느린 거북이와 빠른 토끼를 등장시킨다. 이들은 같은 출발점, 즉 리스트의 헤드에서 여정을 시작한다. 이야기는 이렇다: 거북이는 한 번에 한 걸음씩 꾸준히 앞으로 나아간다. 반면, 토끼는 매우 빠르기 때문에, 두 걸음씩 뛴다. 만약 리스트에 사이클이 존재하지 않는다면, 토끼는 리스트의 끝에 도달하여 멈춘다. 하지만..
-
CTCI | 교집합Algorithm/Linked List 2024. 4. 4. 17:38
두 Linked List의 교집합이 되는 첫번째 노드를 찾아라 두 Linked List가 주어졌을 때, 값이 같은게 아닌, 주소가 같은 노드를 찾아내는 문제이다. 우선 이 LinkedList가 교집합이 없을수도 있고, 두 LinkedList의 길이는 물론 다를것이다. 제일 먼저 떠오르는 방법은, 포인터를 2개 이용하는 방법인데, 첫 리스트의 노드를 outter loop같이 늦게 하나씩 비교하고, 다른 리스트의 노드들을 계속 돌면서 비교하는 방법이다. 하지만, 이 방법은 시간이 많이 쓰인다. N의 노드를 N번 비교해야하기 때문에, O(N^2)만큼의 Time Complexity가 발생한다. Space는 따로 사용하지 않기때문에 O(1) 이다. 우선, 이 breadth force algorithm을 이용해 로..
-
Python BasicMachine Learning/ML Math with Python 2024. 4. 3. 22:59
Basic Operations Python의 Basic한 것들을 다시 상기해보자. Python에서는 변수(Variable)에 정수, 소수, 문자열 등 다양한 값을 넣을 수 있다. # 정수 123 a = 123 # 소수 b = 123.456 # 문자열 c = "hello world!" print()를 사용해 그 값을 콘솔에 표시할 수 있다. a = 123 print(a) 123 print를 할 때, 쉼표를 이용해서 값을 한꺼번에 프린트 할 수 있다. print(a, b, c) 이번엔 연산자를 사용해 여러 연산을 해보자. a = 3 b = 4 # 더하기 c = a + b print("+ :", c) # 빼기 d = a - b print("- :", d) # 곱하기 e = a * b print("* :", e..
-
지도학습 | 결정트리 (Decision Tree)Machine Learning/ML with Python Library 2024. 4. 3. 22:30
Decision Tree 만들기 결정트리(Decision Tree)는 분류와 회귀 문제에 널리 사용하는 모델이다. 기본적으로 결정 트리는 결정까지 Yes/No 질문을 이어 나가면서 학습한다. 마치 스무고개와 같다. 만약 포켓몬을 맞추는 문제라고 해보자. 뮤, 아르세우스, 피카츄, 파이리 중 두가지 질문을 통해 정답을 맞출 수 있다. 이런 방법을 이용해서 지도 학습 방식으로 데이터로부터 학습할 수 있다. Decision Tree를 만들어보자. 2차원 데이터셋을 분류하는 Tree이다. 이 데이터셋은 각 클래스에 데이터 포인트가 50개씩 있고, 반달 두개가 포개진 것 같은 모양을 하고 있다. 결정 트리를 학습한다는 것은 정답에 가장 빨리 도달하는 Yes/No질문 목록을 학습하는 것이다. ML에서는 이런 질문을..
-
지도학습 | 나이브 베이즈 분류기 (Naive Bayes Classification)Machine Learning/ML with Python Library 2024. 4. 3. 22:05
Naive Bayes Classification는 Linear Model과 매우 유사하다. Logistic Regression이나 LinearSVC같은 Linear Classification보다 훈련 속도가 바른 편이지만, 대신 일반화(Generalization) 성능이 조금 뒤진다. 일반화(Generalization)는 모델이 훈련 데이터에 대해서뿐만 아니라, 본 적 없는 새로운 데이터에 대해 얼마나 잘 예측하는지를 나타내는 성능의 척도이다. 나이브 베이즈 분류기는 각 특성을 개별로 취급해서 파라미터를 학습 시키고, 클래스별 통계를 단순하게 취합한다. scikit-learn에서는 GaussianNB, BernoulliNB, MultinomialNB 이렇게 세가지다. GaussianNB는 연속적인 어떤 ..