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

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

ただいまの
回答率

90.75%

  • Python 3.x

    5275questions

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

  • 機械学習

    593questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 340

takuya_1012

score 1

前提・実現したいこと

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

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

エラーメッセージ

該当のソースコード

# パッケージをインポート
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
# ページ上で直接グラフが見られるようにするおまじない
%matplotlib inline

# データの生成
X, y = make_classification(n_samples=100, n_features=2,
                           n_redundant=0, random_state=42)
train_X, test_X, train_y, test_y = train_test_split(X, y, random_state=42)

# 以下にコードを記述してください
# モデルの構築


# train_Xとtrain_yを使ってモデルに学習させる
#ここに答えを書いてください

# test_Xに対するモデルの分類予測結果
#ここに答えをかいてください

# コードの編集はここまでです。
# 生成したデータをプロット
plt.scatter(X[:, 0], X[:, 1], c=y, marker=".",
            cmap=matplotlib.cm.get_cmap(name="bwr"), alpha=0.7)

# 学習して導出した識別境界線をプロット
Xi = np.linspace(-10, 10)
Y = -model.coef_[0][0] / model.coef_[0][1] * \
    Xi - model.intercept_ / model.coef_[0][1]
plt.plot(Xi, Y)

# グラフのスケールを調整
plt.xlim(min(X[:, 0]) - 0.5, max(X[:, 0]) + 0.5)
plt.ylim(min(X[:, 1]) - 0.5, max(X[:, 1]) + 0.5)
plt.axes().set_aspect("equal", "datalim")
# グラフにタイトルを設定する
plt.title("classification data using LogisticRegression")
# x軸、y軸それぞれに名前を設定する
plt.xlabel("x-axis")
plt.ylabel("y-axis")
plt.show()


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


この部分です。

試したこと

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

より詳細な情報

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    退会済みユーザー

    2018/01/02 20:56

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

    キャンセル

回答 1

checkベストアンサー

+3

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

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

http://ailaby.com/logistic_reg/

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/05 19:02

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

    キャンセル

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

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    データのグラフ化:複数のデータを一つのグラフまとめたいです。

    前提・実現したいこと pythonで、同じディレクトリ内にある、複数のテキストデータから一つのグラフを作りたいと思っています。 環境はOS Xです。 処理したいテキストデ

  • 解決済

    三次元グラフ同時に表示できるようにしたい

    前提・実現したいこと 同時に2枚(またはそれ以上)表示されるようにしたい 発生している問題・エラーメッセージ 2枚表示はされるが完全に重なった位置に表示されてしまうため、

  • 解決済

    2次元グラフと3次元散布図のアニメーション付加

    前提・実現したいこと 同一グラフでの静止とアニメーションの付加。(2次元グラフ、3次元散布図) 発生している問題・エラーメッセージ やり方が分からない 該当のソースコード

  • 解決済

    グラフへの自動プロット

    いつもお世話になっております。 前提・実現したいこと プログラム(グラフ)を実行した状態のままCSVファイル(aiueo.csv)に値を追加(削除)した時に実行中のファイルに値

  • 解決済

    [Python]グラフ表示 matplotlib 構文?

    質問 グラフを表示させたいです。 list_If = calc.calculate(str(y), 1, imp_name)の部分で 別のソフトに値を渡して計算、その後matplo

  • 解決済

    Python matplotlib 図の保存について

    本来、matplotlibで図を保存する場合は以下のようになるのですが、 以下のように保存することは可能でしょうか? (グラフの部分だけ) また、matplotlibで

  • 解決済

    python棒グラフの順番

     前提・実現したいこと 数値とラベルを持つあるデータをについて、数値でソートして その結果を棒グラフとして出力したいと思っています。  発生している問題・エラーメッセージ ソー

  • 受付中

    pythonで、3次元の回転させられる図のプロット

    jupyternotebook上で3次元の散布図のプロットをしています。 %matplotlib inlineだと図の回転ができないため、 %matplotlib notebo

同じタグがついた質問を見る

  • Python 3.x

    5275questions

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

  • 機械学習

    593questions

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