回答編集履歴

2 追記

KSwordOfHaste

KSwordOfHaste score 18013

2018/01/03 11:48  投稿

numpyを使ったことがあるというレベルの自分なので大したコメントは付けられませんが・・・
「sklearn ロジスティク model」で検索してみてヒットしたページ(下記など)を斜め読みすると
[http://ailaby.com/logistic_reg/](http://ailaby.com/logistic_reg/)
> ロジスティック回帰の訓練結果は境界線
> w0+w1x+w2y=0
> の 重み w0、w1、w2ですが、その値は属性 intercept_、coef_ に入っています。
とありました。(sklearnのページとか見てなくて一般のブログ的なページを斜め読みしてますので合ってるかどうか自分では判断できてません。)上の式をyをxで表す式に変形すると次のようになります。
```text
w0 + w1 * x + w2 * y = 0
=>
w2 * y = -w1 * x - w0
=>
y = -w1/w2 x - w0/w2
```
これをコードと見比べると以下のように対応しているのではないでしょうか。
w1 : model.coef_[0][0]
w2 : model.coef_[0][1]
w0 : model.intercept_
XiはグラフのX軸データであると思います。np.linspaceは開始、終了の値を与えると途中の等間隔の値を補完したベクトル(numpy.array)を生成してくれます。デフォルトでは50ポイントなのでここでは50ポイント分のX座標を用意していることになると思います。
`Y = -model.coef_[0][0] / model.coef_[0][1] * Xi - model.intercept_ / model.coef_[0][1]`
ですけど、numpy.arrayはブロードキャスティングという基本機能がありベクトルとスカラーやベクトルの要素同士の演算はそのまんま四則演算子などをつかって書けますので、上記はX軸の各座標に対するYの値を並べたベクトルを計算しているのだと思います。
最後のmatplotlib.pyplot.plotはグラフを描画する関数で、X座標のベクトルとそれに対応したY座標のベクトルを与えると、各座標を直線で結んだ折れ線グラフを細かな位置とか一々指定しなくても適当に仮定して描画してくれます。
最後のmatplotlib.pyplot.plotはグラフを描画する関数で、X座標のベクトルとそれに対応したY座標のベクトルを与えると、各座標を直線で結んだ折れ線グラフを細かな位置とか一々指定しなくても適当に仮定して描画してくれます。(直前に散布図を表示しているのでおそらくそれとスケールを合わせて直線グラフを描いてくれると思います)
1 誤記訂正

KSwordOfHaste

KSwordOfHaste score 18013

2018/01/02 21:00  投稿

numpyを使ったことがあるというレベルの自分なので大したコメントは付けられませんが・・・
「sklearn ロジスティク model」で検索してみてヒットしたページ(下記など)を斜め読みすると
[http://ailaby.com/logistic_reg/](http://ailaby.com/logistic_reg/)
> ロジスティック回帰の訓練結果は境界線
> w0+w1x+w2y=0
> の 重み w0、w1、w2ですが、その値は属性 intercept_、coef_ に入っています。
とありました。(sklearnのページとか見てなくて一般のブログ的なページを斜め読みしてますので合ってるかどうか自分では判断できてません。)上の式をyをxで表す式に変形すると次のようになります。
```text
w0 + w1 * x + w2 * y = 0
=>
w2 * y = -w1 * x - w0
=>
y = -w1/w2 x - w0/w2
```
これをコードと見比べると以下のように対応しているのではないでしょうか。
w1 : model.coef_[0][0]
w2 : model.coef_[0][1]
w0 : model.intercept_
XiはグラフのX軸データであると思います。np.linspaceは開始、終了の値を与えると途中の等間隔の値を補完したベクトル(numpy.array)を生成してくれます。デフォルトでは50ポイントなのでここでは50ポイントのX座標を用意していることになると思います。
XiはグラフのX軸データであると思います。np.linspaceは開始、終了の値を与えると途中の等間隔の値を補完したベクトル(numpy.array)を生成してくれます。デフォルトでは50ポイントなのでここでは50ポイントのX座標を用意していることになると思います。
`Y = -model.coef_[0][0] / model.coef_[0][1] * Xi - model.intercept_ / model.coef_[0][1]`
ですけど、numpy.arrayはブロードキャスティングという基本機能がありベクトルとスカラーやベクトルの要素同士の演算はそのまんま四則演算子などをつかって書けますので、上記はX軸の各座標に対するYの値を並べたベクトルを計算しているのだと思います。
最後のmatplotlib.pyplot.plotはグラフを描画する関数で、X座標のベクトルとそれに対応したY座標のベクトルを与えると、各座標を直線で結んだ折れ線グラフを細かな位置とか一々指定しなくても適当に仮定して描画してくれます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る