knn算法原理

①.计算机将计算所有的点和该点的距离

②.选出最近的k个点

③.比较在选择的几个点中那个类的个数多就将该点分到那个类中

KNN算法的特点:

knn算法的优点:精度高,对异常值不敏感,无数据假设

knn算法的缺点:时间复杂度和空间复杂度都比较高

knn算法中遇到的问题及其解决办法

1、当样本不平衡时,比如一个类的样本容量很大,其他类的样本容量很小,输入一个样本的时候,K个临近值中大多数都是大样本容量的那个类,这时可能就会导致分类错误。改进方法是对K临近点进行加权,也就是距离近的点的权值大,距离远的点权值小。

2、计算量较大,每个待分类的样本都要计算它到全部点的距离,根据距离排序才能求得K个临近点,改进方法是:先对已知样本点进行剪辑,事先去除对分类作用不大的样本。

knn算法数据范围:数值型和标称型

注意:数据是二维的,第一维表示样本,第二维表示特征(如手写数字算法,)

标称型:标称型目标变量的结果只在有限目标集中取值,如真与假(标称型目标变量主要用于分类)

数值型:数值型目标变量则可以从无限的数值集合中取值,如0.100,42.001等 (数值型目标变量主要用于回归分析)

knn算法的应用

案例:

import numpy as np
import pandas as pd
# KNeighborsClassifer 用于分类问题的处理
from sklearn.neighbors import KNeighborsClassifier

# 导入数据:

movie = pd.read_excel("./data/movies.xlsx",sheet_name=1)
movie

#根据电影的武打镜头和接吻镜头的数量判断电影的类型

#knn算法是有监督学习,需要样本训练数据,和目标值进行对照

提取数据:

x = movie.iloc[:,1:3]

y = movie["分类情况"]

# 此时K值等于5,即5个邻居
knn=KNeighborsClassifier(n_neighbors=5)

# 训练算法:fit()以X为训练数据,y为目标值拟合模型

knn.fit(x,y)

#数据进行l训练,已经建立了一个分类标准

#添加2个样本数据

x_text = pd.DataFrame({"武打镜头":[120,10],"接吻镜头":[5,80]})

# 使用算法预测目标样本的分类情况

knn.predict(x_text)                 

预测结果:

array(['动作片', '爱情片'], dtype=object)

#从结果可以看出:第一个样本被划分到动作片中,第二个样本被划分到爱情片中

#对样本进行估计被划分到哪个类的概率

knn.predict_proba(x_text)

估计结果结果:array([[0.6, 0.4], [0.4, 0.6]])

注意:knn算法是根据距离远近进行分类的划分,K为最近的样本。

当训练数据样本不均衡是,对数据处理的办法

给knn加权重,即weight = ["uniform","distance","calllable"]                 即:均衡、距离、自定义

如:

knn=KNeighborsClassifier(n_neighbors=5,weights="distance")

算法的保存和算法的加载

当我们对算法进行了训练之后,想要再次使用该算法进行预测时,就不需要再次进行算法的训练了,直接使用保存的算法,对需要进行分类的样本进行分类就行

#算法保存

#应用模块

from sklearn.externals import joblib

#存储样本的方式:

joblib.dump(knn,filename = "./digit_detector.m")

#filename后边自定义后缀为m的文件名

#算法的加载

from sklearn.externals import joblib

#加载之前保存的算法

knn = joblib.load("./digit_detector.m")

