ホームページ >バックエンド開発 >Python チュートリアル >Python の KNN アルゴリズム (k 最近傍アルゴリズム) の詳細な紹介 (例付き)
この記事では、Python の KNN アルゴリズム (k 最近傍アルゴリズム) について詳しく説明します (例付き)。これには一定の参考値があります。必要な友人は参照できます。お役に立てば幸いです。 . 助かりました。
KNN アルゴリズムはデータ分類アルゴリズムであり、サンプルからの k 個の最近傍データのカテゴリがサンプルのカテゴリを表すため、k 最近傍アルゴリズムとも呼ばれます。 KNN アルゴリズムはデータ マイニングの最も単純な方法の 1 つであり、次のステップに大まかに分割できます。
トレーニング データ: 元のデータ セット内のすべてのデータ カテゴリのデータ。
テスト データ: テストに使用するデータ サンプル。
データの処理
取得するテスト データは、通常、トレーニング データとは次元が異なります。現時点では、テスト データ 次元はトレーニング データと同じです。Python の numpy には、テスト データの次元を増やすのに役立つ tile() 関数が付属しています。
データのベクトル化
テスト データの次元が増加した後、サンプル ポイントからの距離を計算するには、次のものが必要です。このときデータをベクトル化するのですが、いわゆるベクトル化は非常に単純で、同じ次元の 2 つのデータを差し引くだけです。
ユークリッド距離の計算
ユークリッド距離、つまりユークリッド距離は、ピタゴラスの定理を使用して計算できます。テストデータとトレーニングデータを減算して得られるベクトルグループ内の各ベクトルの平方根を使用して、距離から構成されるベクトルグループを取得できます。
距離による分類
サンプル点からの距離が最も小さいデータを k 個選択し、その k データのうちどのデータ カテゴリに属するかを数えます。発生頻度が最も高いと、サンプル ポイントのデータ カテゴリを決定できます。
アルゴリズム実装:
1. まず、numpy と演算子を導入する必要があり、from numpy import *
と import 演算子
を入力します。
2. 次に、knn 関数を定義する必要があります。knn 関数では、k、トレーニング データ、テスト データ、データ カテゴリの 4 つのパラメーターを導入する必要があります。
3. 次に、最初にデータに対して次元拡張操作を実行する必要があります。numpy で tile(a,(b,c)) 関数を使用する必要があります。a は、実行されるデータです。次元拡張操作、つまりテスト データ、b はテスト データにアップグレードされる行データ、c はテスト データにアップグレードされる列データです。
4. 前の操作では、通常、トレーニング データの行数と列数を取得する必要があります。 Shape() 関数を使用すると、shape() 関数はトレーニング データの行と列で構成されるタプルを返します。トレーニング データの行数または列数を知りたい場合は、配列を通じて参照するだけで済みます。要素の添字。
5. データの次元が同じになったら、2 つのデータを減算してベクトルを取得し、合計を計算する必要があります。このベクトルの各値の 2 乗の平方根はテスト データからトレーニング データまでの距離であり、argsort() 関数を呼び出して距離を昇順に並べ替えますが、この関数は配列の添字を返します。要素。
6. 次に、さまざまなデータ カテゴリの出現数を直感的に確認するには、空の辞書を設定して、ディクショナリの後を取得した後、さまざまなデータ カテゴリの出現数に従ってディクショナリを降順に並べ替えてから、ディクショナリの最初の値を返してテスト データのデータ カテゴリを取得する必要があります。
7. アルゴリズム コードは次のとおりです:
from numpy import * import operator def knn(k, test_data, train_data, labels): train_size = train_data.shape[0] #获取训练数据的行数 test_size = tile(test_data, (train_size, 1)) #将测试数据的行升维 minus = test_size-train_data #得到向量 sq_minus = minus**2 sum_sq_minus = sq_minus.sum(axis=1) #得到平方后的每个数组内元素的和 distc = sum_sq_minus**0.5 sort_distc = distc.argsort() #将距离按升序排列 static = {} for i in range(0, k): vote = labels[sort_distc[i]] #获取数据类型 static[vote] = static.get(vote, 0)+1 #统计每个数据类型的出现次数 sort_static = sorted(static.items(), key=operator.itemgetter(1), reverse=True) #将字典中的元素按出现次数降序排列 return sort_static[0][0] #返回出现次数最多的数据类型
8. 辞書はアルゴリズムでソートされる必要があるため、sorted() 関数を使用する必要があります。 items. ()、operator.itemgetter()、reverse の 3 つのパラメータがあります。デフォルトの並べ替えは昇順です。降順で並べ替えたい場合は、3 番目のパラメータを True に設定する必要があります。ここでは次に従って並べ替えています。辞書の値なので、演算子に値を入力する場合は sorted(static.items(), key=operator.itemgetter(1), reverse=True)
と入力する必要があります。 itemgetter()関数が1の場合は辞書の値に従ってソートされ、値が0の場合は辞書のキーに従ってソートされます。
#9. ソート後の要素へのアクセス方法は、2 次元配列要素へのアクセス方法と同じです。
以上がPython の KNN アルゴリズム (k 最近傍アルゴリズム) の詳細な紹介 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。