K近邻分类数据模拟和实例分析
k近邻算法经典案例

k近邻算法经典案例
1. 手写数字识别
手写数字识别是机器学习中的经典应用之一,k近邻算法也被广泛应用于其实现。
在这个案例中,我们将使用k近邻算法来训练一个模型,使其能够准确地识别手写数字。
2. 信用评估
信用评估是银行、信用卡公司等机构必须面对的问题。
这个案例中,我们将使用k近邻算法来构建一个模型,用于预测一个人是否有能力还款。
3. 疾病诊断
疾病诊断是医疗领域的一个重要应用,通过收集患者的症状和病史等信息,机器学习算法可以辅助医生进行诊断。
在这个案例中,我们将使用k近邻算法来构建一个模型,能够使用患者的症状和病史等信息进行疾病诊断。
4. 商品推荐
商品推荐是电商行业必须面对的问题。
在这个案例中,我们将使用k近邻算法来构建一个模型,来预测用户喜欢的商品,并推荐给用户。
5. 手写汉字识别
手写汉字识别与手写数字识别类似,但更具有挑战性。
在这个案例中,我们将使用k近邻算法来构建一个模型,使其能够准确地识别手写汉字。
k近邻算法的应用实例

k近邻算法的应用实例
k近邻算法是一种简单易懂且容易实现的机器学习算法,它的
应用范围非常广泛。
以下将列举一些k近邻算法的应用实例:
1. 疾病诊断:利用k近邻算法对一些已知的疾病数据进行训练,并预测新患者是否患有该疾病。
2. 推荐系统:通过对用户行为进行分析,建立用户和商品的关联模型,利用k近邻算法为用户推荐可能感兴趣的商品。
3. 图像识别:利用k近邻算法对一些已经标记好的图像数据进行训练,并且分类预测未知类别的图像。
4. 模式识别:利用k近邻算法对已知类别的数据进行学习,通过比较已学习到的结果与未知数据的结果进行分类。
5. 风险评估:利用k近邻算法对已知风险的数据进行训练,对新的数据进行分析并预测一定时间内的风险。
6. 数据挖掘:利用k近邻算法对大量数据进行聚类分析,发现其中的规律、异常数据等。
参考文献:
1. 《机器学习实战》(中文版)——Peter Harrington
2. 《Python机器学习基础教程》(中文版)——Sebastian
Raschka
3. 《数据挖掘和分析基础》(中文版)——Zaki, M.J., & Meira Jr., W.。
k-近邻算法梳理(从原理到示例)

k-近邻算法梳理(从原理到⽰例)https:///kun_csdn/article/details/88919091k-近邻算法是⼀个有监督的机器学习算法,k-近邻算法也被称为knn算法,可以解决分类问题。
也可以解决回归问题。
本⽂主要内容整理为如下:knn算法的原理、优缺点及参数k取值对算法性能的影响;使⽤knn算法处理分类问题的⽰例;使⽤knn算法解决回归问题的⽰例;使⽤knn算法进⾏糖尿病检测的⽰例;1 算法原理knn算法的核⼼思想是未标记样本的类别,由距离其最近的k个邻居投票来决定。
具体的,假设我们有⼀个已标记好的数据集。
此时有⼀个未标记的数据样本,我们的任务是预测出这个数据样本所属的类别。
knn的原理是,计算待标记样本和数据集中每个样本的距离,取距离最近的k个样本。
待标记的样本所属类别就由这k个距离最近的样本投票产⽣。
假设X_test为待标记的样本,X_train为已标记的数据集,算法原理的伪代码如下:遍历X_train中的所有样本,计算每个样本与X_test的距离,并把距离保存在Distance数组中。
对Distance数组进⾏排序,取距离最近的k个点,记为X_knn。
在X_knn中统计每个类别的个数,即class0在X_knn中有⼏个样本,class1在X_knn中有⼏个样本等。
待标记样本的类别,就是在X_knn中样本个数最多的那个类别。
1.1 算法优缺点优点:准确性⾼,对异常值和噪声有较⾼的容忍度。
缺点:计算量较⼤,对内存的需求也较⼤。
1.2 算法参数其算法参数是k,参数选择需要根据数据来决定。
k值越⼤,模型的偏差越⼤,对噪声数据越不敏感,当k值很⼤时,可能造成⽋拟合;k值越⼩,模型的⽅差就会越⼤,当k值太⼩,就会造成过拟合。
1.3 变种knn算法有⼀些变种,其中之⼀是可以增加邻居的权重。
默认情况下,在计算距离时,都是使⽤相同权重。
实际上,可以针对不同的邻居指定不同的距离权重,如距离越近权重越⾼。
机器学习经典分类算法——k-近邻算法(附python实现代码及数据集)

