python机器学习——KNN(K近邻算法)
背景与原理:
KNN算法其实是逻辑最简单的分类算法——我们认为一个数据的类型是由与其最接近的数据决定的,而“接近”实际上就是我们度量两个数据点之间的距离,如果我们把一组数据看做一个向量$(x_{1},...,x_{n},y)$,其中$y$代表这个数据的类别,那么两组数据$X_{i},X_{j}$间的距离如果使用欧式距离表示为$L_{ij}=\sqrt{\sum_{k=1}^{n}(x_{ik}-x_{jk})^{2}}$
那么对于空间中已经分好类的若干数据,如果我们想预测输入的某组数据属于什么类,那么我们去计算空间中分好类的数据点离它的距离,然后选择距离最近的认为和想预测的数据是最接近的,直接选择距离最近的数据点的类别即可。
当然,只选择最近的是由很大问题的,所以K近邻算法(K-Nearest Neighbours)就是将上述“最近”改成“K个最近的”,然后找出这K个数据点中概率最大的类别作为我们预测的类别。
代码实现:
import numpy as np
import math
from scipy import stats
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression def dis(alpha,beta):
s=0
for i in range(0,len(alpha)-1):
s+=(alpha[i]-beta[i])**2 return math.sqrt(s) def KNN_Test(input,dataset,siz,K):
q=[]
p=[]
for i in range(0,siz):
d=dis(input,dataset[i])
maxp=0
for j in range(0,len(q)):
if q[j]>q[0]:
maxp=j if len(q)<K:
q.append(d)
p.append(i)
elif q[maxp]>d:
q[maxp]=d
p[maxp]=i
cnt=0
for i in range(0,K):
if dataset[p[i]][2]==1:
cnt+=1
if cnt<K/2:
return 0
else:
return 1 x=np.arange(0.,10.,0.02)
y=5-2*x/3+np.random.randn(500)
now=0
dataset=[]
for i in range(0,500):
typ = 0
if 2*x[i]+3*y[i] <= 15:
if abs(np.random.randn(1)[0])<2:
typ = 1
else:
typ = 0
else:
if abs(np.random.randn(1)[0]) < 2:
typ = 0
else:
typ = 1 dataset.append([x[i],y[i],typ]) c_cnt=0
for i in range(0,500):
predict_typ=KNN_Test(dataset[i],dataset,500,10)
if predict_typ==dataset[i][2]:
c_cnt+=1 print(c_cnt/500)
这段代码生成的分类数据和逻辑回归的相同,我们这次使用KNN算法进行分类,准确率相对可观
小结与改进:
KNN算法存在相当的不足之处,在改进中我们可以选择加入权值——虽然我们考虑最近的K个“邻居”,但是我们认为一组数据肯定与离它最近的邻居更接近,因此在计算概率时我们对于距离较近的数据点给出一个较高的权值,距离较远的邻居给出一个较低的权值,这样能更好地体现“近邻”这个观点。
同样,究竟选择几个“邻居”也是值得考虑的,这一点可以通过权衡样本数量来进行调整。
KNN算法的另一个缺点在于训练样本数量很大、维度很多的时候计算开销很大,因此我们可以在预处理阶段使用降维算法对维度进行简化以提高效率
python机器学习——KNN(K近邻算法)的更多相关文章
- 第四十六篇 入门机器学习——kNN - k近邻算法(k-Nearest Neighbors)
No.1. k-近邻算法的特点 No.2. 准备工作,导入类库,准备测试数据 No.3. 构建训练集 No.4. 简单查看一下训练数据集大概是什么样子,借助散点图 No.5. kNN算法的目的是,假如 ...
- 机器学习之K近邻算法(KNN)
机器学习之K近邻算法(KNN) 标签: python 算法 KNN 机械学习 苛求真理的欲望让我想要了解算法的本质,于是我开始了机械学习的算法之旅 from numpy import * import ...
- 【机器学习】k近邻算法(kNN)
一.写在前面 本系列是对之前机器学习笔记的一个总结,这里只针对最基础的经典机器学习算法,对其本身的要点进行笔记总结,具体到算法的详细过程可以参见其他参考资料和书籍,这里顺便推荐一下Machine Le ...
- 用Python从零开始实现K近邻算法
KNN算法的定义: KNN通过测量不同样本的特征值之间的距离进行分类.它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别.K通 ...
- 基本分类方法——KNN(K近邻)算法
在这篇文章 http://www.cnblogs.com/charlesblc/p/6193867.html 讲SVM的过程中,提到了KNN算法.有点熟悉,上网一查,居然就是K近邻算法,机器学习的入门 ...
- KNN K~近邻算法笔记
K~近邻算法是最简单的机器学习算法.工作原理就是:将新数据的每一个特征与样本集中数据相应的特征进行比較.然后算法提取样本集中特征最相似的数据的分类标签.一般来说.仅仅提取样本数据集中前K个最相似的数据 ...
- 机器学习之K近邻算法
K 近邻 (K-nearest neighbor, KNN) 算法直接作用于带标记的样本,属于有监督的算法.它的核心思想基本上就是 近朱者赤,近墨者黑. 它与其他分类算法最大的不同是,它是一种&quo ...
- KNN (K近邻算法) - 识别手写数字
KNN项目实战——手写数字识别 1. 介绍 k近邻法(k-nearest neighbor, k-NN)是1967年由Cover T和Hart P提出的一种基本分类与回归方法.它的工作原理是:存在一个 ...
- 机器学习实战-k近邻算法
写在开头,打算耐心啃完机器学习实战这本书,所用版本为2013年6月第1版 在P19页的实施kNN算法时,有很多地方不懂,遂仔细研究,记录如下: 字典按值进行排序 首先仔细读完kNN算法之后,了解其是用 ...
- 【机器学习】K近邻算法——多分类问题
给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该类输入实例分为这个类. KNN是通过测量不同特征值之间的距离进行分类.它的的思路是:如 ...
随机推荐
- jsp 格式化日期
第一步,引入工具包: <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %&g ...
- Jmeter:随机类函数
一.__Random 功能介绍:计算范围内的随机数 ${__Random(参数 1,参数 2,参数 3)} 参数 1:开始数字,包括在内 参数 2:结束数字,包括在内 参数 3:注册变量名称 二._ ...
- python_test_5001_Moudle_pandas
import pandas as pd import numpy as np from lib_001_decorator_log_funcname import decorator_log_func ...
- AWT+Swing实现百度图像识别
1准备 1.1在百度智能云中创建自己的应用,得到API Key和Secret Key 1.2maven导入SDK依赖 2源码 import java.net.URLEncoder; /** * 植物识 ...
- excel数字转日期
import datetime delta = datetime.timedelta() today = datetime.datetime.strptime('1899/12/30', '%Y/%m ...
- CAD安装失败,如何才能删除(卸载)CAD?三步完美卸载CAD软件
CAD安装失败,怎么样才能彻底删除CAD各种残留注册表?有时候我们想将CAD重新安装,但却显示CAD已经安装,但又不见CAD软件程序文件,然后我们就会产生这样的疑问:CAD无法重新安装是怎么一回事?下 ...
- unity 2D 物体跟随鼠标旋转 移动
using System.Collections; using System.Collections.Generic; using UnityEngine; public class FollowMo ...
- unity GetComponent在android端获取对象错误
PlayerObj pobj = go.GetComponent<PlayerObj>(); if (pobj && pobj.IsMyTeam()) { marchAct ...
- 三星电子的KNOX安全技术难以满足企业BYOD控管需求
不可否认的是三星在智能手机领域里的辉煌战绩,三星最近推出了端到端的基于Android平台的解决方案KNOX,并且宣称可以提供从硬件到应用层的多重安全加固. KNOX是否能够延续其在企业领域里辉煌呢?相 ...
- MVC页面加载速度优化小记
前言: 最近做一个地图展示页面,业务初期没什么问题,运行一阵后报错: Error during serialization or deserialization using the JSON Jav ...