内容:
I.はじめに
K最近傍(KNN)アルゴリズムは、MLアルゴリズムは、分類と回帰予測の問題のために使用することができる監視です。しかし、それは主に分類業界の予測の問題のために使用されています。以下の二つはよくKNNに定義されます。
- 学習アルゴリズムに不活性:それは特別なトレーニングフェーズを持っていないし、訓練のために使用されるすべてのデータの分類であるため。
- ノンパラメトリック学習アルゴリズム :それは、基礎となるデータについて、その情報を負いませんので。
第二に、ワークフロー
K最近傍(KNN)アルゴリズム手段ポイントのトレーニングセットに新しいデータ点を一致度に応じて、新たなデータポイントの値を割り当て、新しいデータポイントの値を予測する「特性の類似性」を使用します。我々は、次の手順を実行して、どのように機能するかを見ることができます。
ステップ1:トレーニングとテストデータをロードします。
ステップ2: K値を選択し、即ち、最も最近のデータ点(Kは任意の整数であってもよいです)。
ステップ3:テストデータの各点について、次の手順を実行します。
-
各ライン間の距離は、次のいずれかの方法によって試験データと学習データで計算されたユークリッド距離、マンハッタン距離、またはハミング距離。最も一般的なユークリッド距離のが計算されます。
-
距離値に基づいて昇順にソートされています。
-
その後、ソートされた配列の最初のK行を選択します。
-
さて、それはクラスのテストポイントは、これらの線が表示されるまでのカテゴリに基づいており、それを割り当てます。
ステップ4:エンド。
第三に、例
次の仕事は、概念やアルゴリズムの例のKNN Kを理解することです。
私たちは次のようにデータのセットを描画することができていたとします。次のとおりです。
今、私たちは、新しいデータポイントは、青や赤のカテゴリに分類される(点60、60時)の黒ドットでする必要があります。我々は、K = 3は、それが最新の3つのデータポイントを見つけることを想定しています。図示のように:
私たちは、上図の黒のドットで3つの最近傍データ点を見ることができます。これら三つでは、赤のレベル、したがって黒ドットに属する2つの赤色レベルが割り当てられます。
第四に、Pythonで実装
1.アナログデータ及びプロット
# 导入相应的包
import numpy as np
import matplotlib.pyplot as plt
# 模拟数据
raw_data_X = [[3.39, 2.33],
[3.11, 1.78],
[1.34, 3.36],
[3.58, 4.67],
[2.28, 2.86],
[7.42, 4.69],
[5.74, 3.53],
[9.17, 2.51],
[7.79, 3.42],
[7.93, 0.79]]
raw_data_y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]
X_train = np.array(raw_data_X)
y_train = np.array(raw_data_Y)
# 绘制散点图
plt.scatter(X_train[y_train==0, 0], X_train[y_train==0, 1], color='g')
plt.scatter(X_train[y_train==1, 0], X_train[y_train==1, 1], color='r')
plt.show()
# 加入一个新数据点
X = np.array([8.09, 3.36])
# 绘制增加新数据点的散点图
plt.scatter(X_train[y_train==0, 0], X_train[y_train==0, 1], color='g')
plt.scatter(X_train[y_train==1, 0], X_train[y_train==1, 1], color='r')
plt.scatter(X[0], X[1], color='b')
plt.show()
2.KNNプロセス
①距離を計算します
# 其他数据分别与新数据点之间的距离
from math import sqrt
# 方法一
distance = []
for x_train in X_train:
d = sqrt(np.sum((x_train - X)**2))
distance.append(d)
distance
# 方法二
distance = [sqrt(np.sum((x_train - X)**2)) for x_train in X_train]
[4.811538215581374、
5.224633958470201、
6.75、
4.696402878799901、
5.831474942070831、
1.489227987918573、
2.356140912594151、
1.3743725841270265、
0.30594117081556693、
2.574975728040946]
②距離に基づく値は、それらが昇順にソートされています
# 升序排序(按下标排序)
nearest = np.argsort(distance)
nearest
アレイ([8、7、5、6、9、3、0、1、4、2]、DTYPE = int64モード)
③ ソートされた配列からのトップのK行を選択します
# 设k为6
k = 6
# 从排序后的数组中显示前k行对应的类型
topK_y = [y_train[i] for i in nearest[:k]]
topK_y
[1、1、1、1、1、0]
④テスト・ポイントに基づいて、このカテゴリにカテゴリを割り当てるまで、これらの行に表示されます
# 导入统计数据包
from collections import Counter
# 显示各类对应的数量
votes = Counter(topK_y)
votes
カウンタ({1:5,0:1})
1番組数は最大5で表示されます。タイプ1のこの追加のデータポイントは赤。
votes.most_common(2) # 显示为[(1, 5), (0, 1)]
votes.most_common(1) # 显示为[(1, 5)]
votes.most_common(1)[0][0] # 显示为1
# 预测数据
predict_y = votes.most_common(1)[0][0]
predict_y
1
3. KNNをscikit-学びます
# 导包
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
# 设置k为6
kNN_classifier = KNeighborsClassifier(n_neighbors = 6)
# 训练
raw_data_X = [[3.39, 2.33],
[3.11, 1.78],
[1.34, 3.36],
[3.58, 4.67],
[2.28, 2.86],
[7.42, 4.69],
[5.74, 3.53],
[9.17, 2.51],
[7.79, 3.42],
[7.93, 0.79]]
raw_data_y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]
X_train = np.array(raw_data_X)
y_train = np.array(raw_data_y)
kNN_classifier.fit(X_train, y_train)
# 新数据
X = np.array([8.09, 3.36])
X_predict = X.reshape(1, -1)
# 预测数据
y_predict = kNN_classifier.predict(X_predict)
y_predict[0]
1
五、KNNの長所と短所
1.メリット
-
簡単には非常に単純なアルゴリズムは、理解し、解釈します。
-
データについては、このアルゴリズムがないための前提条件、非線形データのために非常に有用です。
-
一般的なアルゴリズム、我々は、分類および回帰のためにそれを使用することができますので。
-
これは、比較的高い精度を持っていますが、KNNモデルを学習指導よりも良いです。
2.欠点
-
それは、すべてのトレーニングデータを格納するため、これは、少し高価計算するアルゴリズムです。
-
高ストレージ容量を必要とする、他の教師付き学習アルゴリズムと比較します。
-
ときに大きなN.非常に遅い予測
-
これは、データサイズに関係なく、非常に敏感です。
六、KNNのアプリケーション
ここでは領域の一部が正常にKNNを適用することができます:
1.銀行システム
KNNは行う銀行システムに適した個人ローンの承認の天候を予測するために使用することができますか?個人は違反と同様の特性を持っているかどうか?
2.計算信用格付け
同様の特性を持つ人々と比較すると、KNNアルゴリズムは、個人の信用格付けを見つけるために使用することができます。
3.政治
KNNアルゴリズムでは、我々は潜在的な有権者が、このような「投票だろう」、「党の議会が投票する」、「投票しないだろう」「党の投票に代わって。」などのいくつかのカテゴリに分けられ達することができます
4.その他の地域
音声認識、手書きの検出、映像認識と画像認識。