2015-01-31 9 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]) 

इसके बाद, मूल्यों की एक सतत ग्रिड बनाने के लिए और प्रत्येक की संभावना का मूल्यांकन (एक्स, वाई) ग्रिड में बात:

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,
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

रसद प्रतिगमन किसी भी सीमा आप चाहते हैं के आधार पर अपने वर्गीकृत नए नमूने की सुविधा देता है, तो यह स्वाभाविक एक नहीं है "निर्णय सीमा।" लेकिन, ज़ाहिर है, उपयोग करने के लिए एक आम निर्णय नियम पी = .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 की कई डिफ़ॉल्ट कॉन्फ़िगरेशन ओवरराइड करता है। इसलिए यदि आपको सीबर्न सीधे प्रदान करने वाली किसी भी कार्यक्षमता की आवश्यकता नहीं है, लेकिन बस डिफ़ॉल्ट रूप से उससे बेहतर दिखने के लिए matplotlib चाहते हैं, तो आपको केवल इनपोर्ट सीबर्न करना है और matplotlib – Gus

+0

@Gus के साथ अपने व्यवसाय के बारे में जाना है 'probs = clf.predict_probs (ग्रिड) [:, 1] .reshape (xx.shape)' कह रहा है कि 'विशेषता त्रुटि:' LogisticRegression 'ऑब्जेक्ट में कोई विशेषता नहीं है' predict_probs 'क्या मुझे कुछ याद आ रही है? –

संबंधित मुद्दे