-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathGetKNearestNeighbor.py
53 lines (40 loc) · 1.32 KB
/
GetKNearestNeighbor.py
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
import numpy as np
import pandas as pd
import scipy.sparse as sparse
from datetime import datetime
from pandas import DataFrame
from pandas import Series
from sklearn.decomposition import PCA
from sklearn.neighbors import NearestNeighbors
import warnings
def k_neighbors(mtx, k, number):
warnings.filterwarnings("ignore")
# Using PCA for dimensionality reduction
start = datetime.now()
pca = PCA(copy=True)
pca_mtx = pca.fit_transform(mtx)
end = datetime.now()
# Build the KNN model
start = datetime.now()
neigh = NearestNeighbors(n_neighbors=k + 1, algorithm='auto', metric="cosine", n_jobs=1)
neigh.fit(pca_mtx)
end = datetime.now()
# Obtain the k nearst neighbors for each use
start = datetime.now()
distance, neighbor = neigh.kneighbors(pca_mtx)
new_neighbor = []
for i in range(len(neighbor)):
temp = []
find = 0
count = 1
for j in range(len(neighbor[i])):
if i != neighbor[i][j]:
temp.append(neighbor[i][j])
count += 1
else:
find = 1
if find == 0 and count == len(neighbor[i]):
break
#print(i,temp)
new_neighbor.append(temp)
return new_neighbor