机器学习(一)之KNN算法的更多相关文章

  1. 机器学习之路--KNN算法

    机器学习实战之kNN算法   机器学习实战这本书是基于python的,如果我们想要完成python开发,那么python的开发环境必不可少: (1)python3.52,64位,这是我用的python ...

  2. 算法代码[置顶] 机器学习实战之KNN算法详解

    改章节笔者在深圳喝咖啡的时候突然想到的...之前就有想写几篇关于算法代码的文章,所以回家到以后就奋笔疾书的写出来发表了 前一段时间介绍了Kmeans聚类,而KNN这个算法刚好是聚类以后经常使用的匹配技 ...

  3. 机器学习实战 之 KNN算法

    现在 机器学习 这么火,小编也忍不住想学习一把.注意,小编是零基础哦. 所以,第一步,推荐买一本机器学习的书,我选的是Peter harrigton 的<机器学习实战>.这本书是基于pyt ...

  4. 机器学习实战之kNN算法

    机器学习实战这本书是基于python的,如果我们想要完成python开发,那么python的开发环境必不可少: (1)python3.52,64位,这是我用的python版本 (2)numpy 1.1 ...

  5. 【机器学习】机器学习入门01 - kNN算法

    0. 写在前面 近日加入了一个机器学习的学习小组,每周按照学习计划学习一个机器学习的小专题.笔者恰好近来计划深入学习Python,刚刚熟悉了其基本的语法知识(主要是与C系语言的差别),决定以此作为对P ...

  6. 吴裕雄--天生自然python机器学习实战:K-NN算法约会网站好友喜好预测以及手写数字预测分类实验

    实验设备与软件环境 硬件环境:内存ddr3 4G及以上的x86架构主机一部 系统环境:windows 软件环境:Anaconda2(64位),python3.5,jupyter 内核版本:window ...

  7. 机器学习-K近邻(KNN)算法详解

    一.KNN算法描述   KNN(K Near Neighbor):找到k个最近的邻居,即每个样本都可以用它最接近的这k个邻居中所占数量最多的类别来代表.KNN算法属于有监督学习方式的分类算法,所谓K近 ...

  8. python机器学习一:KNN算法实现

    所谓的KNN算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个 ...

  9. 《机器学习实战》kNN算法及约会网站代码详解

    使用kNN算法进行分类的原理是:从训练集中选出离待分类点最近的kkk个点,在这kkk个点中所占比重最大的分类即为该点所在的分类.通常kkk不超过202020 kNN算法步骤: 计算数据集中的点与待分类 ...

  10. 机器学习笔记(5) KNN算法

    这篇其实应该作为机器学习的第一篇笔记的,但是在刚开始学习的时候,我还没有用博客记录笔记的打算.所以也就想到哪写到哪了. 你在网上搜索机器学习系列文章的话,大部分都是以KNN(k nearest nei ...

随机推荐

  1. acwing 3 完全背包

    习题地址 https://www.acwing.com/problem/content/description/3/ 题目描述有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用. 第 i ...

  2. java基础第七篇之接口

    1.什么是接口: * 接口是方法的集合,而且接口中的方法全是抽象的 * 你可以把接口看成一个特殊的"抽象类",接口中的方法全是抽象的 * * * 2.java中怎么定义接口: * ...

  3. Python-11-循环

    x = 1 while x <= 100:     print(x)     x += 1   基本上, 可迭代对象是可使用for循环进行遍历的对象. numbers = [0, 1, 2, 3 ...

  4. 14.插入数据、复制数据--SQL

    一.插入完整的行 要求指定表名和插入到新行中的值 INSERT INTO Customers ', 'Toy Land', '123 Any Street', 'New York', 'NY', ', ...

  5. Hive进阶_开发Hive的自定义函数

    Hive中的自定义函数简介 (1) 在类中创建自定义函数.自定义UDF需要继承'org.apache.hadoop.hive.ql.exec.UDF',实现evaluate函数,evaluate函数支 ...

  6. postgresql修改数据库名

    alter database abc rename to cba;

  7. 使用js获取复选框的值,并把数组传回后台处理,过程使用的是Ajax异步查询

    这是界面代码: ​ function shua(){             var id_array=new Array();         $('input[id="checkAll& ...

  8. IO(File、递归)

      第1章 File 1.1 IO概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下 ...

  9. 在CentOS上源码安装Nginx

    总步骤: wget http://nginx.org/download/nginx-1.10.1.tar.gz tar -xvf nginx-1.10.1.tar.gz cd nginx-1.10.1 ...

  10. Google Chrome 浏览器的备用(离线)安装程序

    Google Chrome 浏览器的备用(离线)安装程序(适用于 Windows) 如果您在使用 http://www.google.com/chrome 上的标准安装程序下载 Chrome 浏览器时 ...