質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

1回答

622閲覧

機械学習 ロジスティック回帰 コードの理解

takuya_1012

総合スコア7

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

1クリップ

投稿2018/01/02 09:40

###前提・実現したいこと
ここに質問したいことを詳細に書いてください
機械学習でロジスティック回帰について学習していますが、コードの一部が具体的に何をしている部分なのかが理解できません。

###発生している問題・エラーメッセージ

エラーメッセージ

###該当のソースコード

python

1# パッケージをインポート 2import numpy as np 3import matplotlib 4import matplotlib.pyplot as plt 5from sklearn.linear_model import LogisticRegression 6from sklearn.model_selection import train_test_split 7from sklearn.datasets import make_classification 8# ページ上で直接グラフが見られるようにするおまじない 9%matplotlib inline 10 11# データの生成 12X, y = make_classification(n_samples=100, n_features=2, 13 n_redundant=0, random_state=42) 14train_X, test_X, train_y, test_y = train_test_split(X, y, random_state=42) 15 16# 以下にコードを記述してください 17# モデルの構築 18 19 20# train_Xとtrain_yを使ってモデルに学習させる 21#ここに答えを書いてください 22 23# test_Xに対するモデルの分類予測結果 24#ここに答えをかいてください 25 26# コードの編集はここまでです。 27# 生成したデータをプロット 28plt.scatter(X[:, 0], X[:, 1], c=y, marker=".", 29 cmap=matplotlib.cm.get_cmap(name="bwr"), alpha=0.7) 30 31# 学習して導出した識別境界線をプロット 32Xi = np.linspace(-10, 10) 33Y = -model.coef_[0][0] / model.coef_[0][1] * \ 34 Xi - model.intercept_ / model.coef_[0][1] 35plt.plot(Xi, Y) 36 37# グラフのスケールを調整 38plt.xlim(min(X[:, 0]) - 0.5, max(X[:, 0]) + 0.5) 39plt.ylim(min(X[:, 1]) - 0.5, max(X[:, 1]) + 0.5) 40plt.axes().set_aspect("equal", "datalim") 41# グラフにタイトルを設定する 42plt.title("classification data using LogisticRegression") 43# x軸、y軸それぞれに名前を設定する 44plt.xlabel("x-axis") 45plt.ylabel("y-axis") 46plt.show()

python

1Xi = np.linspace(-10, 10) 2Y = -model.coef_[0][0] / model.coef_[0][1] * \ 3 Xi - model.intercept_ / model.coef_[0][1] 4plt.plot(Xi, Y)

この部分です。

###試したこと

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/01/02 11:56

このコードの出所は示すことができますか?コード中に「#ここに答えを書いてください」のようなことが書いてありますが、競技プログラミングや何かの教育機関の宿題のような雰囲気がします。
guest

回答1

0

ベストアンサー

numpyを使ったことがあるというレベルの自分なので大したコメントは付けられませんが・・・

「sklearn ロジスティク model」で検索してみてヒットしたページ(下記など)を斜め読みすると

http://ailaby.com/logistic_reg/

ロジスティック回帰の訓練結果は境界線
w0+w1x+w2y=0
の 重み w0、w1、w2ですが、その値は属性 intercept_、coef_ に入っています。

とありました。(sklearnのページとか見てなくて一般のブログ的なページを斜め読みしてますので合ってるかどうか自分では判断できてません。)上の式をyをxで表す式に変形すると次のようになります。

text

1w0 + w1 * x + w2 * y = 0 2=> 3w2 * y = -w1 * x - w0 4=> 5y = -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座標のベクトルを与えると、各座標を直線で結んだ折れ線グラフを細かな位置とか一々指定しなくても適当に仮定して描画してくれます。(直前に散布図を表示しているのでおそらくそれとスケールを合わせて直線グラフを描いてくれると思います)

投稿2018/01/02 11:58

編集2018/01/03 02:48
KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takuya_1012

2018/01/05 10:02

ありがとうございます! なんとなくですが、理解することができました! 何度か読み返して理解を深めて行きたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問