机器学习经典分类算法——k-近邻算法(附python实现代码及数据集)⽬录⼯作原理存在⼀个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每⼀数据与所属分类的对应关系。
输⼊没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进⾏⽐较,然后算法提取样本集中特征最相似数据(最近邻)的分类特征。
⼀般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不⼤于20的整数。
最后选择k个最相似数据中出现次数最多的分类,作为新数据的分类。
举个例⼦,现在我们⽤k-近邻算法来分类⼀部电影,判断它属于爱情⽚还是动作⽚。
现在已知六部电影的打⽃镜头、接吻镜头以及电影评估类型,如下图所⽰。
现在我们有⼀部电影,它有18个打⽃镜头、90个接吻镜头,想知道这部电影属于什么类型。
根据k-近邻算法,我们可以这么算。
⾸先计算未知电影与样本集中其他电影的距离(先不管这个距离如何算,后⾯会提到)。
现在我们得到了样本集中所有电影与未知电影的距离。
按照距离递增排序,可以找到k个距离最近的电影。
现在假定k=3,则三个最靠近的电影依次是He's Not Really into Dudes、Beautiful Woman、California Man。
python实现⾸先编写⼀个⽤于创建数据集和标签的函数,要注意的是该函数在实际⽤途上没有多⼤意义,仅⽤于测试代码。
def createDataSet():group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])labels = ['A','A','B','B']return group, labels然后是函数classify0(),该函数的功能是使⽤k-近邻算法将每组数据划分到某个类中,其伪代码如下:对未知类别属性的数据集中的每个点依次执⾏以下操作:(1)计算已知类别数据集中的点与当前点之间的距离;(2)按照距离递增次序排序;(3)选取与当前点距离最⼩的k个点;(4)确定前k个点所在类别的出现频率;(5)返回前k个点出现频率最⾼的类别作为当前点的预测分类。
k近邻算法解决实际问题

k近邻算法(k-Nearest Neighbors,简称kNN)是一种非常实用的机器学习算法,可以用于解决各种实际问题。
以下是一些使用kNN算法解决实际问题的例子:1.垃圾邮件识别:通过分析邮件的内容和元数据,使用kNN算法训练模型,
可以识别垃圾邮件。
具体地,可以将邮件内容作为输入特征,标签为正常邮件或垃圾邮件,使用kNN算法进行分类。
2.电影推荐:使用kNN算法可以基于用户的历史行为和偏好,推荐类似风格
的电影。
例如,可以根据电影的导演、演员、类型、主题等特征,使用kNN算法对用户进行分类,并推荐与用户所在类别最相似的电影。
3.信用卡欺诈检测:通过分析大量的信用卡交易数据,使用kNN算法可以检
测出异常交易,预防欺诈行为。
可以将交易金额、时间、地点等作为输入特征,标签为正常交易或欺诈交易,使用kNN算法进行分类。
4.疾病诊断:在医疗领域,可以使用kNN算法根据患者的症状、病史、检查
结果等数据,进行疾病诊断。
可以将患者的各种特征作为输入,标签为某种疾病或健康状态,使用kNN算法进行分类。
5.语音识别:在语音识别领域,可以使用kNN算法进行语音到文字的转换。
具体地,可以将语音信号的某些特征作为输入,标签为相应的文字,使用kNN 算法进行分类,并对分类结果进行优化和调整。
总之,k近邻算法是一种非常实用的机器学习算法,可以用于解决各种实际问题。
在实际应用中,需要根据具体问题的特点选择合适的特征和参数,并对模型进行合理的评估和调整。
knn算法的例子

