Skip to content

Commit 9737315

Browse files
slowy07github-actions
andauthored
K nearest neighbour (#260)
* feat: menambahkan algoritma k nearest neigbour * update DIRECTORY.md --------- Co-authored-by: github-actions <bellshdae07@gmail.com>
1 parent d63ba23 commit 9737315

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

DIRECTORY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@
150150
* [Decision Tree](https://github.com/bellshade/Python/blob/main/implementation/artificial_intelligence/decision_tree.py)
151151
* [Gradient Descent](https://github.com/bellshade/Python/blob/main/implementation/artificial_intelligence/gradient_descent.py)
152152
* [K Means Clutser](https://github.com/bellshade/Python/blob/main/implementation/artificial_intelligence/k_means_clutser.py)
153+
* [K Nearest Neighbour](https://github.com/bellshade/Python/blob/main/implementation/artificial_intelligence/k_nearest_neighbour.py)
153154
* [Linear Regression](https://github.com/bellshade/Python/blob/main/implementation/artificial_intelligence/linear_regression.py)
154155
* [Logistic Regression](https://github.com/bellshade/Python/blob/main/implementation/artificial_intelligence/logistic_regression.py)
155156
* [Lstm](https://github.com/bellshade/Python/blob/main/implementation/artificial_intelligence/lstm.py)
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# algoritma ini adalah merupakan algoritma machine learning
2+
# sederhana dan mudah diterapkan yang dapat digunakan untuk
3+
# menyelesaikan masalah klasifikasi dan regresi
4+
# algoritma KNN menggunakan sejumlah paramater
5+
# yang fleksibel, dan jumlah parameter seringkali bertambah
6+
# seiring data yang semakin banyak.
7+
# algoritma KNN juga bersifat lazy learning, yang artinya tidak
8+
# menggunaakan titik data training untuk membuat model. singkatnya
9+
# algoritma ini tidak ada fase training, kalaupun juga sangat minim.
10+
# referensi
11+
# - https://www.ibm.com/topics/knn
12+
13+
from collections import Counter
14+
15+
import numpy as np
16+
from sklearn import datasets
17+
from sklearn.model_selection import train_test_split
18+
19+
data = datasets.load_iris()
20+
21+
X = np.array(data["data"])
22+
y = np.array(data["target"])
23+
classes = data["target_names"]
24+
25+
X_train, X_train, y_train, y_test = train_test_split(X, y)
26+
27+
28+
def euclidean_distance(a, b):
29+
"""
30+
memberikan jarak antara dua euclidean
31+
>>> euclidean_distance([0, 0], [3, 4])
32+
5.0
33+
"""
34+
return np.linalg.norm(np.array(a) - np.array(b))
35+
36+
37+
def klasifikasi(train_data, train_target, classes, point, k=5):
38+
"""
39+
mengklasifikasikan titik algoritma menggunakan algortima
40+
KNN, k titik terdekat ditemukan (diurutkan dalam urutan
41+
menaik jarak euclidean)
42+
43+
>>> X_train = [[0, 0], [1, 0], [0, 1], [0.5, 0.5], [3, 3], [2, 3], [3, 2]]
44+
>>> y_train = [0, 0, 0, 0, 1, 1, 1]
45+
>>> classes = ['A','B']; point = [1.2,1.2]
46+
>>> klasifikasi(X_train, y_train, classes, point)
47+
'A'
48+
"""
49+
data = zip(train_data, train_target)
50+
jarak = []
51+
for data_point in data:
52+
jarak_1 = euclidean_distance(data_point[0], point)
53+
jarak.append((jarak_1, data_point[1]))
54+
votes = [i[1] for i in sorted(jarak)[:k]]
55+
hasil = Counter(votes).most_common(1)[0][0]
56+
return classes[hasil]
57+
58+
59+
if __name__ == "__main__":
60+
print(klasifikasi(X_train, y_train, classes, [4.4, 3.1, 1.3, 1.4]))

0 commit comments

Comments
 (0)