# Positive : 예측값이 참인가?

  Negative : 예측값이 거짓인가?

  True : 예측값과 실제값이 동일한가?

  false : 예측값과 실제값이 동일하지 않은가?

 

 

 

 

 

 

 

예상 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

참값 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

 

정확도로 계산하면, 18/20이라는 결과가 나온다.

하지만,

정밀도로 계산하면, 0/1라는 결과가 나오고

민감도로 계산하면, 0/1이라는 결과가 나온다.

 

불균일한 dataset의 경우 정확도는 신뢰할 수 없다.

 

 

 

# 정밀도와 민감도의 차이

다음과 같은 모델의 예가 있다고 한다.

pred 1 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0

true 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0

- 정밀도 : 전체를 긍정이라고 예측한 비율이라고 한정할 때, 그중 실제값도 긍정인 비율 = 2/5

- 민감도 : 전체를 실제 긍정인 비율로 한정할 때, 그중 예측값도 긍정인 비율 = 2/4

 

결과를 보면, 분자가 동일하고 분모가 예측값이냐 실제값이냐, 즉 예측값을 중심으로 해석할 것인가 실제값을 중심으로 해석할 것 인가에 따라 다른 결과를 갖고 있음을 알 수 있다.

정밀도 : 긍정이라고 얼마나 잘 예측하였는가?

민감도 : 얼마나 잘 긍정이라고 예측하였는가?

 

 

'C Lang > machine learing' 카테고리의 다른 글

9-7. confusion matrix  (0) 2019.05.15
9-5. Maximum Likelihood Estimation  (0) 2019.05.13
9-4. Logistic regression implementation with Numpy  (0) 2019.05.13
9-3. logistic regression cost function  (0) 2019.05.08
9-2. Sigmoid function  (0) 2019.05.08

 

 

 

'C Lang > machine learing' 카테고리의 다른 글

9-7. confusion matrix  (0) 2019.05.15
9-6. Logistic regresion with sklearn  (0) 2019.05.15
9-4. Logistic regression implementation with Numpy  (0) 2019.05.13
9-3. logistic regression cost function  (0) 2019.05.08
9-2. Sigmoid function  (0) 2019.05.08

3_logistic_regression_with_numpy.ipynb
0.05MB

 

 

 

#x가 200*3, theta가 3*1 이므로 hypothesis_function는 200*1

 

# y는 200*1 hypothesis_function는 200*1이므로 y를 T해줌.
y.T.dot(np.log(hypothesis_function(x,theta)))는 1*1이므로 스칼라값
# (1-y).T.dot(np.log(1- hypothesis_function(x,theta))))도 1*1이므로 스칼라값 

# 아래 두개는 같은 방법인데 여러방법보라고 그냥 적어놓은거
# (-1.0 / m )* (y.T.dot(np.log(hypothesis_function(x,theta))) + (1-y).T.dot(np.log(1- hypothesis_function(x,theta))))
# (-1.0 /m )* (y * np.log(hypothesis_function(x,theta)) + (1-y) * np.log(1- hypothesis_function(x,theta))).sum()

 

 

 

# partial_marginal 200*1
# delta 200*1
# grad_i는 (1* 200)(200*1)이므로 스칼라

 

 

'C Lang > machine learing' 카테고리의 다른 글

9-6. Logistic regresion with sklearn  (0) 2019.05.15
9-5. Maximum Likelihood Estimation  (0) 2019.05.13
9-3. logistic regression cost function  (0) 2019.05.08
9-2. Sigmoid function  (0) 2019.05.08
9-1. logistic regression overview  (0) 2019.05.08

$$\theta^{T}X = w_{0}x_1^m+w_{1}x_2^m+...+w_{n}x_n^m)$$

 

・y의 값에 따라, 비용함수가 바뀐다.

 

・위위의 스크린 샷에서, y의 값에 따라 비용함수가 바뀌므로, 위와같은 식으로 비용함수가 정의된다.

$$y^{(i)}\log_{}{h_{\theta}}(x^{(i)})+(1-y^{(i)})\log_{}{(1-h_{\theta}(x^{(i)})})$$
$$에서$$
$$y=1이면, (1-y^{(i)})\log_{}{(1-h_{\theta}(x^{(i)})})=0이되고$$ 
$$y=0이면, y^{(i)}\log_{}{h_{\theta}}(x^{(i)})이 0이됨$$

 

$$이때 \theta x^{i}는 \theta^{T}X = w_{0}x_{0}+w_{1}x_{1}+w_{3}x_{3}+...에 주의$$

 

'C Lang > machine learing' 카테고리의 다른 글

9-5. Maximum Likelihood Estimation  (0) 2019.05.13
9-4. Logistic regression implementation with Numpy  (0) 2019.05.13
9-2. Sigmoid function  (0) 2019.05.08
9-1. logistic regression overview  (0) 2019.05.08
8-7. sampling method  (0) 2019.05.07

 

・Odds Ratio에 자연로그를 씌어주면 위와 같은 그래프 모양이 그려진다.

・Logit함수는 위와같은 과정을 통해 변형이 되는데 이를 좀더 상세하게 보면,

 

