私はsklearn内でもっとすべてをやろうとしています。ここでは、不均衡な分類セットを生成し、ロジスティック回帰を実行し、データポイントをプロットし、決定境界線をプロットしようとしています。python:ロジスティック回帰係数を使用してsklearnの決定境界を構成する方法
決定境界線をプロットするためには、私は最初の係数を得る:
coef = clf.best_estimator_.coef_
intercept = clf.best_estimator_.intercept_
をそして、私はラインを構築:
x1 = np.linspace(-8, 10, 100)
x2 = -(coef[0][0] * x1 + intercept[0])/coef[0][1]
plt.plot(x1, x2, color='#414e8a', linewidth=2)
ただし、ラインはX2のでプロットしていませんcoef [0] [1]は0に等しいので、すべてinfです。これが私が持つ問題です。なぜこれらの係数の第2項は0ですか?以下
完全なコードは:あなたはCOEFで第2項は0
で見ることができるように
from sklearn.datasets import make_classification
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
from sklearn.grid_search import GridSearchCV
from sklearn.cross_validation import KFold, train_test_split
import numpy as np
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
%pylab inline
pylab.rcParams['figure.figsize'] = (12, 6)
plt.style.use('fivethirtyeight')
from IPython.core.display import display, HTML
display(HTML("<style>.container { width:100% !important; }</style>"))
# Generate data with two classes
X, y = make_classification(class_sep=1.2, weights=[0.1, 0.9], n_informative=3, n_redundant=1, n_features=5, n_clusters_per_class=1, n_samples=10000, flip_y=0, random_state=10)
pca = PCA(n_components=2)
X = pca.fit_transform(X)
y = y.astype('str')
y[y=='1'] ='L'
y[y=='0'] ='S'
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.7, random_state=0)
X_1, X_2 = X_train[y_train=='S'], X_train[y_train=='L']
# Fit a Logistic Regression model
clf_base = LogisticRegression()
grid = {'C': 10.0 ** np.arange(-2, 3),'penalty': ['l1', 'l2']}
cv = KFold(X_train.shape[0], n_folds=5, shuffle=True, random_state=0)
clf = GridSearchCV(clf_base, grid, cv=cv, n_jobs=8, scoring='f1_macro')
clf.fit(X_train, y_train)
# Get coefficients
coef = clf.best_estimator_.coef_
intercept = clf.best_estimator_.intercept_
# Create separation line
x1 = np.linspace(-8, 10, 100)
x2 = -(coef[0][0] * x1 + intercept[0])/coef[0][1]
plt.scatter(X_1[:,0], X_1[:,1], color='#1abc9c')
plt.scatter(X_2[:,0], X_2[:,1], color='#e67e22')
x_coords = np.concatenate([X_1[:,0],X_2[:,0]])
y_coords = np.concatenate([X_1[:,1],X_2[:,1]])
plt.axis([min(x_coords), max(x_coords), min(y_coords), max(y_coords)])
plt.title("Original Dataset - Fitted Logistic Regression")
plt.plot(x1, x2, color='#414e8a', linewidth=2)
plt.show()
print(coef)
は、私がここで間違って何をしているのですか?
ありがとうございました!
EDITは
これは、グリッドの検索パラメータがゼロである第2の係数につながっているように思えます。たとえば、次のように
grid = {'C': 10.0 ** np.arange(-2, 3),'penalty': ['l1', 'l2']}
この:
grid = {'C': 10.0 ** np.arange(-2, 3),'penalty': ['l1', 'l2'],'class_weight': ['balanced']}
これは私に二つの非ゼロcoeficients
私はクラスの重みパラメータを削除
を与える:私は、グリッドのパラメータを設定しcoefの2番目の要素の値が0になります。
この問題を単純化することができます。誰でもそこに誰かがアイデアを持っていますか?ありがとうございました!
ロジスティック回帰 – ErroriSalvo
私は従わないのですか? –