近傍成分分析による次元削減

Machine LearningMachine LearningBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、scikit-learnライブラリを使って、近傍成分分析(Neighborhood Components Analysis:NCA)を次元削減に適用する方法を示します。この実験では、Digitsデータセットに適用される他の(線形)次元削減手法とNCAを比較します。Digitsデータセットには、0から9までの数字の画像が含まれており、各クラスに約180サンプルがあります。

VMのヒント

VMの起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebookを使って練習しましょう。

時々、Jupyter Notebookが読み込み終わるまで数秒待つ必要がある場合があります。Jupyter Notebookの制限により、操作の検証は自動化できません。

学習中に問題に遭遇した場合は、Labbyにお問い合わせください。セッション後にフィードバックを提供してください。そうすれば、迅速に問題を解決します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills ml/sklearn -.-> lab-49224{{"近傍成分分析による次元削減"}} end

ライブラリのインポート

必要なライブラリをインポートします。

  • numpy
  • matplotlib.pyplot
  • datasets
  • train_test_split
  • PCA
  • LinearDiscriminantAnalysis
  • KNeighborsClassifier
  • NeighborhoodComponentsAnalysis
  • make_pipeline
  • StandardScaler

Digitsデータセットの読み込み

scikit-learnのload_digits()関数を使ってDigitsデータセットを読み込みます。

データセットの分割

scikit-learnのtrain_test_split()関数を使って、データセットを学習用とテスト用のデータセットに分割します。

変数の定義

分析に必要な変数を定義します。

  • dim = データセットの特徴量の数
  • n_classes = データセットのクラスの数
  • n_neighbors = KNN分類器の近傍点の数
  • random_state = 再現性のための乱数シード

PCAによる次元削減

StandardScaler()PCA(n_components=2, random_state=random_state) を使ったパイプラインを作成することで、主成分分析 (PCA) を用いてデータセットの次元を2に削減します。

線形判別分析による次元削減

StandardScaler()LinearDiscriminantAnalysis(n_components=2) を使ったパイプラインを作成することで、線形判別分析 (LDA) を用いてデータセットの次元を2に削減します。

近傍成分分析による次元削減

StandardScaler()NeighborhoodComponentsAnalysis(n_components=2, random_state=random_state) を使ったパイプラインを作成することで、近傍成分分析 (NCA) を用いてデータセットの次元を2に削減します。

手法を評価するためにKNN分類器を使用する

パラメータとして n_neighbors を持つKNeighborsClassifierを作成します。

比較対象の手法のリストを作成する

ステップ5 - 7で定義された手法を使用して、KNN分類器と比較する手法のリストを作成します。

モデルをフィットさせてテスト精度を評価する

各モデルをフィットさせ、model.transform() を使って訓練データセットとテストデータセットを変換し、変換された訓練データセットにKNN分類器をフィットさせることでテスト精度を評価します。knn.score() を使って、変換されたテストデータセットにおける最近傍点の精度を計算します。

射影された点をプロットして評価スコアを表示する

plt.scatter()plt.title() を使って、射影された点をプロットし、各手法の評価スコアを表示します。

グラフを表示する

plt.show() を使ってグラフを表示します。

まとめ

この実験では、近傍成分分析 (NCA) による次元削減を行い、Digitsデータセットに適用される他の(線形)次元削減手法と比較しました。結果は、NCAが次元を大幅に削減しても視覚的に意味のあるデータのクラスタリングを強制することを示しています。