机器学习之KNN算法学习笔记
1. 综述
2.1 步骤
2.2 细节:
2.3 举例
3. 例子
4、python代码实现
利用Python的机器学习库sklearn: SkLearnExample.py
import csv
import random
import math
import operatordef loadDataset(filename, split, trainingSet = [], testSet = []):'''导入数据:param filename::param split: 将数据总集以split为界限 分成训练集和测试集:param trainingSet::param testSet::return:'''with open(filename, 'rt') as csvfile: # 以逗号为分隔符lines = csv.reader(csvfile) # 读取所有行dataset = list(lines)for x in range(len(dataset)-1):for y in range(4):dataset[x][y] = float(dataset[x][y])if random.random() < split:trainingSet.append(dataset[x])else:testSet.append(dataset[x])def euclideanDistance(instance1, instance2, length):'''计算euclideanDistance:param instance1::param instance2::param length: 维度:return:'''distance = 0for x in range(length):distance += pow((instance1[x]-instance2[x]), 2)return math.sqrt(distance)def getNeighbors(trainingSet, testInstance, k):'''返回最近的k个邻居:param trainingSet: 训练集:param testInstance: 一个测试实例:param k: 参数k:return:'''distances = []length = len(testInstance)-1for x in range(len(trainingSet)):#testinstancedist = euclideanDistance(testInstance, trainingSet[x], length)distances.append((trainingSet[x], dist))#distances.append(dist)distances.sort(key=operator.itemgetter(1))neighbors = []for x in range(k):neighbors.append(distances[x][0])return neighborsdef getResponse(neighbors):'''以距离排序,返回最近的几个点:param neighbors::return:'''classVotes = {}for x in range(len(neighbors)):response = neighbors[x][-1]if response in classVotes:classVotes[response] += 1else:classVotes[response] = 1sortedVotes = sorted(classVotes.items(), key=operator.itemgetter(1), reverse=True) # python3 里的.items()返回的是列表,.iteritems()返回的是一个迭代器return sortedVotes[0][0]def getAccuracy(testSet, predictions):'''预测值和实际值的准确率:param testSet::param predictions::return:'''correct = 0for x in range(len(testSet)):if testSet[x][-1] == predictions[x]:correct += 1return (correct/float(len(testSet)))*100.0def main():#prepare datatrainingSet = []testSet = []split = 0.67loadDataset(r'irisdata.txt', split, trainingSet, testSet)print('Train set: ' + repr(len(trainingSet)))print('Test set: ' + repr(len(testSet)))#generate predictionspredictions = []k = 3for x in range(len(testSet)):# trainingsettrainingSet[x]neighbors = getNeighbors(trainingSet, testSet[x], k)result = getResponse(neighbors)predictions.append(result)print ('>predicted=' + repr(result) + ', actual=' + repr(testSet[x][-1]))accuracy = getAccuracy(testSet, predictions)print('Accuracy: ' + repr(accuracy)+ '%')if __name__ == '__main__':main()
5. 算法优缺点
5.1 算法优点
5.2 算法缺点
转载于:https://www.cnblogs.com/momo072994MLIA/p/9435102.html
机器学习之KNN算法学习笔记相关推荐
- 机器学习knn算法学习笔记使用sklearn库 ,莺尾花实例
** 机器学习knn算法学习笔记使用sklearn库 ,莺尾花实例. 具体knn算法是怎样的我这里就不再详细论述.在这里我注意总结我使用knn算法进行一个分类的分析 ** 分析过程 1.前期准备 引入 ...
- 机器学习入门 —— 超级详细的KNN算法学习笔记、KNN算法的三要素、KNN算法的优缺点
文章目录 KNN(K nearest neighbors) K值的选择和影响 k取值偏小 k取值偏大 样本点距离的计算方式 闵可夫斯基距离 曼哈顿距离 欧几里得距离 切比雪夫距离 余弦距离 决策函数的 ...
- 机器学习篇01:在线学习的支持向量机算法学习笔记
在线学习的支持向量机算法学习笔记 oisvm算法实现说明 oisvm算法实现说明 % 本程序是用于实现基于在线学习的调制信号识别的程序 % % % 第一步:调制信号的生成 % 首先是7个信号:2ASK ...
- 【1】机器学习实战peter Harrington——学习笔记
机器学习实战peter Harrington--学习笔记 综述 数据挖掘十大算法 本书结构 一.机器学习基础 1.1 机器学习 1.2 关键术语 1.3 机器学习主要任务 1.4 如何选择合适的算法 ...
- 机器学习框架ML.NET学习笔记【1】基本概念与系列文章目录
一.序言 微软的机器学习框架于2018年5月出了0.1版本,2019年5月发布1.0版本.期间各版本之间差异(包括命名空间.方法等)还是比较大的,随着1.0版发布,应该是趋于稳定了.之前在园子里也看到 ...
- 机器学习框架ML.NET学习笔记【5】多元分类之手写数字识别(续)
一.概述 上一篇文章我们利用ML.NET的多元分类算法实现了一个手写数字识别的例子,这个例子存在一个问题,就是输入的数据是预处理过的,很不直观,这次我们要直接通过图片来进行学习和判断.思路很简单,就是 ...
- Python最优化算法学习笔记(Gurobi)
微信公众号:数学建模与人工智能 github地址:https://github.com/QInzhengk/Math-Model-and-Machine-Learning Python最优化算法学习笔 ...
- python3《机器学习实战系列》学习笔记----3.2 决策树实战
前言 一.ID3算法构造决策树 1.1 背景 1.2 信息增益计算 1.3 递归生成决策树 二.使用Matplotlib注解绘制树形图 2.1 Matplotlib注解 2.2 构造注解树 三.测试和 ...
- 机器学习之KNN算法原理
机器学习之KNN算法原理 1 KNN算法简介 2 算法思想 3 多种距离度量公式 ① 欧氏距离(Euclidean distance) ② 曼哈顿距离(Manhattan distance) ③ 闵式 ...
最新文章
- 深度学习计算机视觉常见的29道面试题及解析
- 浅析py-faster-rcnn中不同版本caffe的安装及其对应不同版本cudnn的解决方案
- win2000输入密码后循环登陆,不能进入用户桌面
- 没有建立对验证码签名的目录的发布者信任
- IP地址分类及ISO-OSI、三次握手
- 基于javaweb(springboot+mybatis)宠物医院预约管理系统设计和实现以及论文报告
- python3文档字符串_python3基础:字符串、文本文件
- Speaker Recognition: Feature Extraction
- java发送hotmail邮件,使用javamail将电子邮件发送到hotmail时遇到问题
- LVS 实现负载均衡
- abaqus2018+intel fortran2019+vs2015安装全记录
- Ubuntu/Win10双系统安全删除Ubuntu的方法
- Github上传代码及解决main主分支问题
- 六款超好用的大数据分析工具
- 组织人事领域信息化探索:开启编制、干部、人事一体化管理新模式
- GTX1050Ti和GTX1060的差距 哪个好
- 一文搞懂蓝绿部署和金丝雀发布
- 三峡大学计算机与信息学院王,周欢,三峡大学 计算机与信息学院
- springboot 和 js (vue) 实现SM3加密 防篡改
- Tridium niagara N4---报警告警信息点设置
热门文章
- NumPy、TensorFlow和scikit-learn简介
- 统一操作系统 UOS 龙芯版上线
- .NET Core 2.1.12 与 2.2.6 发布,修复 URL 重定向欺骗漏洞
- 使用dotMemory Unit发现并修复内存问题
- .NET中的异步编程——常见的错误和最佳实践
- python生成随机数random操作_Python random生成随机数示例
- gradle 不支持多级子模块_解决gradle多模块依赖在Idea中能运行,gradle build失败的问题。...
- PHP 5.6 中 Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future
- android7.1以太网动态ip,android7.1编译路上的那些坑!(部分转自网络整理)
- laravel mysql 视图_Laravel框架控制器,视图及模型操作图文详解