上一期文章:「10」民主投票法——KNN的秘密 中,我们剖析了KNN算法的本质和特点、局限。这里我们用python代码进行KNN的实现。第1部分是KNN的基础算法步骤,第2部分是一个电影分类的实战项目。
OK, let's begin~
KNN算法实现
1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
4 import csv
5 import random
6 import math
7 import operator
8
9 # 加载数据集
10 def loadDataset(filename, split, trainingSet = [], testSet = []):
11 with open(filename, 'r') as csvfile:
12 lines = csv.reader(csvfile)
13 dataset = list(lines)
14 for x in range(len(dataset)-1):
15 for y in range(4):
16 dataset[x][y] = float(dataset[x][y])
17 if random.random() < split: #将数据集随机划分
18 trainingSet.append(dataset[x])
19 else:
20 testSet.append(dataset[x])
21
22 # 计算点之间的距离,多维度的
23 def euclideanDistance(instance1, instance2, length):
24 distance = 0
25 for x in range(length):
26 distance += pow((instance1[x]-instance2[x]), 2)
27 return math.sqrt(distance)
28
29 # 获取k个邻居
30 def getNeighbors(trainingSet, testInstance, k):
31 distances = []
32 length = len(testInstance)-1
33 for x in range(len(trainingSet)):
34 dist = euclideanDistance(testInstance, trainingSet[x], length)
35 distances.append((trainingSet[x], dist)) #获取到测试点到其他点的距离
36 distances.sort(key=operator