机器学习(三)——K最临近方法构建分类模型(matlab)
K最临近(K-Nearest Neighbors,KNN)方法是一种简单且直观的分类和回归算法,主要用于分类任务。其基本原理是用到表决的方法,找到距离其最近的K个样本,然后通过K个样本的标签进行表决,预测结果给出的标签是表决多的一方。
在使用K最临近方法的时候,有两个方面可调:
一是K值的大小,K一般选用单数,这样不会导致在进行表决时出现概率相等的情况。
二是样本之间的距离,由于样本特征的分布不同,因此在描述两样本之间的距离时有多种方式可以描述,例如:欧氏距离(Euclidean Distance)、曼哈顿距离(Manhattan Distance)和闵可夫斯基距离(Minkowski Distance)等。而且往往由于选择的距离不同,对应的K值也不一样,大家可以根据自己的数据特点尝试用不用的距离构建分类模型。本文提供了这些方法供大家选择。
在matlab中实现K最临近方法构建分类模型的代码如下:
labels = res(:, 1); % 第一列是标签
features = res(:, 2:end); % 后面的列是特征
features = zscore(features); %归一化处理
% %% 欧式距离
%
%
% % 设置 K 值
% K = 7;
%
% % 初始化分类准确度
% accuracy = 0;
%
% % 留一交叉验证
% for i = 1:size(features, 1)
% % 从样本中选择一个作为验证样本,其余作为训练样本
% validation_sample = features(i, :);
% validation_label = labels(i);
%
% train_samples = features([1:i-1, i+1:end], :);
% train_labels = labels([1:i-1, i+1:end]);
%
% % 计算验证样本与训练样本的距离
% distances = sqrt(sum((train_samples - validation_sample).^2, 2));
%
% % 寻找最近的 K 个邻居
% [~, idx] = mink(distances, K);
%
% % 投票确定验证样本的类别
% predicted_label = mode(train_labels(idx));
%
% % 检查预测结果是否正确
% if predicted_label == validation_label
% accuracy = accuracy + 1;
% end
% end
%
% % 计算分类准确度
% accuracy = accuracy / size(features, 1);
% disp(['分类准确度:', num2str(accuracy)]);
%
%
% % 曼哈顿距离
%
%
% % 设置 K 值
% K = 9;
%
% % 初始化分类准确度
% accuracy = 0;
%
% % 留一交叉验证
% for i = 1:size(features, 1)
% % 从样本中选择一个作为验证样本,其余作为训练样本
% validation_sample = features(i, :);
% validation_label = labels(i);
%
% train_samples = features([1:i-1, i+1:end], :);
% train_labels = labels([1:i-1, i+1:end]);
%
% % 计算曼哈顿距离
% distances = sum(abs(train_samples - validation_sample), 2);
%
% % 寻找最近的 K 个邻居
% [~, idx] = mink(distances, K);
%
% % 投票确定验证样本的类别
% predicted_label = mode(train_labels(idx));
%
% % 检查预测结果是否正确
% if predicted_label == validation_label
% accuracy = accuracy + 1;
% end
% end
%
% % 计算分类准确度
% accuracy = accuracy / size(features, 1);
% disp(['分类准确度:', num2str(accuracy)]);
% %% 闵可夫斯基距离
%
% % 设置 K 值
% K = 5;
%
% % 初始化分类准确度
% accuracy = 0;
%
% % 留一交叉验证
% for i = 1:size(features, 1)
% % 从样本中选择一个作为验证样本,其余作为训练样本
% validation_sample = features(i, :);
% validation_label = labels(i);
%
% train_samples = features([1:i-1, i+1:end], :);
% train_labels = labels([1:i-1, i+1:end]);
%
% % 计算闵可夫斯基距离
% distances = pdist2(train_samples, validation_sample, 'minkowski', 1); % p=1, 曼哈顿距离
%
% % 寻找最近的 K 个邻居
% [~, idx] = mink(distances, K);
%
% % 投票确定验证样本的类别
% predicted_label = mode(train_labels(idx));
%
% % 检查预测结果是否正确
% if predicted_label == validation_label
% accuracy = accuracy + 1;
% end
% end
%
% % 计算分类准确度
% accuracy = accuracy / size(features, 1);
% disp(['分类准确度:', num2str(accuracy)]);
%
%% KD树搜索方法
% 设置 K 值
K = 5;
% 初始化分类准确度
accuracy = 0;
predictedScores=zeros(56,2);
% 留一交叉验证
for i = 1:size(features, 1)
% 从样本中选择一个作为验证样本,其余作为训练样本
validation_sample = features(i, :);
validation_label = labels(i);
train_samples = features([1:i-1, i+1:end], :);
train_labels = labels([1:i-1, i+1:end]);
% 创建KD树
mdl = fitcknn(train_samples, train_labels, 'NumNeighbors', K, 'Distance', 'euclidean', 'NSMethod', 'kdtree');
% 预测验证样本的类别
%predicted_label = predict(mdl, validation_sample);
[predicted_label,predictedScore] = predict(mdl, validation_sample);
predictedScores(i,:)=predictedScore;
% 检查预测结果是否正确
if predicted_label == validation_label
accuracy = accuracy + 1;
end
end
% 计算分类准确度
accuracy = accuracy / size(features, 1);
disp(['分类准确度:', num2str(accuracy)]);
机器学习(三)——K最临近方法构建分类模型(matlab)的更多相关文章
- Spark学习笔记——构建分类模型
Spark中常见的三种分类模型:线性模型.决策树和朴素贝叶斯模型. 线性模型,简单而且相对容易扩展到非常大的数据集:线性模型又可以分成:1.逻辑回归:2.线性支持向量机 决策树是一个强大的非线性技术, ...
- Caffe、TensorFlow、MXnet三个开源库对比+主流分类模型对比
库名称 开发语言 支持接口 安装难度(ubuntu) 文档风格 示例 支持模型 上手难易 Caffe c++/cuda c++/python/matlab *** * *** CNN ** MXNet ...
- Spark2.0机器学习系列之8:多类分类问题(方法归总和分类结果评估)
一对多(One-vs-Rest classifier) 将只能用于二分问题的分类(如Logistic回归.SVM)方法扩展到多类. 参考:http://www.cnblogs.com/CheeseZH ...
- 【Todo】【转载】Spark学习 & 机器学习(实战部分)-监督学习、分类与回归
理论原理部分可以看这一篇:http://www.cnblogs.com/charlesblc/p/6109551.html 这里是实战部分.参考了 http://www.cnblogs.com/shi ...
- kNN算法:K最近邻(kNN,k-NearestNeighbor)分类算法
一.KNN算法概述 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它 ...
- 机器学习算法(九): 基于线性判别模型的LDA手写数字分类识别
1.机器学习算法(九): 基于线性判别模型的LDA手写数字分类识别 1.1 LDA算法简介和应用 线性判别模型(LDA)在模式识别领域(比如人脸识别等图形图像识别领域)中有非常广泛的应用.LDA是一种 ...
- weka实际操作--构建分类、回归模型
weka提供了几种处理数据的方式,其中分类和回归是平时用到最多的,也是非常容易理解的,分类就是在已有的数据基础上学习出一个分类函数或者构造出一个分类模型.这个函数或模型能够把数据集中地映射到某个给定的 ...
- 深度学习原理与框架-卷积神经网络-cifar10分类(图片分类代码) 1.数据读入 2.模型构建 3.模型参数训练
卷积神经网络:下面要说的这个网络,由下面三层所组成 卷积网络:卷积层 + 激活层relu+ 池化层max_pool组成 神经网络:线性变化 + 激活层relu 神经网络: 线性变化(获得得分值) 代码 ...
- 机器学习入门-文本特征-使用LDA主题模型构造标签 1.LatentDirichletAllocation(LDA用于构建主题模型) 2.LDA.components(输出各个词向量的权重值)
函数说明 1.LDA(n_topics, max_iters, random_state) 用于构建LDA主题模型,将文本分成不同的主题 参数说明:n_topics 表示分为多少个主题, max_i ...
- 【原】Coursera—Andrew Ng机器学习—编程作业 Programming Exercise 3—多分类逻辑回归和神经网络
作业说明 Exercise 3,Week 4,使用Octave实现图片中手写数字 0-9 的识别,采用两种方式(1)多分类逻辑回归(2)多分类神经网络.对比结果. (1)多分类逻辑回归:实现 lrCo ...
随机推荐
- spring-boot集成Quartz-job存储方式一JDBC
1.项目jar包依赖引入 <dependency> <groupId>org.springframework.boot</groupId> <artifact ...
- 2022年官网下安装Tomcat最全版与官网查阅方法
目录 一.环境整合 构建工具(参考工具部署方式) 二.官网下载 三.解压安装 四.配置环境 五.启动运行 六.配置为服务 七.查看设置服务 一.环境整合 构建工具(参考工具部署方式) 软件名称 版本 ...
- pageoffice6 版本在线打开word 文件,实现多用户同时编辑
总体来说,各种Web系统中的Word文档在线处理大体可以分为以下四种流转处理方式: A用户编辑完,流转给B用户修改,再流转给C用户修改,直到最后.每个用户都是针对全文修改的,如果需要在这一篇文档中能区 ...
- 微信小程序订阅消息开发指南(java)
微信小程序订阅消息开发指南(java) 第一步 准备阶段 1.你得有一个小程序,并且认证了,个人的也行 2.开通订阅消息 小程序后台->功能->订阅消息 3.公共模板库选择一个模板 选择的 ...
- 记一次DRF问题排障
1 最近在搞django,在写一个接口的时候用到了APIview,之后再调用接口的时候一直显示405,不允许使用post方法 视图
- 安装numpy:conda install nampy==1.16 时报错An HTTP error occurred when trying to retrieve this URL.
安装numpy:conda install nampy==1.16 时报错An HTTP error occurred when trying to retrieve this URL. HTTP e ...
- 不到200行用Vue实现类似Swiper.js的轮播组件
前言 大家在开发过程中,或多或少都会用到轮播图之类的组件,PC和Mobile上使用 Swiper.js ,小程序上使用swiper组件等. 本文将详细讲解如何用Vue一步步实现的类似Swiper.js ...
- 创建 Vue3 项目
前提条件 安装 Nodejs 下载:https://nodejs.org/en/download/prebuilt-installer 切换 npm 源 npm config set registry ...
- 安装配置intelli IDEA
效果 操作 去官网下载安装包 下载 Intelli IDEA 下载插件 插件下载 打开IDEA安装目录下的bin目录,找到idea64.exe.vmoptions配置文件 添加配置 打开indea,添 ...
- 01-布局扩展-BFC完成圣杯布局
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...