机器学习实战(1)- KNN
KNN:k近邻算法-在训练样本中找到与待测样本距离相近的N个样本,并用这N个样本中所属概率最大的类别作为待测样本的类别。
算法步骤:
1、对训练中的样本数据的不同属性进行归一化处理。
2、计算待测样本到训练样本集中的距离。(欧拉距离或曼哈顿距离);
3、找到N个距离最小的样本属于不同类别的概率。
4、取最大的概率作为待测样本的类别。
例子1: 相亲
相亲考虑的条件:
1) 每年飞行公里
2) 每周打的游戏时长
3)每周消耗的ice cream
态度用1,2,3表示:1表示little like 2表示much like 3表示pass
数据集路径https://github.com/pbharrin/machinelearninginaction
matlab 代码:大神请给优化。。。。。
clc,clear;
%1)加载数据
TEST = load('datingTestSet2.txt'); r1 = find(TEST(:,4) == 1);
r2 = find(TEST(:,4) == 2);
r3 = find(TEST(:,4) == 3); % 1)绘制原始数据
plot3(TEST(r1,1),TEST(r1,2),TEST(r1,3),'.b');
hold on
plot3(TEST(r2,1),TEST(r2,2),TEST(r2,3),'.g');
hold on
plot3(TEST(r3,1),TEST(r3,2),TEST(r3,3),'.r');
xlabel('plane');
ylabel('game');
zlabel('ice'); %对不同属性的数据归一化处理
maxr1 = max(TEST(:,1))
minr1 = min(TEST(:,1));
maxr2 = max(TEST(:,2))
minr2 = min(TEST(:,2));
maxr3 = max(TEST(:,3));
minr3 = min(TEST(:,3));
length = size(TEST(:,1)) TESTB = zeros(length,3);
TESTB(:,1) = (TEST(:,1) - minr1) ./ (maxr1 - minr1);
TESTB(:,2) = (TEST(:,2) - minr2) ./ (maxr2 - minr2);
TESTB(:,3) = (TEST(:,3) - minr3) ./ (maxr3 - minr3); % 待测数据
DATA = [1000,10,0.5];
DATA(1,1) = (DATA(1,1)- minr1) / (maxr1- minr1);
DATA(1,2) = (DATA(1,2)- minr2) / (maxr2- minr2);
DATA(1,3) = (DATA(1,3)- minr3) / (maxr3- minr3); % 计算距离 N =5
data = repmat(DATA,[length,1]);
dis = TESTB -data;
dis = dis .* dis;
dis = dis * [1;1;1];
sortData = sort(dis);
ndata = sortData(5,1); list = find(dis <= ndata);
result = TEST(list,4);
a1 = find(result == 1)
a2 = find(result == 2)
a3 = find(result == 3)
if(size(a1,1) > size(a2,1))
if(size(a1,1)>size(a3,1))
disp(' little like');
else
disp('pass');
end
else
if(size(a2,1)>size(a3,1))
disp(' much like');
else
disp('pass');
end
end

