一些前提的约定,还是沿用上篇文章的哈。先来致敬下男神。

一:K最近邻(KNN)
KNN是一个监督学习方法,也是一种分类算法。这一篇比较简单,这是个比较古老的算法,其思想也是很简单朴素的,已知我们有一堆样本,都是已经分好了类,每样本都是有个标签的,代表了该样本是属于哪个类别。
KNN的思想就是,好了,我有一堆的样本,我也不管别的,你给我一个新的不带标签的样本A让我分类,我就用已有的分好类的样本集合去匹配。计算新的样本A到每一个已经分配好的样本B之间的距离,看看距离样本A最近最近的前K个样本的标签是什么,在前K个样本中找到最多的样本的标签就认为是该新样本的标签,分类结束。

把到所有点的距离按照从小到大的顺序进行排序,找到最近的前K的距离对应的样本以及对应的标签,对每个标签进行统计数量,选最数量最大的那个标签作为未知样本的分类标签和类别。

二:举例实践

途中红色是一个类别:0,蓝色是一个类别:1,对绿色标签进行分类。
我们选取K= 5,在前5个样本中进行选择。

clear all
clcsrc_x1 = [1.3,1.35,1.4,1.45,1.5,     1.32,1.33,1.42,1.43,1.46];
src_y1 = [3.32, 3.15, 3.12, 3.41, 3.26    ,3.3, 3.5, 3.2, 3.4, 3.6];
src_x2 = [3.3, 3.35, 3.4, 3.45, 3.5,  3.32,3.352,3.42,3.47,3.52];
src_y2 = [5.3, 5.5, 5.2, 5.4, 5.6,    5.32, 5.35, 5.24, 5.34, 5.61];src_x = [src_x1, src_x2]';
src_y = [src_y1, src_y2]';
tag = [ones(1, size(src_x1)(2)), zeros(1, size(src_x2)(2))];% random to form some data
trainData = [src_x, src_y];
trainClass = tag';
testData = [3.0,3.7];figure();
subplot(1, 1, 1);
hold on;% 打点,画决策边界
scatter(src_x1, src_y1, 'b', 'linewidth', 3);
scatter(src_x2, src_y2, 'r', 'linewidth', 3);
scatter(testData(1), testData(2), 'g', 'linewidth', 3);
xlim([0,6]);
ylim([2,6]);
%axis equal;
grid on;
xlabel('x1');
ylabel('x2');% set the K value
k = 5;% calculate every sample to this testData's distance
% L2 distance
distance = sqrt(((trainData - testData) .^ 2) * ones(2,1));%% sort
tmpDis = [distance, trainClass];
sortDis = sortrows(tmpDis);% find its tag
% the most tag in kth label
classAll = unique(trainClass);
classNum = size(classAll)(1);% first col is label, second col is count
classAll = [classAll, zeros(classNum, 1)];maxCount = 0;
lableRes = 0;
for i = 1:klabel = sortDis(i, 2);for j = 1: classNumif label == classAll(j, 1)classAll(j, 2) += 1;if maxCount < classAll(j, 2)maxCount = classAll(j, 2);lableRes = label;end;end;end;
end;disp('After KNN, the result is:');
fprintf('%d\n', lableRes)



看来他是分类到了1这个标签,因为前五个标签中有三个是1,,占了多数。

三:进一步学习
1:KNN受K影响大。要选择合适的K值,K值不同,可能直接赢分类的结果。可以不断地调整K值,对进行交叉验证,选择饿一个误差最小的K值。

K值过小,那么模型就会变得复杂,容易导致过拟合,假设K=1,那就是找到离自己最近的样本所在的类别,容易受到噪声干扰,还会受到异常点的干扰。之所以变得复杂呢是因为,整个空间按照距离的划分,就分成了很多个特别复杂的区域,某个区域内的点属于某个样本,另外个区域内的属于另外个样本。比如下图,整个空间被两个样本划分了两个区域。大家可以在整个特征空间内找到很多点,都去计算下他英国属于的样本空间,在图中画出来就是一个很复杂的多区域。

如果K过大,整个模型又太简单,假设K=N,是全部训练样本空间的样本数量,那么最后整个分类就是简单的样本空间谁最多就是谁。也就是着呢个空间区域全部都是样本多的那个类别的区域范围,这时候就是高偏差就出现了。

它太多简单了。。。。

