-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathknn.py
More file actions
80 lines (61 loc) · 2.2 KB
/
Copy pathknn.py
File metadata and controls
80 lines (61 loc) · 2.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
import utility as util
import load_data
import time
def knn_sklearn(k):
"""
Function: Compute K-NN on Netflix data using SKLearn's model
use One Vs Rest algorithm
Regularization determined by parameter C=1/lamda default is 1, no regularization is C=inf
Regularization showed little effect
Args:
k(int) - k parameter of K-NN
Returns: None
"""
# read all Netflix data
data = load_data.Data()
# data set split: training, cv, test
split_data_ratio = [0.8, 0, 0.2]
data.manual_split(split_data_ratio)
knn = KNeighborsClassifier(n_neighbors=k, weights='distance')
knn.fit(data.x_train, data.y_train)
y_est = knn.predict(data.x_test)
knn_srmse = util.srmse(y_est, data.y_test)
print("K-NN SKLearn Root Mean squared error: %.3f" % knn_srmse)
util.count_err(y_est, data.y_test, 1)
def knn_manual(k):
"""
Function: Compute K-NN on Netflix data using SKLearn's model
use One Vs Rest algorithm
Regularization determined by parameter C=1/lamda default is 1, no regularization is C=inf
Regularization showed little effect
Args:
k(int) - k parameter of K-NN
Returns: None
"""
# read all Netflix data
data = load_data.Data()
# data set split: training, cv, test
split_data_ratio = [0.8, 0, 0.2]
data.manual_split(split_data_ratio)
y_est = np.zeros(data.n_test)
for obs in range(data.n_test):
x = data.x_test[obs]
dist = np.linalg.norm((data.x_train-x), ord=2, axis=1)
sorted_index = np.argsort(dist)
top = sorted_index[0:k]
y_est[obs] = np.mean(data.y_train[top])
knn_srmse = util.srmse(y_est, data.y_test)
print("K-NN Manual Root Mean squared error: %.3f" % knn_srmse)
util.count_err(y_est, data.y_test, 1)
def main():
start_time = time.time()
k = 20
funcdict = dict(
sklearn=knn_sklearn,
manual=knn_manual
)
funcdict['manual'](k)
print("--- %s seconds ---" % (time.time() - start_time))
if __name__ == "__main__": main()