機械学習アルゴリズムの理論と実践的な() - KNNアルゴリズム

内容:

I.はじめに

第二に、ワークフロー

第三に、例

第四に、Pythonで実装

1.アナログデータ及びプロット

2.KNNプロセス

3. KNNをscikit-学びます

五、KNNの長所と短所

1.メリット

2.欠点

六、KNNのアプリケーション

1.銀行システム

2.計算信用格付け

3.政治

4.その他の地域


I.はじめに

K最近傍(KNN)アルゴリズムは、MLアルゴリズムは、分類と回帰予測の問題のために使用することができる監視です。しかし、それは主に分類業界の予測の問題のために使用されています。以下の二つはよくKNNに定義されます。

  • 学習アルゴリズムに不活性:それは特別なトレーニングフェーズを持っていないし、訓練のために使用されるすべてのデータの分類であるため。
  • ノンパラメトリック学習アルゴリズム  :それは、基礎となるデータについて、その情報を負いませんので

第二に、ワークフロー

K最近傍(KNN)アルゴリズム手段ポイントのトレーニングセットに新しいデータ点を一致度に応じて、新たなデータポイントの値を割り当て、新しいデータポイントの値を予測する「特性の類似性」を使用します。我々は、次の手順を実行して、どのように機能するかを見ることができます。

ステップ1:トレーニングとテストデータをロードします。

ステップ2: K値を選択し、即ち、最も最近のデータ点(Kは任意の整数であってもよいです)。

ステップ3:テストデータの各点について、次の手順を実行します。  

  1. 各ライン間の距離は、次のいずれかの方法によって試験データと学習データで計算されたユークリッド距離、マンハッタン距離、またはハミング距離最も一般的なユークリッド距離のが計算されます。

  2. 距離値に基づいて昇順にソートされています。

  3. その後、ソートされた配列の最初のK行を選択します。

  4. さて、それはクラスのテストポイントは、これらの線が表示されるまでのカテゴリに基づいており、それを割り当てます。

ステップ4:エンド。

第三に、例

次の仕事は、概念やアルゴリズムの例のKNN Kを理解することです。

私たちは次のようにデータのセットを描画することができていたとします。次のとおりです。

Kコンセプト

今、私たちは、新しいデータポイントは、青や赤のカテゴリに分類される(点60、60時)の黒ドットでする必要があります。我々は、K = 3は、それが最新の3つのデータポイントを見つけることを想定しています。図示のように:

KNNアルゴリズム

私たちは、上図の黒のドットで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.その他の地域

音声認識、手書きの検出、映像認識と画像認識。

 

 

 

公開された61元の記事 ウォンの賞賛152 ・は 40000 +を見て

おすすめ

転載: blog.csdn.net/weixin_40431584/article/details/104671882