KNN Algorithm - ค้นหาเพื่อนบ้านที่ใกล้ที่สุด

บทนำ

อัลกอริทึม K-near Neighbor (KNN) เป็นอัลกอริทึม ML ภายใต้การดูแลประเภทหนึ่งซึ่งสามารถใช้ได้ทั้งการจำแนกประเภทและปัญหาการทำนายการถดถอย อย่างไรก็ตามส่วนใหญ่จะใช้สำหรับการจำแนกประเภทปัญหาการคาดการณ์ในอุตสาหกรรม คุณสมบัติสองประการต่อไปนี้จะกำหนด KNN ได้ดี -

  • Lazy learning algorithm - KNN เป็นอัลกอริธึมการเรียนรู้ที่ขี้เกียจเนื่องจากไม่มีขั้นตอนการฝึกอบรมเฉพาะและใช้ข้อมูลทั้งหมดสำหรับการฝึกอบรมในขณะที่จำแนก

  • Non-parametric learning algorithm - KNN เป็นอัลกอริธึมการเรียนรู้ที่ไม่ใช่พารามิเตอร์เนื่องจากไม่ได้ถือว่าอะไรเกี่ยวกับข้อมูลพื้นฐาน

การทำงานของ KNN Algorithm

อัลกอริทึม K- เพื่อนบ้านที่ใกล้ที่สุด (KNN) ใช้ 'คุณลักษณะความคล้ายคลึงกัน' เพื่อทำนายค่าของจุดข้อมูลใหม่ซึ่งหมายความว่าจุดข้อมูลใหม่จะได้รับการกำหนดค่าตามความใกล้ชิดกับคะแนนในชุดการฝึกอบรม เราสามารถเข้าใจการทำงานของมันด้วยความช่วยเหลือของขั้นตอนต่อไปนี้ -

  • Step 1- สำหรับการใช้อัลกอริทึมใด ๆ เราจำเป็นต้องมีชุดข้อมูล ดังนั้นในขั้นตอนแรกของ KNN เราต้องโหลดการฝึกอบรมและข้อมูลการทดสอบ

  • Step 2- ต่อไปเราต้องเลือกค่า K คือจุดข้อมูลที่ใกล้ที่สุด K สามารถเป็นจำนวนเต็มเท่าใดก็ได้

  • Step 3 - สำหรับแต่ละจุดในข้อมูลการทดสอบให้ทำดังต่อไปนี้ -

    3.1- คำนวณระยะห่างระหว่างข้อมูลการทดสอบและข้อมูลการฝึกอบรมแต่ละแถวด้วยความช่วยเหลือของวิธีการใด ๆ ได้แก่ ระยะทางแบบยุคลิดแมนฮัตตันหรือแฮมมิง วิธีการคำนวณระยะทางที่ใช้บ่อยที่สุดคือแบบยุคลิด

    3.2 - ตอนนี้ขึ้นอยู่กับค่าระยะทางเรียงลำดับจากน้อยไปมาก

    3.3 - จากนั้นจะเลือกแถว K บนสุดจากอาร์เรย์ที่เรียงลำดับ

    3.4 - ตอนนี้จะกำหนดคลาสให้กับจุดทดสอบตามคลาสที่พบบ่อยที่สุดของแถวเหล่านี้

  • Step 4 - จบ

ตัวอย่าง

ต่อไปนี้เป็นตัวอย่างเพื่อทำความเข้าใจแนวคิดของ K และการทำงานของอัลกอริทึม KNN -

สมมติว่าเรามีชุดข้อมูลซึ่งสามารถลงจุดได้ดังนี้ -

ตอนนี้เราต้องจำแนกจุดข้อมูลใหม่ด้วยจุดสีดำ (ที่จุด 60,60) เป็นชั้นสีน้ำเงินหรือสีแดง เราสมมติว่า K = 3 คือมันจะพบจุดข้อมูลที่ใกล้ที่สุดสามจุด จะแสดงในแผนภาพถัดไป -

เราสามารถเห็นในแผนภาพด้านบนเพื่อนบ้านที่ใกล้ที่สุดสามจุดของจุดข้อมูลที่มีจุดสีดำ ในสามคนนั้นสองคนอยู่ในคลาสสีแดงดังนั้นจุดสีดำจะถูกกำหนดในคลาสสีแดงด้วย

การใช้งานใน Python

ดังที่เราทราบอัลกอริทึม K-near Neighbor (KNN) สามารถใช้ได้ทั้งการจำแนกประเภทและการถดถอย ต่อไปนี้เป็นสูตรอาหารใน Python เพื่อใช้ KNN เป็นตัวจำแนกและ regressor -

KNN เป็นลักษณนาม

ขั้นแรกเริ่มต้นด้วยการนำเข้าแพ็คเกจ python ที่จำเป็น -

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

จากนั้นดาวน์โหลดชุดข้อมูลม่านตาจากเว็บลิงค์ดังต่อไปนี้ -

path = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"

ต่อไปเราต้องกำหนดชื่อคอลัมน์ให้กับชุดข้อมูลดังนี้ -

headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']

ตอนนี้เราต้องอ่าน dataset ไปยัง dataframe ของแพนด้าดังนี้ -

dataset = pd.read_csv(path, names=headernames)
dataset.head()
slno. ความยาวของกลีบเลี้ยง ความกว้างของกลีบเลี้ยง ความยาวกลีบดอก ความกว้างกลีบดอก คลาส
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa

การประมวลผลข้อมูลล่วงหน้าจะดำเนินการด้วยความช่วยเหลือของบรรทัดสคริปต์ต่อไปนี้ -

