2015-01-31 7 views
7

로지스틱 회귀를 구현하고 있습니다. 나는 그로부터 확률을 얻을 수 있었고, 2 등급 분류 과제를 예측할 수 있었다.로지스틱 회귀의 결정 경계를 플로팅

내 질문은 : 내 최종 모델의 경우

, 나는 무게와 훈련 데이터가 있습니다. 2 가지 기능이 있으므로 내 체중은 2 행의 벡터입니다.

어떻게 계획하나요? 나는 this post을 보았지만 대답을 이해하지 못했습니다. 등고선이 필요합니까?

답변

20

로지스틱 회귀 분류기의 장점은 적합하면 모든 샘플 벡터에 대한 확률을 얻을 수 있다는 것입니다. 음모를 꾸미는 것이 재미있을 수 있습니다. 다음은 사용 예입니다 scikit을 배우기 :

import numpy as np 
from sklearn.linear_model import LogisticRegression 
from sklearn.datasets import make_classification 
import matplotlib.pyplot as plt 
import seaborn as sns 
sns.set(style="white") 

첫째, 데이터를 생성하고, 트레이닝 세트에 분류에 맞게 :

X, y = make_classification(200, 2, 2, 0, weights=[.5, .5], random_state=15) 
clf = LogisticRegression().fit(X[:100], y[:100]) 

다음, 값의 연속 격자를 만들고 각의 가능성을 평가 (x, y)의 모눈에 가리 :

xx, yy = np.mgrid[-5:5:.01, -5:5:.01] 
grid = np.c_[xx.ravel(), yy.ravel()] 
probs = clf.predict_proba(grid)[:, 1].reshape(xx.shape) 

해주기, 그 위에 테스트 세트 샘플을 등고선으로 확률 격자 플롯 추가적으로 보여

01,235,164을
f, ax = plt.subplots(figsize=(8, 6)) 
contour = ax.contourf(xx, yy, probs, 25, cmap="RdBu", 
         vmin=0, vmax=1) 
ax_c = f.colorbar(contour) 
ax_c.set_label("$P(y = 1)$") 
ax_c.set_ticks([0, .25, .5, .75, 1]) 

ax.scatter(X[100:,0], X[100:, 1], c=y[100:], s=50, 
      cmap="RdBu", vmin=-.2, vmax=1.2, 
      edgecolor="white", linewidth=1) 

ax.set(aspect="equal", 
     xlim=(-5, 5), ylim=(-5, 5), 
     xlabel="$X_1$", ylabel="$X_2$") 

enter image description here

로지스틱 회귀 원하는 임계 값에 따라 분류 새로운 샘플을 수 있습니다, 그래서 그것은 본질적으로 하나가없는 "결정 경계를." 물론, 공통적 인 의사 결정 규칙은 p = .5입니다. 우리는 또한 단지 위의 코드를 사용하여 해당 윤곽 수준을 그릴 수 있습니다 :

f, ax = plt.subplots(figsize=(8, 6)) 
ax.contour(xx, yy, probs, levels=[.5], cmap="Greys", vmin=0, vmax=.6) 

ax.scatter(X[100:,0], X[100:, 1], c=y[100:], s=50, 
      cmap="RdBu", vmin=-.2, vmax=1.2, 
      edgecolor="white", linewidth=1) 

ax.set(aspect="equal", 
     xlim=(-5, 5), ylim=(-5, 5), 
     xlabel="$X_1$", ylabel="$X_2$") 

enter image description here

+0

당신이'seaborn'을 가져온 바로 것을 나는 모르지만, 실제로 당신의 대답에 사용하지 않은? 나는 그 도서관에 익숙하지 않고 단지 대답에 필요한지 여부를 확인한다. – Rhubarb

+1

@Zhubarb : Seaborn은 matplotlib의 기본 구성을 가져 오는 즉시 덮어 씁니다. 따라서 seaborn이 직접 제공하는 기능이 필요하지 않지만 기본적으로 matplotlib가 기본적으로 원하는 것보다 훨씬 좋아 지도록하려면 matplotlib를 사용하여 inport seaborn을 수행하고 비즈니스에 대해 수행해야합니다. – Gus

+0

@Gus 오류가 발생합니다. 'Pros = clf.predict_probs (grid) [:, 1] .reshape (xx.shape)''AttributeError : 'LogisticRegression'객체에는 'predict_probs'속성이 없습니다. –

관련 문제