python_机器学习_最临近规则分类(K-Nearest Neighbor)KNN算法
1. 概念:
https://scikit-learn.org/stable/modules/neighbors.html
1. Cover和Hart在1968年提出了最初的临近算法
2. 分类算法(classification)
3. 输入基于实例的学习(instance-based leaning)。懒惰学习(lazy learning)
开始时候不广泛建立模型,在归类的时候才分类
2. 例子:
3. 算法详述
1. 步骤:
为了判断未知实例的类别,以所有已知类别的实例作为参照
选择参数K
计算未知实例与所有已知实例的距离
选择最近K个已知实例 ---》 通常是奇数,更好的选择
根据少数服从多数的投票法则, 让未知实例归类为K个最邻近样本肿最多数的类别
2. 细节:
关于K
关于距离的衡量方法:
1). Euclidean Distance定义
3. 举例:
4. 算法优缺点
1. 算法优点:
简单
易于理解
容易实现
通过对K的选择可具备丢噪音数据的健壮性
2. 算法缺点
需要大量空间存储所有已知实例
算法复杂度高(需要比较所有已知实例与要分类的实例)
比如Y那个点属于不平衡,属于短板
当其样本分布不平衡时, 比如其中一类样本过大(实例数量过多)占主导的时候, 新的未知实例容易被分类为这个主导样本, 因为这类样本实例的数量过大,但这个新的
未知实例并没有接近目标样本
5. 改进版本
考虑距离, 根据距离增加权重
比如1/d(d:距离)
6. 应用
虹膜花数据集介绍
python3.6.3
# -*- coding:utf-8 -*- from sklearn import neighbors
from sklearn import datasets knn = neighbors.KNeighborsClassifier()
# 返回一个数据库 iris ---> 默认的参数
# 'filename': 'C:\\python3.6.3\\lib\\site-packages\\sklearn\\datasets\\data\\iris.csv'
iris = datasets.load_iris() print(iris) # 模型建立
# data为特征值
# target 为向量,每一行对应的分类,一维的模型
knn.fit(iris.data, iris.target)
# 预测
predictedLabel = knn.predict([[0.1, 0.2, 0.3, 0.4]])
print("===========================\n\n\n\n\n\n\n")
# [0] 属于第一类花的名字
# 'target_names': array(['setosa', 'versicolor', 'virginica']
print(predictedLabel)
模拟过程自己封装--》不是我写的,是我抄的--》代码也没测试
# -*- coding:utf-8 -*- import csv
import random
import math
import operator def loadDataset(filename, split, trainingSet=[], testSet=[]):
with open(filename, 'rb') 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):
distance = 0
for x in range(length):
distance += pow((instance1[x] - instance2[x]), 2)
return math.sqrt(distance) def getNeighbors(trainingSet, testInstance, k):
distance = []
length = len(testInstance) -1
for x in range(len(trainingSet)):
dist = euclideanDistance(testInstance, trainingSet[x], length)
distance.append((trainingSet[x], dist))
distance.sort(key=operator.itemgetter(1))
neighbors = []
for x in range(k):
neighbors.append(distance[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.iteritems(), 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():
trainingSet = []
testSet = [] split = 0.57
loadDataset(r"...", split, trainingSet) print "Train set: " + repr(len(trainingSet))
print "Train set: " + repr(len(testSet)) predictions = []
k = 3
for x in range(len(testSet)):
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) + "%") main()
python_机器学习_最临近规则分类(K-Nearest Neighbor)KNN算法的更多相关文章
- K Nearest Neighbor 算法
文章出处:http://coolshell.cn/articles/8052.html K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KN ...
- K NEAREST NEIGHBOR 算法(knn)
K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-M ...
- python_机器学习_监督学习模型_决策树
决策树模型练习:https://www.kaggle.com/c/GiveMeSomeCredit/overview 1. 监督学习--分类 机器学习肿分类和预测算法的评估: a. 准确率 b.速度 ...
- 最邻近规则分类(K-Nearest Neighbor)KNN算法
自写代码: # Author Chenglong Qian from numpy import * #科学计算模块 import operator #运算符模块 def createDaraSet( ...
- 4.2 最邻近规则分类(K-Nearest Neighbor)KNN算法应用
1 数据集介绍: 虹膜 150个实例 萼片长度,萼片宽度,花瓣长度,花瓣宽度 (sepal length, sepal width, petal length and petal wi ...
- K nearest neighbor cs229
vectorized code 带来的好处. import numpy as np from sklearn.datasets import fetch_mldata import time impo ...
- K-Means和K Nearest Neighbor
来自酷壳: http://coolshell.cn/articles/7779.html http://coolshell.cn/articles/8052.html
- 吴裕雄--天生自然python机器学习实战:K-NN算法约会网站好友喜好预测以及手写数字预测分类实验
实验设备与软件环境 硬件环境:内存ddr3 4G及以上的x86架构主机一部 系统环境:windows 软件环境:Anaconda2(64位),python3.5,jupyter 内核版本:window ...
- 机器学习实战(笔记)------------KNN算法
1.KNN算法 KNN算法即K-临近算法,采用测量不同特征值之间的距离的方法进行分类. 以二维情况举例: 假设一条样本含有两个特征.将这两种特征进行数值化,我们就可以假设这两种特种分别 ...
随机推荐
- [Go] 利用有缓存channel控制同时并发的数量
如果有一个大循环,里面每一个都开启groutine,那么瞬间就会开启非常多的groutine,要解决这个问题就要用channel的阻塞特性来解决 package main import "t ...
- Linux同一机器设置多个IP2019-7-6
1.临时增加 1)先查看目前的网卡信息 [root@study ~]# ifconfigeno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAS ...
- Linux系统配置永久明细路由
版权声明:本文为博主原创文章,支持原创,转载请附上原文出处链接和本声明. 本文链接地址:https://www.cnblogs.com/wannengachao/p/11947400.html 1.创 ...
- win10安装并激活office
安装并且激活office 相信很多小伙伴在平时安装office时都会和一些流氓软件做过激烈的斗争,但是还是没有安装成功, 最后完美的安装了一些流氓软件.(苦笑) 下面我们来安装office并且破解 下 ...
- 7.Java基础_Java数据输入
import java.util.Scanner; public class Output { public static void main(String[] args){ Scanner sc=n ...
- 201271050130-滕江南《面向对象程序设计(java)》第十周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- lua 9 parttern 字符极其简要的介绍
摘自:https://www.lua.org/pil/20.2.html 所有的字符和含义包括: . all characters %a letters %c control characters % ...
- Python 链表(linked list)
链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 链表由一系列结点组成,结点可以在运行时动态生成 优点 由于不必须按顺序存储,链表在插入.删除的时候 ...
- CSP-J&S2019前颓废记
说了是颓废记,就是颓废记,因为真的很颓废...... 2018年12月 我看懂了<啊哈算法>(仅仅是看懂,并没有完全学会,只看得懂,却不会敲) 插曲:八上期末考试 我们老师阻挠我继续学OI ...
- 使用Vue封装暂无数据占位图组件
1. 前言 在日常开发中,页面上肯定有展示数据的需求,但是当某些时候该展示数据的地方此时数据为空时,就会留下一片空白,对用户体验不是很好,那么接下来我们就封装一个空数据时的占位展示图,告诉用户此时用户 ...