$$Logit(p(y=1\mid x)) = \log_{e}{\frac{p}{1-p}}$$

$$= \log_{e}{(\frac{1-p}{p})^{-1}}$$

$$= -\log_{e}{\frac{1-p}{p}}$$

$$= -\log_{e}({\frac{1}{p}-1})$$

 

 

・이때, Logit함수는 p에 대해 logit y를 반환하는데, 우리가 필요한 것은 p(확률)을 반환하는 것이므로 역함수를 취하여, y에 대해 p가 반환 되도록한다.(위식에서 z를 p로 생각)

・역함수를 y에 관해 정리하면 시그모이드 함수가 반환된다.

$$y=\frac{1}{1+e^{-z}}$$

 

 

 

 

・시그모이드 함수는 어떤 z값을 넣어도 확률로 반환해주는 함수 이므로, classification에서 유용하다.

 

・이때, z가 모든 수를 대변할 수 있는지에 대한 반론이 제기 될 수 있는데,

z를 odds ratio를 이용해 위와 같이 변형하면, z = Logit함수가 되는데,

위의 Logit함수 그래프에서 알수 있듯, Logit함수는 모든 실수를 나타낼 수 있다.

'C Lang > machine learing' 카테고리의 다른 글

9-4. Logistic regression implementation with Numpy  (0) 2019.05.13
9-3. logistic regression cost function  (0) 2019.05.08
9-1. logistic regression overview  (0) 2019.05.08
8-7. sampling method  (0) 2019.05.07
8-6. polynomial regression  (0) 2019.05.06

1_classification_problem_overview.ipynb
0.05MB

 

 

 

'C Lang > machine learing' 카테고리의 다른 글

9-3. logistic regression cost function  (0) 2019.05.08
9-2. Sigmoid function  (0) 2019.05.08
8-7. sampling method  (0) 2019.05.07
8-6. polynomial regression  (0) 2019.05.06
8-5. sklearn Linear Model family  (0) 2019.05.06

4_cross_validation.ipynb
0.06MB

・validation :중간중간에 제대로 만들어지고 있는지를 확인하기 위해서 사용
validation을 안쓸때도 많음

・cross validation
학습데이터를 k번 나누어, test와 training을 실시
구체적으로는 k개로 나눈 데이터를 각각 1,2,3,..k라고 하면
1번 데이터셋 이외의 데이터로 모델을 만든후 1번데이터셋으로 데이터를 테스트하고,
2번 데이터셋 이외의 데이터로 모델을 만든후 2번데이터셋으로 데이터를 테스트하고,
...
k번 데이터셋 이외의 데이터로 모델을 만든후 k번데이터셋으로 데이터를 테스트하고,
의 과정을 반복함

이후에 각 모델의 결과의 평균값으로 모델을 확정

・KFold는 데이터를 뽑아오는게 아니고 인덱스를 뽑아오는 것임

・총 506개의 데이터를 가지고 있는 X에 대하여, KFold를 실시하면 위와 같은 결과가 나오는데 suffle=False이므로 이해하기 쉽다.

TEST데이터 셋이 0~50 / 51 ~ 101 / 102 ~ 152 / .. 순으로 51개씩 균일하게 인덱스가 나뉘어져 있고 그 외의 데이터가 TRAIN데이터 셋으로 인덱싱 된 것을 확인할 수 있다.

・train_index, train_index는 벡터

・X[train_index], y[train_index]는 메트릭스 

・사실 위의 코드는 sklearn 프레임웤 안에 포함되어 있다. cross_val_score함수를 사용하면 쉽게 cross validation을 사용할 수 있다.

・이때 scoring='neg_mean_squared_error' 이므로 mse의 마이너스 값이 스코어링 된다. 본래 mse는 작을 수록 좋지만, 마이너스가 붙었으므로 클수록 좋은 스코어링이 된다.

・cv값은 숫자가 들어와도 되지만 kFold 객체가 들어와도 된다.

from sklearn.model\_selection import cross\_val\_score  
import numpy as np   

lasso\_regressor = Lasso(warm\_start=False)  
ridge\_regressor = Ridge()  

kf = KFold(n\_splits=10, shuffle=True)  

lasso\_scores = cross\_val\_score(lasso\_regressor, X, y, cv=kf, scoring='neg\_mean\_squared\_error')  
ridge\_scores= cross\_val\_score(ridge\_regressor, X, y, cv=kf, scoring='neg\_mean\_squared\_error')  
[np.mean(lasso\_scores),](np.mean(lasso_scores),) [np.mean(ridge\_scores)](np.mean(ridge_scores))

・box plot으로 나타내보면 Lasso 보다 ridge의 정확도가 높은것을 알 수 있지만, 데이터가 더 퍼져있다는 단점이 있다.

 

 

 

 

 

'C Lang > machine learing' 카테고리의 다른 글

9-2. Sigmoid function  (0) 2019.05.08
9-1. logistic regression overview  (0) 2019.05.08
8-6. polynomial regression  (0) 2019.05.06
8-5. sklearn Linear Model family  (0) 2019.05.06
data processing, type of scalers  (0) 2019.05.06

+ Recent posts