K 最近傍アルゴリズム、K-NN とも呼ばれます。今日のディープラーニングの時代では、この古典的な機械学習アルゴリズムは過小評価されることがよくあります。このチュートリアルでは、Scikit-Learn を使用して K 最近傍アルゴリズムを構築し、それを MNIST データセットに適用する方法を説明します。次に、著者は、独自の K-NN アルゴリズムを構築し、Scikit-Learn K-NN よりも正確で高速なアルゴリズムを開発する方法を説明します。 1. K近傍分類モデル K 最近傍アルゴリズムは実装が簡単な教師あり機械学習アルゴリズムであり、その分類パフォーマンスは非常に堅牢です。 K-NN の利点の 1 つは、SVM、回帰、多層パーセプトロンなどのトレーニングを必要とする他の ML アルゴリズムとは異なり、トレーニングなしでモデルがデータを分類できる、つまり遅延アルゴリズムであることです。 K-NNの仕組み 特定のデータ ポイント p を分類するために、K-NN モデルはまず、何らかの距離メトリックを使用して p をデータベース内の他のポイントと比較します。 距離メトリックは、ユークリッド距離のように、2 つのポイントを入力として受け取り、それらの間の距離を返す単純な関数です。 したがって、2 つのポイント間の距離が短い方が、2 つのポイント間の距離が長い場合よりも類似していると考えられます。これがK-NNの核となる考え方です。 この手順では、各エントリがモデル データベース内の p と n のデータ ポイント間の距離を表す順序付けられていない配列を返します。したがって、返される配列のサイズは n です。 K 最近傍の K の意味は次のとおりです。k は、p を分類するときにモデルが考慮する最も類似したポイントの数を示す任意の値 (通常は 3 ~ 11) です。次に、モデルは最も類似した k 個の値を記録し、投票アルゴリズムを使用して、下の図に示すように、p がどのクラスに属するかを決定します。 上図の K-NN モデルの k 値は 3 で、矢印が指している中心点は p であり、これがアルゴリズムが分類するポイントです。 ご覧のとおり、円内の 3 つの点は p に最も近い、または最も類似した 3 つの点です。したがって、単純な投票アルゴリズムを使用すると、最も類似した k 個の値の中で白が多数派であるため、p は「白」に分類されます。 すごいですね!しかし驚くべきことに、この単純なアルゴリズムは、特定の状況では素晴らしい結果を達成でき、さまざまな問題に適用できます。これについては以下で説明します。 2. Scikit-LearnでK-NNアルゴリズムを実装してMNIST画像を分類する 1. データ この例では、一般的な MNIST データセットを使用します。 MNIST データセットは、実装が簡単で、モデルを検証するための信頼性の高い方法であるため、機械学習で最もよく使用されるデータセットの 1 つです。 MNIST は、0 ~ 9 の手書き数字 70,000 個のデータセットです。手書きの数字はどれも同じではなく、正しく分類するのが難しい数字もあります。 2. アルゴリズム まず、Scikit-Learn Python ライブラリの KNeighborsClassifier() 関数から始めます。この関数には多くのパラメータがありますが、この例ではいくつかのパラメータのみを使用します。具体的には、n_neighbors パラメータの値 (つまり、k 値) のみを渡します。 weights パラメータは、モデルで使用される投票アルゴリズムのタイプを指定します。デフォルト値は、uniform です。これは、p を分類するときに、k 個の各ポイントが同じ重みを持つことを意味します。また、Scikit-Learn で MNIST データを分類するための最適なアルゴリズムを自動的に見つけられるようにしたいので、アルゴリズム パラメータにはデフォルト値の auto を使用します。 Scikit-Learn を使用して K-NN 分類器を構築するための Jupyter Notebook は次のとおりです: Scikit-Learn を使用した MNIST の K 近傍法アルゴリズム ノートブックのアドレス: https://gist.github.com/samgrassi01/82d0e5f89daac3e65531a6ef497cc129#file-skl-knn-ipynb 必要なライブラリを直接インポートすることから始めます。
(1)データセットの構築 さまざまなデータセットを作成して K-NN モデルを構築します。特定のサイズのデータセットを受け取り、そのデータセットのサイズを返す関数を作成します。
良い。ここで、この関数を使用して、異なるサイズの 2 つのデータセットを構築し、異なるデータ量でのモデルの分類パフォーマンスがどのようになるかを確認します。 ヒント: データセットを小さくしても分類は実行できますが、モデルのデータが少なくなり、分類エラーが発生する可能性があります。
モデルのデータがどのようにラベル付けされているかに注目してください。モデルは、各ポイントが何を表しているかを理解するためにこれらのラベルを必要とするため、「これは分類したいポイントに最も類似するクラスです」と言うのではなく、分類したいポイントを特定のクラスに分類することができます。 ここで、サイズ 10000 のテスト セットを構築します。
素晴らしい!これですべてのデータ処理が完了したので、K-NN モデルの構築を開始できます。 (2)モデル構築 まず、Scikit-Learn K-NN モデルを関数に配置して、簡単に呼び出して調整できるようにします。
(3)テスト ここで、このモデルが 2 つの異なるテスト セットでどのように機能するかを見てみましょう。
はい!私たちのモデルは人間の目とほぼ同じくらい優れています!ご覧のとおり、モデルが処理するデータが多いほど(20,000 ポイントではなく 50,000 ポイント)、パフォーマンスが大幅に向上します。さらに印象的なのは、そのシンプルさと、さまざまな画像間の複雑な関係を人間レベルで捉える能力です。より詳細な分析については、この GitHub リポジトリをご覧ください。 https://github.com/samgrassi01/Cosine-Similarity-Classifier をご覧ください。 素晴らしい! Scikit-Learn を使用して、MNIST データセットで驚くほど優れたパフォーマンスを発揮する非常にシンプルな K 近傍法モデルを構築しました。 欠点は、これらのポイントを分類するのに長い時間がかかることです (2 つのデータセットでそれぞれ 8 分と 4 分)。皮肉なことに、K-NN は依然として最も高速な分類方法の 1 つです。もっと速い方法が必要です。 3. より高速なモデルを構築する ほとんどの K-NN モデルでは、距離メトリックとしてユークリッド距離またはマンハッタン距離が使用されます。これらのインジケーターは非常にシンプルで、さまざまな状況でうまく機能します。 あまり一般的ではない別の距離メトリックは、コサイン類似度です。コサイン類似度は、三角不等式に違反し、負の数に対しては無効であるため、通常は距離測定基準として適していません。しかし、コサイン類似度は MNIST に非常に適しています。これは高速で、アルゴリズムが単純であり、MNIST に適用される他の距離メトリックよりもわずかに正確です。 ただし、最高のパフォーマンスを得るには、K-NN モデルを自分で記述する必要があります。そうすれば、Scikit-Learn モデルよりも高いパフォーマンスとさらに高い精度を実現できるはずです。確立された K-NN モデルの次のノートブックを見てみましょう。 より高速な KNN 分類器の構築 ノートブックアドレス: https://gist.github.com/samgrassi01/15a1fe53dcde8813eed9367b103676b2#file-cos-knn-ipynb このノートブックでは、より高速でより正確なモデルを見つけるために、距離メトリックとしてコサイン類似度を使用して MNIST 画像を分類する単純な K-NN モデルを構築します。 まず、必要なライブラリをインポートし、Scikit-Learn K-NN ノートブックと同じデータセットを構築する必要があります。
Scikit-Learn K-NN ノートブックと同じ方法を使用して、まったく同じデータセットを設定します。
1. モデルを構築する 次に、MNIST データセットの分類子として関数 cos_knn() を作成します。関数のコメントを使用すると、関数がどのように動作するかを理解できます。
2. モデルをテストする ここで、Scikit-Learn K-NN モデルと同様に、2 つのデータセットで cos_knn() モデルをテストし、パフォーマンスを確認してみましょう。
素晴らしい! コサイン類似度モデルは Scikit-Learn K-NN よりも優れています! また、このモデルは Scikit-Learn K-NN よりも高速かつ正確であり (速度が大幅に向上)、モデルがはるかにシンプルであることも注目に値します。 モデルがどのように機能するか、またさまざまな状況で Scikit-Learn K-NN モデルよりも優れている理由をさらに分析するには、次の GitHub リポジトリを参照してください。 https://github.com/samgrassi01/Cosine-Similarity-Classifier をご覧ください。 ノートブックに示されているように、この K-NN モデルは分類速度と精度の両方で Scikit-Learn K-NN を上回っており、1 つのデータセットで速度が大幅に向上し、精度が 1% 向上しています。そうなると、このモデルを実際に使い続けることができます。 IV. 結論 まず、K-NN がどのように機能し、どのように簡単に実装するかがわかります。しかし、最も重要なことは、解決すべき問題とそれを解決するためのツールについて常に考えることが重要だということが分かりました。場合によっては、問題解決の過程では、時間をかけて練習し、もちろん独自のモデルを構築するのが最善です。ノートブックで実証されているように、これには劇的な利点があります。2 番目の独自モデルでは 1.5 ~ 2 倍の高速化が達成され、多くの時間を節約できました。 オリジナルリンク: https://towardsdatascience.com/building-improving-ak-nearest-neighbors-algorithm-in-python-3b6b5320d2f8 [この記事は51CTOコラム「Machine Heart」、WeChatパブリックアカウント「Machine Heart(id:almosthuman2014)」によるオリジナル翻訳です] この著者の他の記事を読むにはここをクリックしてください |
<<: 人工知能が教育改革にどのように貢献しているかをご覧ください
>>: 多くの人がまだブロックチェーンについて漠然とした理解しか持っていない中、これらのブロックチェーンの応用シナリオはすでに実装されている。
近年、人工知能は、データから洞察を引き出すことに関する企業の考え方を一変させました。ほとんどの人はこ...
昨日(7月7日)、流行病の影響で延期されていた2020年度大学入試センター試験が正式に始まりました。...
紙: http://wanghao.in/paper/NatureMedicine21_MSA.pd...
機械学習は現在、この分野の急速な発展を妨げるいくつかの危機に直面しています。これらの危機は、より広範...
LiBai モデル ライブラリは、Hugging Face、Megatron-LM、DeepSpe...
自動運転は長い間、人々に「とても人気があるが、とても遠い存在」という印象を与えてきました。それは、何...
[[374688]] 「半オーク」「半魚」… SF映画、漫画、おとぎ話では、それは驚くことではありま...
GAN の高解像度画像を生成する能力は、画像合成および処理の分野に革命をもたらしています。 201...
韓国のチームが達成した室温超伝導は、世界中の主要な研究室で再現の熱狂を引き起こした。先ほど、もう一つ...
良いニュースです。お勧めの新しいコースがあります!理論と実践を組み合わせた完全無料の海外で最も人気の...
[51CTO.comより引用] 2017年7月21日から22日まで、51CTO主催の人工知能をテーマ...