4-1) 로지스틱 회귀
럭키백은 구성품을 모른 채 먼저 구매하고, 나중에서야 비로소 구성품을 알 수 있는 상품이다. 그러나 마케팅 팀은 럭키백에 포함된 생선의 확률까지 알려주고 싶어한다. (A 럭키백: 도미 확률이 높음!) 머신러닝으로 이 문제를 한번 해결해볼까?
럭키백의 확률
- 주어진 생선은 7개이고, 생선의 크기, 무게 등이 주어졌을 때 7개 생선에 대한 확률을 출력해야 한다.
- 이번에는 길이, 높이, 두께 외에도 대각선의 길이, 무게도 사용할 수 있다.
- 확률은 숫자니까 회귀일까, 7개 생선에 대한 문제니까 분류일까?
데이터 준비
k-최근접 이웃 분류기 확률 예측
- 사이킷런의 KNeighborsClassifier 클래스 객체를 만들고 훈련세트로 모델을 훈련한 다음, 훈련세트와 테스트세트의 점수를 확인해보자.
- 타깃데이터에 7개의 생선 종류가 들어가있고, 이렇게 타깃데이터에 2개 이상의 클래스가 포함된 문제를 다중 분류 라고 부른다.
- 주의할 점은 타깃값 그대로 사이킷런 모델에 전달하면 순서가 자동으로 알파벳 순으로 매겨진다.
- kneighbors(): 주어진 샘플에서 가장 가까운 이웃을 찾아줌. (이웃까지의 거리, 이웃 샘플의 인덱스 반환)
<사이킷런 분류기의 예측 불확실성 추정 함수>
predict_proba: 각 샘플에 대해 어느 클래스에 속할 확률을 0~1로 돌려주고 결과 합은 항상 1이다.
decision_function: 결과값은 (n_samples, n_classes) 이며 각 샘플이 하나의 실수값을 반환한다.
로지스틱 회귀
- 이름은 회귀이지만 분류 모델이다. 이 알고리즘은 선형 회귀와 동일하게 선형 방정식을 학습한다.
z = a * (Weight) + b * (Length) + c * (Diagonal) + d * (Height) + e * (Width) + f
- z는 어떤 값도 가능하지만, 확률이 되려면 0~1의 값이어야 한다. z가 아주 큰 음수일 때 0이 되고, 아주 큰 양수일 때 1이 되도록 바꾸고 싶으면 시그모이드 함수(로지스틱 함수)를 사용해주면 된다. (z가 0일 때는 0.5)
- 사이킷런의 로지스틱 회귀모델인 LogisticRegression 클래스를 사용해보자.
로지스틱 회귀로 이진 분류 수행
- 이진 분류인 경우 시그모이드 함수 출력이 0.5보다 크면 양성 클래스, 0.5보다 작으면 음성 클래스로 판단한다.
- 넘파이 배열은 True, False 값을 전달하여 행을 선택할 수 있다. (= 불리언 인덱싱)
char_arr = np.array(['A','B','C','D','E'])
print(char_arr[[True,False,True,False,False]])
// ['A' 'C']
따라서 이 로지스틱 회귀모델이 학습한 방정식은 다음과 같다.
z = -0.404*(Weight) - 0.576*(length) - 0.663*(Diagonal) - 1.013*(Height) - 0.732*(Width) - 2.161
로지스틱 회귀로 다중 분류 수행
- 이진 분류와 마찬가지로 LogisticRegression 클래스를 사용해 7개의 생선을 분류해보면서 차이점을 알아보자.
- LogisticRegression 클래스는 기본적으로 반복적인 알고리즘을 사용한다. max_iter 매개변수에서 반복 횟수를 지정하며 기본값은 100이고, 충분하게 훈련시키기 위해 반복 횟수를 1000으로 늘린다.
- LogisticRegression은 기본적으로 릿지 회귀와 같이 계수의 제곱을 규제한다. (L2 규제라 부른다.)
- 릿지 회귀에서는 alpha가 커지면 규제도 커지는 alpha 매개변수로 규제의 양을 조절했다.
- 여기에서 규제를 제어하는 매개변수는 C이고, C는 alpha와 반대로 작을수록 규제가 커진다. (C 기본값: 1)
소프트맥스 함수란?
시그모이드 함수는 하나의 선형 방정식 출력값을 0~1 사이로 압축한다. 반면 소프트맥스 함수는 여러개의 선형 방정식 출력값을 0~1 사이로 압축하고 전체 합이 1이 되도록 만든다. 지수함수를 사용하기 때문에 정규화된 지수함수 라고도 부른다.
'ML > [책] 혼공머신' 카테고리의 다른 글
4) 다양한 분류 알고리즘 (2) (1) | 2022.11.05 |
---|---|
3) 회귀 알고리즘과 모델 규제 (2) (1) | 2022.11.02 |
3) 회귀 알고리즘과 모델 규제 (1) (0) | 2022.10.21 |
2) 데이터 다루기 (수상한 생선을 조심하라!) (0) | 2022.10.21 |
1-3) 마켓과 머신러닝 (0) | 2022.10.11 |