1 定义画图函数,用来可视化数据分布

(注:jupyternotebook来编写的代码)

import  matplotlib.pyplot as plt
import numpy as np %config ZMQInteractiveShell.ast_node_interactivity='all'
def draw(X_train,y_train,X_new):
# 正负实例点初始化
X_po=np.zeros(X_train.shape[1])
X_ne=np.zeros(X_train.shape[1])
# 区分正、负实例点
for i in range(y_train.shape[0]):
if y_train[i]==1:
X_po=np.vstack((X_po,X_train[i]))
else:
X_ne=np.vstack((X_ne,X_train[i]))
# 实例点绘图
plt.plot(X_po[1:,0],X_po[1:,1],"g*",label="")
plt.plot(X_ne[1:, 0], X_ne[1:, 1], "rx", label="-1")
plt.plot(X_new[:, 0], X_new[:, 1], "bo", label="test_points")
# 测试点坐标值标注
for xy in zip(X_new[:, 0], X_new[:, 1]):
plt.annotate("test{}".format(xy),xy)
# 设置坐标轴
plt.axis([0,10,0,10])
plt.xlabel("x1")
plt.ylabel("x2")
# 显示图例
plt.legend()
# 显示图像
plt.show()

 2 KNN实现

import numpy as np
from collections import Counter
class KNN:
def __init__(self, X_train, y_train, k):
# 所需要的参数初始化
self.k = k
self.X_train = X_train
self.y_train = y_train def predict(self, X_new):
# 计算欧式距离
# np.linalg.norm() 表示求范数,ord = 2 表示求2阶范数
# 得到的结果形式为:[(d0, 1), (d1, -1), ...],其中d0和d1表示距离,1和-1表示标签
dist_list = [(np.linalg.norm(X_new - self.X_train[i], ord = 2), self.y_train[i]) for i in range(self.X_train.shape[0])]
# 对所有距离进行排序
dist_list.sort(key = lambda x : x[0])
# 取前k个最小距离对应的类型(也就是y值)
y_list = [dist_list[i][-1] for i in range(self.k)] # [-1, 1, 1 ,-1,...]
# 对上述k个点的分类进行统计
y_count = Counter(y_list).most_common() # [(-1, 3), (1, 2)]
return y_count[0][0]
def main():
# 训练数据集
X_train = np.array([
[5,4],
[9,6],
[4,7],
[2,3],
[8,1],
[7,2]
])
# 标签
y_train = np.array([1,1,1,-1,-1,-1])
# 测试数据
X_new = np.array([[5, 3]])
# 绘图
draw(X_train, y_train, X_new)
# k取不同值对分类结果的影响
for k in range(1,6,2): # 表示1-5每隔2个取一个数
# 构建KNN实例
clf = KNN(X_train, y_train, k=k)
# 对测试数据进行分类预测
y_predict = clf.predict(X_new)
print('k = {},被分类为:{}'.format(k, y_predict))
if __name__ == '__main__':
main()

 3 运行结果

