\)列の行列となります。次元削減のためのPCAのアルゴリズムは以下のようなステップから構成されます。\)次元のデータセットを標準化する。標準化したデータセットの共分散行列を計算する。共分散行列の固有値と固有ベクトルを計算する。\)個の固有値に対応する固有ベクトルを選択する。\)次元の新しい特徴部分空間を作成する。関数を使えば簡単に固有値と固有ベクトルを計算できます。Numpyモジュールを利用すればPCAはpythonで実装できます。ここではより簡易な方法を利用します。Scikit-learnにこのアルゴリズムを組み込んだPCAクラスを活用します。このPCAクラスを用いてロジスティック回帰分析を行ってみましょう。サイト内のこのドキュメントを見てください。元になるデータセットを用意します。ワインのデータセットを読み込みます。以下のスクリプトを実行してください。Colabで実行できます。'Proline']df_wine.head()ワインのデータセットが読み込まれたことを確認できます。0114.231.712.4315.61272.803.060.282.295.641.043.9210651113.201.782.1411.21002.652.760.261.284.381.053.4010502113.162.362.6718.61012.803.240.302.815.681.033.1711853114.371.952.5016.81133.853.490.242.187.800.863.4514804113.242.592.8721.01182.802.690.391.824.321.042.93735このデータセットは、178個のワインサンプルとそれらの化学的性質を示す13の特徴量で構成されている。第1列目はサンプル番号です。2列目がワインのクラス分類です。3列目はアルコール度数です。慣例通り、データセットをトレーニングデータとテストデータに分割して、標準化を行います。以降、13種の特徴量のデータ配列を格納します。入力して、クラスPCAを使用可能になるように読み込みます。decomposition.PCA(n_components=2)でPCAを実施したときに主成分軸の数を2本に設定します。PCAには以下のメソッドがあります。pca.fit_transform(X)で、元のデータからモデルをフィットさせ、2次元のデータに変換します。以下のスクリプトを見てください。以下のようになっています。-0.36315461]]二つの主成分(PC1、PC2)の分散説明率を合計すると、0.56となっています。これは、2つの主成分がデータ情報の56%を説明することを意味します。label=cl)そして、以下のコードを実行します。left')plt.tight_layout()plt.show()この結果は下のグラフのように描かれます。ここで用いた分類器はロジスティック回帰モデルです。次に、機械学習で一般的に利用されているMNISTデータセットにPCAを応用して見ましょう。手書き数字のデータセットを見て見ましょう。以下のコードを入力すると、サンプルのサイズがわかります。datasets.load_digits()x=digits.datay=digits.tragetprint(x.shape)print(y.shape)数値の画像データは8x8=64、データサンプル数は1797個です。MNISTデータをPCAを用いて3次元データに変換し、それを散布図に描くコードが下のスクリプトです。(このサンプルコードは、金丸隆志『RaspberryPiで始める機械学習』BLUEBACKSから援用したものです。SVM」以降のセルにあります。color=colors)plt.show()この結果は下のグラフのように描かれます。MNISTデータセットを用いた機械学習を取り上げます。MNISTデータセットを読み込んで、分類器にかけるコードは以下のようになります。サポートベクトルマシンを分類器として使っています。100))このコードを実行すると、正解率は100%となります。このケースは、学習に用いたトレーニングデータそのものを使って正解率を求めているので当然でしょう。トレーニングデータとテストデータに分けて、トレーニングデータで学習させた結果を用いて、テストデータでの正解率を予測するとどうなるでしょうか。正解率100%が実現できないと予想されます。以下のコードを見てください。元のデータセットの30%をテストデータにしています。97.41%となります。当然ながら、正解率は100%に届きませんが、相当に高い正解率です。正解率が100%に届かない要因の一つは、画像のピクセル数が8x8=64という少なさにあります。以下のコードを実行すると、画像の内容が見えます。interpolation='nearest')ax[0].set_xticks([])ax[0].set_yticks([])plt.show()手書き数字がぼんやりとしか見えない事実が確認できます。この程度の輪郭でも識別できることの方が驚きです。パーセプトロンモデルを用いて分類学習をして見ましょう。95.10%という結果が得られます。正解率はサポートベクトルマシンを活用した場合と比較して、低くなります。次に、3層パーセプトロンモデルを用いた機械学習を行ってみましょう。以下のスクリプトを実行してみてください。y_pred))結果はこうなります。1.00正解率は100%です。単純パーセプトロンモデルに比較して、正解率は相当に改善されています。ページに行くトップページに行く。