深度学习基础系列(四)之 用 python 实现 KNN 算法
2017-05-14 11:51
615 查看
步骤:
获得数据,将数据集分离成 测试集 和 训练集 计算每个测试实例与训练集之间的 euclideanDistance,从训练集中抽离出euclideanDistance 最短的 k 个实例成新的数据集 根据选出的 k 个实例集的结果按照标记进行分类,判断测试实例 计算算法的精确度
import csv import random import math import operator # 获得数据 # prepare data def loadDataset(filename, split, trainingSet = [], testSet = []): with open(filename, 'r') as csvfile: lines = csv.reader(csvfile) dataset = list(lines) for x in range(len(dataset)-1): for y in range(4): # 将数据集中的字符串类型转换成浮点类型 # change the type into float in order to sort in a more simple way dataset[x][y] = float(dataset[x][y]) if random.random() < split: trainingSet.append(dataset[x]) else: testSet.append(dataset[x]) # 计算 instance1 和 instance2 的 euclidean # calculate euclidean distance between two instance def euclideanDistance(instance1, instance2, length): distance = 0 for x in range(length): distance += pow((instance1[x]-instance2[x]), 2) return math.sqrt(distance) # 获得 测试实例 与 训练集离得最近的 k 个点 def getNeighbors(trainingSet, testInstance, k): distances = [] length = len(testInstance)-1 for x in range(len(trainingSet)): dist = euclideanDistance(testInstance, trainingSet[x], length) # length is 4 distances.append((trainingSet[x], dist)) distances.sort(key=operator.itemgetter(1)) neighbors = [] for x in range(k): neighbors.append(distances[x][0]) return neighbors # 获得模型的判断结果 def getResponse(neighbors): classVotes = {} for x in range(len(neighbors)): response = neighbors[x][-1] if response in classVotes: classVotes[response] += 1 else: classVotes[response] = 1 sortedVotes = sorted(classVotes.items(), key=operator.itemgetter(1), reverse=True) return sortedVotes[0][0] # 获得精确度 def getAccuracy(testSet, predictions): correct = 0 for x in range(len(testSet)): if testSet[x][-1] == predictions[x]: correct += 1 return (correct/float(len(testSet)))*100.0 def main(): #prepare data trainingSet = [] testSet = [] split = 0.80 loadDataset('irisdata.txt', split, trainingSet, testSet) print('Train set: ' + str(len(trainingSet))) print('Test set: ' + str(len(testSet))) #generate predictions predictions = [] k = 3 for x in range(len(testSet)): # trainingsettrainingSet[x] neighbors = getNeighbors(trainingSet, testSet[x], k) result = getResponse(neighbors) predictions.append(result) print('>predicted=' + str(result) + ', actual=' + str(testSet[x][-1])) accuracy = getAccuracy(testSet, predictions) print('Accuracy: ' + repr(accuracy) + '%') if __name__ == '__main__': main()
相关文章推荐
- 深度学习基础系列(三)之用 sklearn 实现 KNN算法
- 分类算法系列1-----KNN(K近邻)算法思想和python实现
- 机器学习与数据挖掘系列算法之--knn的python实现
- <基础原理进阶>机器学习算法python实现【1】--分类简谈&KNN算法
- 机器学习经典算法详解及Python实现--K近邻(KNN)算法
- 零基础算法系列代码_用递归实现进制转换
- 机器学习与数据挖掘-K最近邻(KNN)算法的实现(java和python版)
- Python机器学习(二)--kNN算法实现
- Python实现的knn算法示例
- 机器学习经典算法详解及Python实现–K近邻(KNN)算法
- [机器学习]kNN算法python实现(实例:数字识别)
- 【Python】基于kNN算法的手写识别系统的实现与分类器测试
- K最近邻结点算法(k-Nearest Neighbor algorithm)KNN——python简单实现
- 数据挖掘10大算法(6)-K最近邻(KNN)算法的实现(java和python版)
- Python实现KNN算法
- Python实现KNN算法
- Python3.2 实现基于KNN算法的数据分类
- python算法实现系列-归并排序
- kNN算法python实现和简单数字识别的方法
- 零基础Python教程:如何实现PCA算法