X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 4].values

ต่อไปเราจะแบ่งข้อมูลออกเป็นส่วนรถไฟและการทดสอบ รหัสต่อไปนี้จะแบ่งชุดข้อมูลออกเป็นข้อมูลการฝึกอบรม 60% และข้อมูลการทดสอบ 40% -

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.40)

ต่อไปการปรับขนาดข้อมูลจะทำได้ดังนี้ -

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)

จากนั้นฝึกโมเดลด้วยความช่วยเหลือของ KNeighborsClassifier class ของ sklearn ดังต่อไปนี้ -

from sklearn.neighbors import KNeighborsClassifier
classifier = KNeighborsClassifier(n_neighbors=8)
classifier.fit(X_train, y_train)

ในที่สุดเราต้องทำการทำนาย สามารถทำได้ด้วยความช่วยเหลือของสคริปต์ต่อไปนี้ -

y_pred = classifier.predict(X_test)

จากนั้นพิมพ์ผลลัพธ์ดังนี้ -

from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
result = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(result)
result1 = classification_report(y_test, y_pred)
print("Classification Report:",)
print (result1)
result2 = accuracy_score(y_test,y_pred)
print("Accuracy:",result2)

เอาต์พุต

Confusion Matrix:
[[21 0 0]
[ 0 16 0]
[ 0 7 16]]
Classification Report:
            precision      recall       f1-score       support
Iris-setosa       1.00        1.00         1.00          21
Iris-versicolor   0.70        1.00         0.82          16
Iris-virginica    1.00        0.70         0.82          23
micro avg         0.88        0.88         0.88          60
macro avg         0.90        0.90         0.88          60
weighted avg      0.92        0.88         0.88          60


Accuracy: 0.8833333333333333

KNN เป็น Regressor

ขั้นแรกเริ่มต้นด้วยการนำเข้าแพ็คเกจ Python ที่จำเป็น -

import numpy as np
import pandas as pd

จากนั้นดาวน์โหลดชุดข้อมูลม่านตาจากเว็บลิงค์ดังต่อไปนี้ -

path = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"

ต่อไปเราต้องกำหนดชื่อคอลัมน์ให้กับชุดข้อมูลดังนี้ -

headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']

ตอนนี้เราต้องอ่าน dataset ไปยัง dataframe ของแพนด้าดังนี้ -

data = pd.read_csv(url, names=headernames)
array = data.values
X = array[:,:2]
Y = array[:,2]
data.shape

output:(150, 5)

จากนั้นนำเข้า KNeighborsRegressor จาก sklearn เพื่อให้พอดีกับรุ่น -

from sklearn.neighbors import KNeighborsRegressor
knnr = KNeighborsRegressor(n_neighbors=10)
knnr.fit(X, y)

ในที่สุดเราสามารถค้นหา MSE ได้ดังนี้ -

print ("The MSE is:",format(np.power(y-knnr.predict(X),2).mean()))

เอาต์พุต

The MSE is: 0.12226666666666669

ข้อดีข้อเสียของ KNN

ข้อดี

  • เป็นขั้นตอนวิธีที่ง่ายมากในการทำความเข้าใจและตีความ

  • มีประโยชน์มากสำหรับข้อมูลที่ไม่ใช่เชิงเส้นเนื่องจากไม่มีข้อสันนิษฐานเกี่ยวกับข้อมูลในอัลกอริทึมนี้

  • มันเป็นอัลกอริทึมอเนกประสงค์ที่เราสามารถใช้เพื่อการจำแนกประเภทและการถดถอย

  • มีความแม่นยำค่อนข้างสูง แต่มีรูปแบบการเรียนรู้ภายใต้การดูแลที่ดีกว่า KNN มาก

จุดด้อย

  • เป็นอัลกอริธึมที่มีราคาแพงในการคำนวณเนื่องจากเก็บข้อมูลการฝึกอบรมทั้งหมด

  • ต้องใช้พื้นที่จัดเก็บหน่วยความจำสูงเมื่อเทียบกับอัลกอริทึมการเรียนรู้อื่น ๆ

  • การทำนายจะช้าในกรณีที่มี N ขนาดใหญ่

  • มีความอ่อนไหวอย่างมากต่อขนาดของข้อมูลและคุณสมบัติที่ไม่เกี่ยวข้อง

การใช้งาน KNN

ต่อไปนี้เป็นบางส่วนที่สามารถใช้ KNN ได้สำเร็จ -

ระบบธนาคาร

KNN สามารถใช้ในระบบธนาคารเพื่อทำนายสภาพอากาศของแต่ละบุคคลว่าเหมาะสำหรับการอนุมัติสินเชื่อหรือไม่? บุคคลนั้นมีลักษณะที่คล้ายคลึงกับค่าเริ่มต้นหรือไม่?

การคำนวณอันดับเครดิต

สามารถใช้อัลกอริทึม KNN เพื่อหาอันดับเครดิตของแต่ละบุคคลโดยเปรียบเทียบกับบุคคลที่มีลักษณะคล้ายคลึงกัน

การเมือง

ด้วยความช่วยเหลือของอัลกอริทึมของ KNN เราสามารถจำแนกผู้มีสิทธิเลือกตั้งออกเป็นชั้นเรียนต่างๆเช่น“ Will Vote”,“ Will not Vote”,“ Will Vote to Party 'Congress',“ Will Vote to Party 'BJP'

พื้นที่อื่น ๆ ที่สามารถใช้อัลกอริทึม KNN ได้แก่ การรู้จำเสียง, การตรวจจับลายมือ, การจดจำรูปภาพและการจดจำวิดีโอ