用いた物体検出に続くScikit-learnを用いた機械学習のページPythonの機械学習用のライブラリであるScikit-learnを取り上げて、実際の課題に挑戦します。scikit-learnライブラリの使用をするにあたっては、パーセプトロン・モデルに学習させる課題を取り上げることが便利である。scikit-learnにはirisデータセットや手書き数字のデータなど便利なデータベースが含まれているいます。Scitkit-learnはPythonで書かれているので、Pythonの基礎的な知識を持っている人を想定します。以下のモジュールを必要とします。scikit-learnと入力することです。このページでの説明は、anaconda等でPythonのモジュール一式がインストールされていることを前提としています。scikit-learnの公式ホームページはhttp://scikit-learn.org/stable/index.htmlです。このサイトには使用方法の詳しいドキュメントが掲載されています。ベースとした、Googleの仮想マシン上で動くPython実行環境です。Googleアカウントを登録すれば、インストール等の作業に手間を取られることなく、すぐに機械学習のコードを実行することができます。コードを自分の手で実行したいと希望する方は、Googleのアカウント登録、および、GitHubのアカウントの登録をすることをお勧めします。両方とも無料で行えます。dataを用いた機械学習Anacondaを前提にします。以下のモジュール・パッケージを使用しました。0.18.1バージョンは最新のものにアップデートしてください。旧バージョンのscikit-learnがインストールされているはずなので、以下のようなコマンドを入力してアップデートします。scikit-learnscikit-learnの機能はsklearnという名称のライブラリに組み込まれます。sklearnの中身を見てみると、以下のようになっています。ls__check_buildkernel_approximation.py__init__.pykernel_ridge.py__pycache__learning_curve.py_build_utilslinear_model_isotonic.cpython-36m-darwin.somanifoldbase.pymetricscalibration.pymixtureclustermodel_selectioncovariancemulticlass.pycross_decompositionmultioutput.pycross_validation.pynaive_bayes.pydatasetsneighborsdecompositionneural_networkdiscriminant_analysis.pypipeline.pydummy.pypreprocessingensemblerandom_projection.pyexceptions.pysemi_supervisedexternalssetup.pyfeature_extractionsvmfeature_selectiontestsgaussian_processtreegrid_search.pyutilsisotonic.pyこの中で、datasetsというモジュールには、機械学習で必須のアヤメの標本データ及び手書き数字のデータが収められています。実際に、これらのデータを読み込んで見ましょう。loads.digitsは手書き数字のデータ、loads.irisはアヤメのデータを読み込みます。ipythonを起動した後、以下の順番でコマンドを入力してください。iris.targetアヤメのデータセットを見て見ましょう。アヤメのデータセットには150枚のアヤメの計測データが収録されています。特徴量は4種類で、がくの長さと幅の大きさ、花びらの長さと幅の大きさ、となっています。ように4つのデータの配列になっています。iris.targetには各計測データに対応するアヤメの種類が収納されています。virginicaの3つに分類されます。2]となっていることがわかります。クラス分けしています。unique(y)は異なる数字のみからなる配列に変換する。次に、手書き数字のデータセットを見て見ましょう。print(y.shape)(1797,)データの個数は1797個です。手書き数字の特徴データは8x8=64ピクセルの特徴量から構成されています。ターゲットは手書き数字の正解なので、データの個数と同じです。実は、機械学習で一般的に利用されているMNISTデータセットはscikit-learnに付属しているデータに比較して巨大な大きさです。画像のピクセル数は28x28=784であり、学習用画像が6万枚、テスト用画像が1万枚となっています。研究論文を書くために使用する訳ではないので、ここでは、scikit-learnに付属のデータセットを用います。次に、scikit-learnを用いて、パーセプトロン・モデルの重み係数の学習(トレーニング)をさせてみましょう。Notebookを起動してください。以下のコードをセルにコピペしてください。Colabで、セルの左上の三角形をクリックすれば実行できます。3]](花びらの長さと幅の大きさ)を使います。Perceptronでパーセプトロンモデルを読み込んでいます。トレーニングの繰り返し回数を最大で10000回として、損失関数値の減少が0.00001以下になると終了します。学習ごとにランダムに選択したデータセットを用いることを指定します。予測された結果(y_pred)が正解ラベル(y)と異なるケースの回数の和を取ることを意味します。予測の正解率を計算します。次に、データセットをトレーニングデータとテストデータセットに分割して、ミニバッチ様式で学習させて見ましょう。random_state=0)データ全体のうち、30%をテストデータ、残り70%をトレーニングデータとします。機械学習の最適化アルゴリズムで、性能の高い結果を得るための手法として、特徴量の標準化(スケーリング)を行います。クラスStandardScaler()が特徴量の標準化を実行するためのインスタンスです。sc.transform(X_test)sc.fit(X_train)で平均値と標準偏差を計算します。標準偏差に変換します。次に、標準化したデータを用いて、パーセプトロンモデルをトレーニングします。45個のサンプルなので、そのうち15個に対して間違った予測をしたことになります。正解率は67%となります。Raschka氏による”python-machine-learning-book/code/ch03/"にあるサンプルコードを若干修正したものです。dpi=300)plt.show()を実行すると、以下のグラフが得られます。このグラフからわかる通り、3つの品種を線形の境界で完全に分離することはでなきい。これがパーセプトロンモデルの限界です。ここで、パーセプトロンモデルを用いたロジスティック回帰分析の説明します。モデルの構造は以下のようになっています。\)の学習が行われます。そのとき採用される損失関数は対数尤度関数にマイナスをかけたものです。Learningの基礎を参照ください。非常に最適化されたロジスティック回帰のコードが実装されていて、多種クラスの分類が標準でサポートされています。組み込まれたモジュールを利用したロジスティック回帰分析をして見ます。ロジスティック回帰分析のモジュールを読み込んでます。Cは正則化パラメータの逆数です。Cの値を大きくすることは、正則化の強さを弱める役割をします。