knn算法的例子k-最近邻算法(k-nearest neighbors,简称k-NN)是一种常用的分类和回归算法。
它基于一个简单的假设:如果一个样本的k个最近邻属于某个类别,那么该样本也很可能属于该类别。
k-NN算法非常直观和易于理解,因此被广泛应用于各种领域。
下面将以几个具体的例子来说明k-NN算法的应用。
1. 手写数字识别在机器学习领域,手写数字识别是一个经典的问题。
k-NN算法可以用于将手写数字图片分类成0到9之间的数字。
基于已有的数字图片数据集,可以计算待分类图片与每个已有图片的距离,并找出k 个最近邻。
然后根据这k个最近邻的标签来判断待分类图片的数字。
2. 电影推荐系统在电影推荐系统中,k-NN算法可以根据用户的历史评分和其他用户的评分来预测用户可能喜欢的电影。
通过计算待推荐电影与用户历史评分电影的相似度,找出k个最相似的电影,并根据这些电影的评分来预测用户对待推荐电影的评分。
3. 股票市场预测k-NN算法可以用于预测股票市场的趋势。
基于已有的股票数据,可以计算待预测股票与历史股票的相似度,并找出k个最相似的股票。
然后根据这k个股票的涨跌情况来预测待预测股票的涨跌。
4. 医学诊断在医学诊断中,k-NN算法可以帮助医生根据患者的各项指标来预测患有哪种疾病。
通过计算待预测患者与已有患者的相似度,找出k 个最相似的患者,并根据这些患者的疾病情况来预测待预测患者的疾病。
5. 文本分类k-NN算法可以用于文本分类,例如将新闻文章分类成不同的主题。
基于已有的训练数据,可以计算待分类文本与每个已有文本的相似度,并找出k个最相似的文本。
然后根据这k个文本的主题来预测待分类文本的主题。
6. 信用评估在信用评估中,k-NN算法可以用于预测申请贷款的人是否具有良好的信用记录。
通过计算待评估人员与已有人员的相似度,找出k个最相似的人员,并根据这些人员的信用记录来预测待评估人员的信用状况。
7. 图像处理k-NN算法可以用于图像处理,例如图像分类和图像检索。
KNN(k近邻)机器学习算法详解

KNN(k近邻)机器学习算法详解【转】机器学习--- 分类算法详解文章目录一、机器学习简述机器学习算法分类机器学习开发流程二、数据划分、转换器、估计器sklearn 内置数据集数据集进行分割转换器与预估器三、K-近邻算法(KNN)核心思想KNN 算法API案例分析优缺点分析四、朴素贝叶斯(Bayes)核心思想Bayes算法API案例分析优缺点分析五、决策树与随机森林①决策树核心思想决策树API案例分析优缺点分析②随机森林核心思想随机森林API案例分析随机森林的优点六、分类模型的准确性评估一、机器学习简述机器学习算法分类监督学习(预测):数据集有特征值+目标值分类(目标值离散型)——K-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归、神经网络回归(目标值连续型)——线性回归、岭回归标注——隐形马尔科夫模型非监督学习(聚类):数据集只有特征值聚类——K-Means 算法机器学习开发流程建立模型,根据数据类型划分应用种类,根据原始数据明确问题做什么;数据的基本处理:pd 数据去重,合并表等等;建立特征工程,对特征进行处理;选择相应算法进行分析;模型的评估,判定效果,直到模型合格;模型上线使用,以 API 形式提供;二、数据划分、转换器、估计器sklearn 内置数据集数据集划分训练集(70%-80%):建立模型测试集(30%-20%):评估模型划分 API:sklearn.model_seletion.train_test_splitsklearn 数据集接口介绍sklearn.datasets:加载获取流行数据集datasets.load_*():获取小规模数据集,数据包含在datasets 里datasets.fetch_*(data_home=None):data_home参数代表数据集下载的目录,下载后的默认路径是~-scikit_learn_data-返回数据类型:datasets.base.Bunch(字典格式)data:特征数据数组,是二维 np.ndarray 数据target:标签数组,是 n_samples 的一维数组DESCR:数据描述feature_names:特征名(新闻数据、手写数字、回归数据集没有特征名)target_names:标签名sklearn 分类数据集from sklearn.datasets import load_iris()sklearn 回归数据集from sklearn.datasets import load_boston()数据集进行分割sklearn.model_selection.train_test_split(x,y,test_size,rando m_state)参数解释x:数据集的特征值y:数据集的标签值test_size :测试集的大小,一般为floatrandom_state :随机数种子,不同的种子会造成不同的随机采样结果,相同的种子采样结果相同。
k近邻法诊断乳腺癌案例