python 3代码: 函数都不怎么会用磨磨唧唧的写了一些实现。
import numpy as npy
import matplotlib
import matplotlib.pyplot as plt
import copy
# 读取文件
#手动转换文件,复制到excel让python能正确读取。
data = npy.loadtxt('data.txt',delimiter = ','); likeindex = npy.where(data[:,3] == 1);
muchlikeindex = npy.where(data[:,3]==2);
passindex = npy.where(data[:,3] == 3); # 绘制图形(不会绘制三维的)
fig = plt.figure()
ax = fig.add_subplot(111) ax.scatter(data[likeindex,0],data[likeindex,1],data[likeindex,3],c ='b');
ax.hold('on')
ax.scatter(data[muchlikeindex,0],data[muchlikeindex,1],data[muchlikeindex,3],c ='g',marker ='*');
ax.plot()
plt.show() # 数据归一化
length = len(data[:,0]); maxr = npy.zeros((3,1));
minr = npy.zeros((3,1)); for i in range(0,3) :
maxr[i,0] = npy.max(data[:,i]);
minr[i,0] = npy.min(data[:,i]); normalData = npy.zeros((length,3)); # 待测数据 test = npy.matrix([1056560,60,12]); for i in range(0,3):
normalData[:,i] = (data[:,i] - minr[i,0]) / (maxr[i,0] - minr[i,0]); test[0,0] =(test[0,0] - minr[0,0]) / (maxr[0,0] - minr[0,0]);
test[0,1]=(test[0,1] - minr[0,0]) / (maxr[0,0] - minr[0,0]);
test[0,2] =(test[0,2] - minr[0,0]) / (maxr[0,0] - minr[0,0]); # 测试数据与训练数据的距离 testarry = npy.tile(test,(length,1)); dis2 = (normalData - testarry);
dis = npy.multiply(dis2,dis2);
one = npy.mat([[1],[1],[1]]);
dis = dis*one; # 深度copy 原数据
org = copy.copy(dis); datat = dis.T;
datat.sort()
door = datat[0,5]; # k =5 nearindex = npy.where(org[:,0] < door);
print (nearindex) # 这个nearindex 不知道为啥会有两行 #用索引计算 所属类别的频率
机器学习实战(1)- KNN的更多相关文章
- 算法代码[置顶] 机器学习实战之KNN算法详解
改章节笔者在深圳喝咖啡的时候突然想到的...之前就有想写几篇关于算法代码的文章,所以回家到以后就奋笔疾书的写出来发表了 前一段时间介绍了Kmeans聚类,而KNN这个算法刚好是聚类以后经常使用的匹配技 ...
- 机器学习实战 之 KNN算法
现在 机器学习 这么火,小编也忍不住想学习一把.注意,小编是零基础哦. 所以,第一步,推荐买一本机器学习的书,我选的是Peter harrigton 的<机器学习实战>.这本书是基于pyt ...
- 机器学习实战1-1 KNN电影分类遇到的问题
为什么电脑排版效果和手机排版效果不一样~ 目前只学习了python的基础语法,有些东西理解的不透彻,希望能一边看<机器学习实战>,一边加深对python的理解,所以写的内容很浅显,也许还会 ...
- 《机器学习实战》KNN算法实现
本系列都是参考<机器学习实战>这本书,只对学习过程一个记录,不做详细的描述! 注释:看了一段时间Ng的机器学习视频,感觉不能光看不练,现在一边练习再一边去学习理论! KNN很早就之前就看过 ...
- 机器学习实战之kNN算法
机器学习实战这本书是基于python的,如果我们想要完成python开发,那么python的开发环境必不可少: (1)python3.52,64位,这是我用的python版本 (2)numpy 1.1 ...
- 机器学习实战笔记——KNN约会网站
''' 机器学习实战——KNN约会网站优化 ''' import operator import numpy as np from numpy import * from matplotlib.fon ...
- 机器学习实战笔记——KNN
机器学习实战——读书笔记 书籍奉上
- 基于Python的机器学习实战:KNN
1.KNN原理: 存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一个数据与所属分类的对应关系.输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应 ...
- 吴裕雄--天生自然python机器学习实战:K-NN算法约会网站好友喜好预测以及手写数字预测分类实验
实验设备与软件环境 硬件环境:内存ddr3 4G及以上的x86架构主机一部 系统环境:windows 软件环境:Anaconda2(64位),python3.5,jupyter 内核版本:window ...
- 机器学习实战之KNN
KNN也称K-近邻算法,简单来说,KNN采用测量不同特征值之间的距离的方法进行分类. 优点:精度高,对异常值不敏感,无数据输入假定. 确定:时间复杂度.空间复杂度较高 适用数据范围:数值型和标称型 工 ...
随机推荐
- [NOIP2018 PJ T4]对称二叉树
题目大意:问一棵有根带权二叉树中最大的对称二叉树子树,对称二叉树为需满足将这棵树所有节点的左右子树交换,新树和原树对应位置的结构相同且点权相等. 题解:在对称二叉树中,对于深度相同的两个节点$u,v$ ...
- HTML5单页框架View.js介绍
什么是单页应用单页应用,是指将用户视觉上的多个页面在技术上使用一个载体来实现的应用. 换句话来讲,用户视觉效果,与技术实现的载体,并不是一定要一一对应的.采取哪种技术方案,取决于产品设计.技术组成以及 ...
- 递归在JavaScript中的应用实例
递归 适用的必要条件:①过程的描述中包含它自身②有明确的结束递归的条件. 主要思路:在每一次调用自己时,使用相同的解决问题的方法,但调用的参数每次不同(有规律的变化),使用一个终止处理(结束递归)的条 ...
- Eclipse开发环境(一):下载和安装
一.Eclipse下载及安装 1. 下载 进入官网https://www.eclipse.org/,点击 IDE & Tools 选择Java EE 选择Luna Packages 选择Win ...
- Xcodeproj相关以及删除 多层文件夹、库、资源逻辑
一.介绍Xcodeproj是CocoaPods用ruby开发的一个插件库,可以用来新建.修改Xcode工程. 二.wiki和资源Xcodeproj wiki :https://www.rubydo ...
- 如何恢复SVN被删除文件、文件夹
转自:https://blog.csdn.net/chuangxin/article/details/81226657 一.摘要本文讲述在客户端(如:Tortoise SVN,开发工具IDE SVN插 ...
- Http状态码502问题复盘
问题原因分析:502 bade gateway 一般都是upstream出错,对于PHP,造成502的原因常见的就是脚本执行超过timeout设置时间,或者timeout设置过大,导致PHP进程长时间 ...
- C语言内存管理(内存池)
C语言可以使用alloc从栈上动态分配内存. 内存碎片 Malloc/free或者new/delete大量使用会造成内存碎片,这种碎片形成的机理如下: 内存碎片一般是由于空闲的内存空间比要连续申请的空 ...
- (备忘)解决用Xftp向CentOS7 传文件速度慢的问题
问题原因:之前用XFTP上传文件的时候一直挺好的,今天突然速度特别慢,上传了一个多小时也没把一个一百兆的文件成功上传 查询过程: 1.网络原因:网络的确有点卡,但不至于这么慢吧,几K的速度,鉴于网络问 ...
- 交互式计算引擎MOLAP篇
交互式计算引擎MOLAP篇 摘自:<大数据技术体系详解:原理.架构与实践> MOLAP是一种通过预计算cube方式加速查询的OLAP引擎,它的核心思想是“空间换时间”,典型代表包括Drui ...