每天进步一点点《ML - KNN》相关推荐

  1. 每天进步一点点《ML - 感知机》

    一些前提的约定,还是沿用上篇文章的哈.先来致敬下男神. 一:感知机 感知机是一种线性二分类模型,其目的是找到能将训练数据线性可分的分离超平面.超平面线性模型为 联想起之前学到逻辑斯特回归的决策边界,Z ...

  2. 感知机介绍及MATLAB实现

    文章目录 前言 1 感知机简介 2 感知机结构 3 感知机学习过程 3.1 数据传播过程 3.2 参数更新过程 4 代码实现 4.1 准备数据 4.2 感知机训练学习 4.3 感知机仿真测试 总结 2 ...

  3. 每天进步一点点《ML - 线性回归》

    本系列Machine Learning 的学习博文很大部分全是受教于 Andrew Ng 的Stanford录制的ML视频,我的男神. 致敬男神! 第一次写这样系列的博文,单纯是为了记录自己的所学,做 ...

  4. 【ML】基于机器学习的心脏病预测研究(附代码和数据集,多层感知机模型)

    写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大努力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌. 之前创作过心脏病预测研究文章如下: [ML]基于机器学 ...

  5. 每天进步一点点《ML - 支持向量机》

    一些前提的约定,还是沿用上篇文章的哈.先来致敬下男神. 一:支持向量机(support vector machine) 在感知机那一章节我们讲了,对样本的分类过程中,可以用维度空间内的某个超平面划分开 ...

  6. 每天进步一点点《ML - 正则化代价函数》

    本系列Machine Learning 的学习博文很大部分全是受教于 Andrew Ng 的Stanford录制的ML视频,我的男神. 一:欠拟合(Under fitting)与过拟合(Over fi ...

  7. 每天进步一点点《ML - 高斯混合模型》

    上一篇文章学习了极大似然估计和EM算法,这一章节就是学习EM算法的具体应用场景,高斯混合模型,是一中聚类的算法. 一:高斯混合模型(GMM) 我们将一个分布复杂的数据分布,用多个高斯概率分布来共同表示 ...

  8. 每天进步一点点《ML - 从极大似然到EM算法》

    一:极大似然 1:概念引入 极大似然参数估计是概率论中学习过的内容,就是预先定义概率分布模型,根据一堆的同概率分布的一堆样本数据去估计该概率模型中的未知参数. 举个例子:有很多西瓜x,我们可以得到每一 ...

  9. 每天进步一点点《ML - Sklearn库简单学习》

    一:Sklearn介绍 Sklearn是一个强大的机器学习库,基于python的.官方文档(http://scikit-learn.org/stable/ ).如下列举部分的使用场景. 由图中,可以看 ...

  10. 每天进步一点点《ML - 异常点检测》

    一些前提的约定,还是沿用上篇文章的哈.先来致敬下男神. 一:异常点检查(Anomaly Detection) 这一章节相对来说简单很多,也可以说是很大程度是概率论的知识内容了. 异常点,和大部分正常状 ...

最新文章

  1. sulime text 3
  2. 三种方式实现自定义圆形进度条ProgressBar
  3. Java可视化开发开源框架
  4. [云炬创业学笔记]第二章决定成为创业者测试10
  5. php面试专题---2、常量及数据类型考点
  6. 漫步最优化三——优化算法的一般结构
  7. 全志t3linux驱动_全志A20GPIO驱动分析|Android驱动及系统开发交流区|研发交流|雨滴科技技术论坛 - Powered by Discuz!...
  8. java连接kvstore_Tendermint ABCI 应用 KVStore 源码详解
  9. java访问权限修饰符从大到小_程序员的术与道:道——Java修饰符之非访问控制修饰符...
  10. python neo4j_在Python中使用Neo4j的方法
  11. [转]Intent跳转到系统应用中的拨号界面、联系人界面、短信界面及其他
  12. vue项目集成金格WebOffice2015
  13. WEBVTT字幕格式转SRT
  14. 单目视觉SLAM综述
  15. LIGO 用 Python 分析引力波数据
  16. gta5 android版数据包,gta5手机版2.8g数据包
  17. 1978-2018各省人均GDP数据
  18. 百度网盘安装 不能打开要写入的文件的解决方法
  19. 可视化工具Grafana:简介及安装
  20. 【阅读笔记】《人月神话》思想提炼

热门文章

  1. cornerstone 库删除 后 重新添加 ,引用找不到,
  2. mongodb 总结
  3. vue性能优化-------vendor优化详细用法(瘦身),减小体积,引入cdn
  4. Mysql 基础命令
  5. ​​​​​​​ Centos7.6上用Cockpit安装oVirt
  6. Linux安装Yum包管理器
  7. 解决MySQL 8.0 设置简单密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy require...
  8. springmvc5.3 之后版本 舍弃AntPath地址匹配模式通配符 “**”用法改变。
  9. vue 项目构建失败 Unhandled rejection Error 的原因 sass解析异常
  10. PHPStorm开启Debug