목록분류 전체보기 (184)
영국 척척석사 유학생 일기장👩🏻🎓
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/uK6qt/btsx3FV89B1/DKdAOushOhbJ1koWqISrvk/img.png)
1. 스텀프 랜덤 포레스트를 만들 때와 똑같이 에다 부스트에서도 수많은 결정 트리들을 만듭니다. 랜덤 포레스트에서 만드는 트리들은 깊이가 조금 있었는데 에다부스트에서는 깊은 결정 트리들이 아니라 root 노드 하나와 분류 노드 두 개를 갖는 얕은 결정 트리를 만듭니다. 예를 들면 교통사고 데이터를 분류하고 싶다고 합시다. 뿌리 노드의 질문이 속도가 80km를 넘었는지 안 넘었는지, 그리고 넘었으면 사망, 넘지 않았으면 생존 이렇게 예측하는 단순한 트리인 입니다. 이런식으로 하나의 ㅈ리문과 그 질문에 대한 답으로 바로 예측을 하는 결정 트리를 나무의 그루터기를 의미하는 스텀프라고 합니다. 이런 식으로 스텀프를 만들게 되면 성능은 주로 50%보다 조금 나은 성능을 갖게 됩니다. Boosting 기법은 성능이..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/tXsMb/btsxzYB8jOx/zDhM72QK3t9ZDw2c9EMYrk/img.png)
랜덤 포레스트는 수많은 트리들을 임의로 만들고, 이 모델들의 결과를 다수결 투표로 종합해서 예측하는 모델입니다. 트리를 많이, 임의로 만들기 때문에 랜덤 포레스트라는 이름을 갖습니다. 랜덤 포레스트에서 임의성을 더하는 요소는 두가지가 있습니다. 그 중 Bootstrapping에 대해 알아보겠습니다. 1. Bootstrapping bootstrapping은 갖고 있는 데이터 셋을 이용해서 조금 다른 데이터 셋을 만들어내는 방법입니다. 예를 들어 독감 환자 데이터를 사용한다고 해봅시다. 총 다섯 개의 열이 있는데 고열, 기침, 몸살, 콧물, 그리고 환자가 독감인지 아닌지에 대한 데이터가 있습니다. 이 데이터 셋을 이용해서 좀 다른 데이터 셋을 만들어야 합니다. 방법은 간단합니다. 그냥 원래 있던 데이터 셋에..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/GJVQ7/btsxg0aJ09b/PstGCefXzye5egwHMdUcmk/img.png)
결정 트리는 수많은 머신 러닝 알고리즘들 중 가장 직관적인 것들 중 하나입니다. 결정 트리의 장점은 쉽게 해석할 수 있다는 것입니다. 머신 러닝 모델을 해석한다는 건, 예측을 하는 데 있어서 어떤 속성들이 좀 더 중요하게 사용됐고, 어떤 것들이 좀 덜 중요하게 사용됐는지 알아낸다는 것입니다. 예를 들어서 독감 데이터에서 열, 기침, 몸살 이 속성들 중 어떤 것이 독감을 예측하는 데 가장 영향력이 크고, 어떤 것이 덜 중요하게 사용됐는지 알수 있다는 것입니다. 만들어 놓은 트리를 이용해서 각 속성들의 중요도, feature importance를 계산하는 방법에 대해서 알아보겠습니다. 1. 노드 중요도 (Node Importance) 속성들의 중요도를 계산하기 위해서는 먼저 각 노드 하나하나의 중요도, no..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bEbFUl/btswkmeMRpM/Q6ttjm0KvAT7OhM1MKrh7K/img.png)
1. 그리드 나누기display 속성을 grid로 하고 grid-template-columns 속성으로 열을, grid-template-rows 속성으로 행을 나눌 수 있습니다. 예를 들어거 3x2 그리드를 만드는데, 열 너비는 각각 100px, 200px, 100px이고 행 너비는 150px, 200px이라면 아래와 같이 쓸 수 있습니다.display: grid;grid-template-columns: 100px 200px 100px;grid-template-rows: 150px 200px; 2. 유연한 크기 단위fr 이라는 단위를 사용하면 플렉스박스처럼 전체 크기에 대해 상대적인 값을 지정할 수 있습니다. 예를 들어서 3x2 그리드에서 열의 너비를 1:1:1로 하고 싶다면 아래와 같이 하면 됩니다.d..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/brKKe6/btsw2ImD2WE/TDt1TrhTVQcaIFcbg56xj0/img.png)
1. 지니 불순도 머신 러닝 프로그램이 결정 트리를 만들 때는 과제처럼 내용이 정해져 있는 내용으로 만드는 게 아니라 경험을 통해 직접 정해나가야 합니다. 데이터를 분류해 보면서, 각 위치에서 어떤 노드가 제일 좋을지 고르는 것입니다. 선형 회귀 알고리즘의 목적이 학습 데이터를 가장 잘 나타낼 수 있는 일차식을 찾는 거였습니다. 결정 트리의 목적은 학습 데이터를 직접 분류해보면서, 데이터들을 가장 잘 분류할 수 있는 노드들을 찾아내는 것입니다. 이걸 하려면 어떻게 분류하거나 질문을 하는게 좋고 안좋은지에 대한 기분, 즉 손실함수 같은 개념이 필요합니다. 결정 트리에서는 이것을 지니 불순도(gini impurity)를 통해서 합니다. 아래의 예시와 같이 독감 데이터를 추상화해보겠습니다. 파란색은 독감인 데..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/kzi5U/btswbBCdUVM/mkUQkDYXjOCEnl1EbAutl0/img.png)
1. 결정 트리 결정 트리는 예/아니오로 답할 수 있는 어떤 질문들이 있고, 그 질문들의 답을 따라가면서 데이터를 분류하는 알고리즘입니다. 교통사고가 났을 때, 운전자의 생존 여부를 예측하고 싶다고 합시다. 결정 트리는 질문들과 답으로 이루어졌습니다. 여기서 가장 위에 '안전벨트를 했나요?' 이 질문에서 안전벨트를 했으면 여기 왼쪽으로 내려와서 생존, 안했으면 오늘쪽으로 내려와서 사망, 이런 식으로 분류하는 것입니다. 질문에 해당하는 내용이 초록색, 그리고 분류에 해당하는 내용을 보라색이라고 합시다. 지금은 안전벨트의 여부를 물었는데 데이터가 주행 속도, 즉 특정 숫자 값이라면 주행 속오가 시속 100km를 넘었나요? 와 같은 질문을 할 수 있습니다. 이때도 똑같이 예측하려는 데이터에 대한 질문의 답에 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bdh203/btsu0rgClGg/o1K6PvafFtmVCIqQXZKFu1/img.png)
1. 하이퍼 파라미터 (Hyperparameter) 많은 머신 러닝 알고리즘은 학습을 하기 전에 미리 정해 주어야 하는 변수 또는 파라미터들이 있습니다. Losso회귀에 대해 생각해봅시다. Lasso는 L1 정규화를 해주는 회귀 모델 입니다. scikit-learn에서 Lasso 모델을 만들 때 alpha와 max_iter 라는 옵셔널 파라미터를 지정해 줬습니다. model = Lasso(alpha=0.001, max_iter=1000) alpha는 손실 함수의 정규화 항에 곱해지는 상수를 뜻하는데 보통은 그리스 문자 람다를 씁니다. 그리고 max_iter 는 경사 하강을 최대한 몇 번 할지를 정하는 값입니다. 이 두값은 모델이 직접 학습해서 배우는게 아니라 모델을 만드는 사람이 정해줘야 합니다. 이처럼..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bbQUuH/btsu2a5XKWC/wYmLPdFJJsQOxT2OuKQdv0/img.png)
1. 플렉스박스 만들기 display: flex; 2. 기본 축과 교차 축 3. 배치 방향 flex-direction 을 사용하면 기본 축의 방향을 정할 수 있습니다. 이때 기본 값은 row 입니다. 4. 기본 축 정렬 : justify-content justify-content를 사용하면 기본 축 방향으로 정렬할 수 있습니다. 기본 값은 flex-start 입니다. 5. 교차 축 정렬 : align-items 교차 축 방향으로 정렬할 때는 align-items를 사용합니다. 기본 값은 stretch(늘려서 배치하기) 입니다. 6. 요소가 넘칠 때 : flex-wrap 요소가 넘치는 경우 flex-wrap: wrap 을 지정해주면 교차 축 방향으로 넘어가서 배치됩니다. 7. 간격 : gap 숫자를 하나 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/thS6O/btsuG9Vw7y1/rItFA7KQfHpOhmovxBDwzK/img.png)
k-겹 교차 검증 (k-fold cross validation)은 머신러닝 모델의 성능을 조금 더 정확하게 평가할 수 있는 방법입니다. 지금까지 머신 러닝 알고리즘을 적용해서 모델을 만들 떄를 생각해봅시다. 가장 먼저 주어진 데이터를 training set과 test set으로 나눴습니다. training set 은 모델이 인풋 변수를 이용해서 아웃풋 변수를 예측할 수 있도록 학습시키는 데 사용했고, test set은 학습시킨 모델이 얼마나 예측을 잘 하는지, 모델의 성능이 얼마나 좋은지를 파악하기 위해서 썼습니다. 이렇게 모델의 성능을 파악하면 문제가 생길 수 있습니다. 이런 식으로 test set 에서만 성능이 좋은 걸 수 도 있고, 반대로 딱 test set 에서만 성능이 안 좋게 나올 수도 있습니..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/1HqwF/btsuQQfx5XP/dMlClCV6Nb9ODlaa7oAXe0/img.png)
저번 글에서 설명하였듯이 복잡한 모델을 그대로 학습시키면 '과적합'이 됩니다. '정규화'라는 기법은 학습 과정에서 모델이 과적합되는 것을 예방해 줍니다. 1. 정규화 위와 같은 학습 데이터를 이용해서 다항 회귀를 하는 경우를 생각해봅시다. 모델이 과적합돼서 아래와 같은 복잡한 다항 함수가 나왔다고 해봅시다. 과적합된 함수는 보통 위아래로 엄청 왔다갔다 하는 특징이 있습니다. 많은 굴곡을 이용해서 함수가 training 데이터를 최대한 많이 통과하도록 하는 것입니다. 함수가 이렇게 급격하게 변화한다는 것은 함수의 계수, 즉 가설함수의 세타 값들이 굉장히 크다는 뜻입니다. 정규화는 모델을 학습시킬 때 세타 값들이 너무 커지는 것을 방지해 줍니다. 세타 값들이 너무 커지는 걸 방지하면 training 데이터에..