K近邻实现的更多相关文章

  1. K近邻法(KNN)原理小结

    K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...

  2. k近邻算法(knn)的c语言实现

    最近在看knn算法,顺便敲敲代码. knn属于数据挖掘的分类算法.基本思想是在距离空间里,如果一个样本的最接近的k个邻居里,绝大多数属于某个类别,则该样本也属于这个类别.俗话叫,"随大流&q ...

  3. 机器学习实战笔记--k近邻算法

    #encoding:utf-8 from numpy import * import operator import matplotlib import matplotlib.pyplot as pl ...

  4. k近邻(KNN)复习总结

    摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 6.适用场合内容: 1.算法概述 K近邻算法是一种基本分类和回归方法:分类时,根据其K个最近邻的训练实例的类 ...

  5. scikit-learn K近邻法类库使用小结

    在K近邻法(KNN)原理小结这篇文章,我们讨论了KNN的原理和优缺点,这里我们就从实践出发,对scikit-learn 中KNN相关的类库使用做一个小结.主要关注于类库调参时的一个经验总结. 1. s ...

  6. 学习笔记——k近邻法

    对新的输入实例,在训练数据集中找到与该实例最邻近的\(k\)个实例,这\(k\)个实例的多数属于某个类,就把该输入实例分给这个类. \(k\) 近邻法(\(k\)-nearest neighbor, ...

  7. k近邻

    k近邻(k-NearestNeighbor)算法简称kNN.基本思想简单直接,对于一个需要分类的数据实例x,计算x与所有已知类别的样本点在特征空间中的距离.取与x距离最近的k个样本点,统计这些样本点所 ...

  8. K近邻分类法

    K近邻法 K近邻法:假定存在已标记的训练数据集,分类时对新的实例根据其K个最近邻的训练实例的类别,通过多数表决等分类决策规则进行预测. k近邻不具有显示学习的过程,是“懒惰学习”(lazy learn ...

  9. 机器学习PR:k近邻法分类

    k近邻法是一种基本分类与回归方法.本章只讨论k近邻分类,回归方法将在随后专题中进行. 它可以进行多类分类,分类时根据在样本集合中其k个最近邻点的类别,通过多数表决等方式进行预测,因此不具有显式的学习过 ...

  10. k近邻算法的Java实现

    k近邻算法是机器学习算法中最简单的算法之一,工作原理是:存在一个样本数据集合,即训练样本集,并且样本集中的每个数据都存在标签,即我们知道样本集中每一数据和所属分类的对应关系.输入没有标签的新数据之后, ...

随机推荐

  1. 如何编写testbench的总结(非常实用的总结)

    1.激励的设置 相应于被测试模块的输入激励设置为reg型,输出相应设置为wire类型,双向端口inout在测试中需要进行处理. 方法1:为双向端口设置中间变量inout_reg作为该inout的输出寄 ...

  2. 【Thinkphp5】解决模板输出时间戳自动转换为时间格式的问题

    背景: 数据库存储时间为时间戳,格式为varchar,模板输出时未进行时间格式化却输出了时间格式 如下图 (数据库存储的时间戳) (页面输出的时间) (未进行格式化的时间代码) (格式化后的时间代码) ...

  3. 多线程 - 内存屏障和cpu缓存

    CPU性能优化 - 缓存 为了提高程序运行的性能,现代CPU在很多方面会对程序进行优化.CPU的处理速度是很快的,内存的速度次之,硬盘速度最慢.在cpu处理内存数据中,内存运行速度太慢,就会拖累cpu ...

  4. Facebook再现丑闻,约100位应用程序开发人员偷看用户数据

    Facebook今天披露了另一起安全事件,承认大约100名应用程序开发人员可能不正确地访问了某些Facebook组中的用户数据,包括他们的姓名和个人资料图片. 在周二发布的博客文章中,Facebook ...

  5. 基于python3环境下搭建Robot Framework 自动化测试框架(一)

    大家都知道,Robot Framework 是基于python2 环境 的一套自动化测试工具,据说python 2 到2020年不维护,现在用python 3 的环境搭建Robot Framework ...

  6. 【leetcode】Reaching Points

    题目如下: A move consists of taking a point (x, y) and transforming it to either (x, x+y) or (x+y, y). G ...

  7. node.js 的 中间件 初理解

    听说中间件还挺重要,下面梳理一下初认识: 中间件是什么?简单说说http请求服务的过滤,当交给函数处理之前先交给它处理.匹配后会终止,要想再匹配,得加: next. 中间件能解决什么问题?检测用户登录 ...

  8. handy源码阅读(六):tcp类

    首先是tcpconn和tcpserver类: struct TcpConn : public std::enable_shared_from_this<TcpConn>, private ...

  9. Codeforces Round #596 Div1 A~E题解

    我好菜啊 A 题意: 定义p-二进制数为2^k-p,给出n和p,求用最小个数的p-二进制数来表示n 1<=n<=10^9,-1000<=p<=1000 题解: 猜结论,答案不会 ...

  10. 组件的属性props

    组件的属性props 是不能自己改的,一般是从外面传进来.在组件的视图中用,this.props.XXX 表示该组件的XXX 属性