入力から出力までの一連の流れをフォワードプロパゲーション(Forward-propagation)と呼びます。バックプロパゲーション(Back-propagation)というかっこいい名前のアルゴリズムで求めるのですが、それはまた次回にして、今回は既に分かっているものとします。-0.56準備ができました。試しに1サンプル目を選んで、流してみましょう。[0.20419381]出ました。クラス1になる確率は20%程度なので、1サンプル目はクラス0に分類されそうです。(データ生成過程とシャッフルによって、この値は異なることがあります。)この調子で全てのサンプルを予測して、決定境界を描いてみます。確率を受け取ってクラスを返すpredict関数も定義しておきましょう。left',fontsize=15)plt.show()やはりロジスティック回帰モデルは線形分類になりますね。0.8080%程度の正解率ですね。見るからに線形的に分離しようとすると、無理がありそうです。ディープラーニングさて、それでは図のようにもう一層追加してみましょう。文字につく係数が少しややこしいですが、慣れれば単純です。先ほど同様に肩につくかっこは層の番号、右下の文字の左側は次の層で結合するニューロンの番号、右側は現在の層で結合するニューロンの番号です。見やすいように2層目2番目のニューロン結合の重みは省略しています。初めの入力は1サンプルで1行2列の行列です。(図ではx1とx2は縦にならんでいますが、実際に計算させる場合は横並びになります。)その入力に2行2列の1層目重み行列をかけ、バイアスを足します。出来上がるので、シグモイド関数で活性化させます。それに2行1列の2層目重み行列をかけると1行1列、つまり1つの値になり、最後にもう一度活性化して、出力とします。クラスに属する確率となります。このように層を増やすと何が良いかというと、ロジスティック回帰モデルでは表すことのできなかった非線形のクラス分類を行うことができます。Pythonによる実装さて、これで準備が整いました。上述のロジスティック回帰モデルが作れれば、なんてことはありません。実装していきましょう。np.array([-5.17,4.1])先ほど同様に決定境界と正解率を出してみましょう。0.91なんと、決定境界がグニャッと曲がって上手く識別できるようにっています!正解率も大幅に改善し、91%となりました。層を増やしていくことで、より複雑なクラス分類ができるようになります。補足:文字の記述についてここで、文字の記述について、参考にする本やサイトで多少異なるため、少し補足しておきます。層の数え方ですが、本記事では入力を1層目とし、出力を3層目としましたが、入力、出力を除き、中間の層から数える場合もあります。活性化する前の線型結合をzと活性化後をaと表しましたが、上記の参考書では、逆になっています。私はアクティベーション後がaである方が分かりやすいので、そうしてありますが、理解しやすい覚え方で進めていきましょう。一連の流れを書いてみました。非線形な関係を表すことができるとても強力な機械学習モデルです。醍醐味である勝手に重みを学習するバックプロバゲーションについても書いてみます。※本記事は筆者が個人的に学んだことをまとめた記事なります。所属する組織の意見・見解とは無関係です。数学の記法や詳細な理論、用語等で誤りがあった際はご指摘頂けると幸いです。誰もが知っているこちらの書籍。学ぶなら、一度は目にしておきたい一冊です。はてなブログPro大学院で疫学統計を学んでいます。データサイエンティストを目指して、初心者目線から統計学、機械学習など学んだことをまとめていきます。パッケージ{prophet}を使って、ブログアクセス数を予測する。medi_data0826スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。