Python3 k-邻近算法(KNN)

 1 # -*- coding: utf-8 -*-
 2 """
 3 Created on Fri Dec 29 13:13:44 2017
 4 
 5 @author: markli
 6 """
 7 import numpy as np;
 8 #两点之间的距离采用欧式几何距离
 9 '''
10 采用欧式距离进行K最小临近分类
11 x 未知分类点 m*1 向量
12 y n个测试样本点 m*n 维向量
13 '''
14 def ComputeDistance(x,y):
15     m = len(x); #获取维度数量
16     #print(m);
17     tempeye = -np.eye(m);
18     tempone = np.ones((1,m));
19     C = np.vstack((tempone,tempeye));#中间过渡矩阵 m+1 * m 按列合并,列数不变扩张行
20     translateMatrix = np.hstack((x,y)); #按行合并,行数不变,扩张列
21     tempresult = np.dot(translateMatrix,C);
22     result = np.multiply(tempresult,tempresult);
23     #result = [d**2 for d in np.array(tempresult)];
24     result = np.sum(result,axis=0)
25     distance = [pow(d,1/m) for d in np.array(result)];
26     return distance;
27 
28 '''
29 k 选取点的个数
30 distance 带预测点与每个样本点的距离
31 labels 每个样本点的类别标记
32 return 返回距离最近的k的样本点的类别标记
33 '''
34 def KNN(k,distance,labels):
35     dis_label = [];
36     for i in range(len(labels)):
37         tup = (distance[i],labels[i]);
38         dis_label.append(tup);
39     dis_label = sorted(dis_label,lambda x:x[0]);
40     Kmin = [];
41     for i in range(k-1):
42         label = dis_label[i][1];
43         if label not in Kmin:
44             Kmin.append(label);
45     return Kmin;
46     
47     
48     
49 #sklearn 中的KNN
50 # -*- coding: utf-8 -*-
51 """
52 Created on Sat Dec 30 09:36:18 2017
53 
54 @author: markli
55 """
56 from sklearn import neighbors;
57 from sklearn import datasets;
58 import numpy as np;
59 import matplotlib.pyplot as plt;
60 
61 KNN = neighbors.KNeighborsClassifier(n_neighbors=5,weights='distance');
62 iris = datasets.load_iris();
63 
64 #print(iris);
65 
66 KNN.fit(iris.data,iris.target);
67 x = [0.2,0.4,0.3,0.5];
68 y = KNN.predict(np.array(x).reshape((1,4)));
69 print(iris.target_names[y]);
70 
71 #k = neighbors.NearestNeighbors();
72 #A = k.kneighbors_graph(iris.data,n_neighbors=5,mode='distance');

 

posted on 2018-01-17 19:27  FightLi  阅读(275)  评论(0编辑  收藏  举报