k近邻法诊断乳腺癌案例k近邻法(k-nearest neighbors, k-NN)是一种常用的机器学习算法,可用于诊断乳腺癌。
其基本原理是根据已知的训练样本,通过计算待分类样本与训练样本之间的距离,找到离待分类样本最近的k个训练样本,然后根据这k个训练样本的标签来确定待分类样本的类别。
下面将以k近邻法诊断乳腺癌案例为题,介绍一些相关的内容。
一、乳腺癌简介乳腺癌是一种常见的恶性肿瘤,女性是其主要发病人群。
乳腺癌的早期诊断对于治疗和预后至关重要。
因此,发展一种准确可靠的乳腺癌诊断方法具有重要意义。
二、k近邻法介绍k近邻法是一种基本的分类算法,其主要思想是通过计算待分类样本与已知样本之间的距离,找到离待分类样本最近的k个已知样本,然后根据这k个样本的标签来确定待分类样本的类别。
三、乳腺癌数据集为了应用k近邻法诊断乳腺癌,需要一个包含已知样本的数据集。
常用的数据集之一是威斯康星州乳腺癌数据集,该数据集包含了乳腺肿瘤的各种特征和对应的恶性/良性标签。
四、特征选择在应用k近邻法诊断乳腺癌时,需要选择一些能够有效区分恶性和良性乳腺肿瘤的特征作为输入。
常用的特征包括肿块半径、质地、边界、单个细胞大小等。
五、距离度量k近邻法中常用的距离度量方法包括欧氏距离、曼哈顿距离和闵可夫斯基距离。
在诊断乳腺癌时,可以根据具体情况选择合适的距离度量方法。
六、确定k值k近邻法中的k值表示需要考虑的最近邻样本的个数。
k值的选择对分类结果有一定影响。
一般来说,较小的k值对噪声敏感,较大的k值对样本分布的细节不敏感。
在实际应用中,可以通过交叉验证等方法来确定合适的k值。
七、分类决策规则根据找到的k个最近邻样本的标签,可以使用投票法或加权投票法来确定待分类样本的类别。
投票法中,待分类样本被划分为多数类;加权投票法中,每个最近邻样本的权重与其距离成反比。
八、模型评估为了评估k近邻法在诊断乳腺癌中的性能,可以使用一些常见的评估指标,如准确率、精确率、召回率、F1值等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
K近邻分类数据模拟和实例分析
3.1 数据模拟
用MATLAB随机生成150组数据,类别为三类,编程如下
# 程序1:
A1=rand(50,2);
hold on
plot(A1(:,1),A1(:,2),'.')
A2=rand(50,2)+0.75;
hold on
plot(A2(:,1),A2(:,2),'.')
hold on
A3=rand(50,2)+1.5;
plot(A3(:,1),A3(:,2),'.')
再用k近邻分类算法对这150组数据进行分类,取k=15近邻,程序如下# 程序 2:
clear all
clc
y=importdata('C:\Users\adm\Desktop\test.txt');
p=y(:,2:3);
p=p';
Add=zeros(150,1);
Add(1:50,:)=ones(50,1);
Add(51:100,:)=2*ones(50,1);
Add(101:150,:)=3*ones(50,1);
figure(1),plot(y(:,1),Add,'g.');
hold on
grid on;
count=0;
for i=1:3
for j=1:50
for k=1:150
distance(k)=mse(p(:,k)-p(:,(i-1)*50+j));%保存每个向量与所有训练样本之间的距离
end
[d1 index1]=sort(distance);%对距离distance向量进行从小到大的排序
num=[0 0 0];
for m=1:20 % 考察num,存放的是排序后distance前20个属于每一类别的个数
if index1(m)<=50
num(1)=num(1)+1;
elseif index1(m)<=100
num(2)=num(2)+1;
else
num(3)=num(3)+1;
end
end
[d2 class]=max(num);%属于哪类的个数最多,就属于哪类,class 即就是该向量所属的类别
if i==class
count=count+1;
end
A((i-1)*50+j)=class;%存放判断的结果
end
end
count
rate=count/150
figure(2),plot(y(:,1),A,'r.');grid on;%画图分类
程序运行后得到
count =143 rate =0.9533
图一模拟数据原始分类
图2 K近邻方法得到的分类
实验结果分析
从图像和运行结果均可以看出,对上述模拟数据用取k=15的k近邻算法作
出的分类正确率为95.33%,分类效果不错,符合预期。
改变k值,分别取k=1,5,10,15,20,30,40,60做测试,发现k取1的取值对分类结果没有明显的规律,当k=1时,即为最近邻的特殊情况,此时分类和原分类吻合,当k从1开始逐渐增大时,分类效果呈现起伏,这说明k值得选取对分类结果有一定的影响,程序执行如下表。
表2 Iris数据集分类效果
K值正确率错误
1 1 0
5 96% 4%
10 94.67% 5.33%
15 95.33% 4.67%
20 96.67% 3.33%
30 96% 4%
40 95.33% 4.67%
60 94.67% 5.33%
3.2 实例分析
本文选取了著名的Iris数据集,Iris数据集共150组,有四个特征,分别是花萼和花瓣的长度和宽度,类别也是三类,取k=20,对前文程序代码稍作修改如下。
# 程序 3:
clear all
clc
y=importdata('C:\Users\adm\Desktop\test.txt');
p=y(:,2:5);
p=p';
Add=zeros(150,1);
Add(1:50,:)=ones(50,1);
Add(51:100,:)=2*ones(50,1);
Add(101:150,:)=3*ones(50,1);
figure(1),plot(y(:,1),Add,'g.');
hold on
grid on;
count=0;
for i=1:3
for j=1:50
for k=1:150
distance(k)=mse(p(:,k)-p(:,(i-1)*50+j));%保存每个向量与所有训练样本之间的距离
end
[d1 index1]=sort(distance);%对距离distance向量进行从小到大的排序
num=[0 0 0];
for m=1:20 % 考察num,存放的是排序后distance前20个属于每一类别的个数
if index1(m)<=50
num(1)=num(1)+1;
elseif index1(m)<=100
num(2)=num(2)+1;
else
num(3)=num(3)+1;
end
end
[d2 class]=max(num);% 属于哪类的个数最多,就属于哪类,class 即就是该向量所属的类别
if i==class
count=count+1;
end
A((i-1)*50+j)=class;%存放判断的结果
end
end
count
rate=count/150
figure(2),plot(y(:,1),A,'r.');grid on;%画图分类
程序执行后得到以下结果:
count =147 rate =0.9800
图3 原始数据的分类图像
图4 K近邻分类算法所得到的分类图像实验结果分析
上述程序运行后的结果表明k取20时对Iris数据集具有较好的分类效果,从某种意义上说,k近邻算法对花的分类可以给出一定的借鉴意义。
改变k值后,分别取k=4,6,8,10,12,14,16,18,20,22,24,30时,发现对于Iris 数据集k取8-22之间的值最为合适,分类正确率稳定,当k小于8或是大于22时,分类效果下降。
执行程序得到的结果如下表。
表2 分类正确率
K值正确率错误率
4 96% 4%
6 97.33% 2.67%
8 98% 2%
10 98% 2%
12 98% 2%
14 98% 2%
16 98% 2%
18 98% 2%
20 98% 2%
22 98% 2%
24 97.33% 2.67%
30 95.33% 4.67%。