kennard-stone(K-S算法)选取训练集和测试集样本数据

K-S算法选取训练集和测试集
简单的一个算法,查了一下都让人下载收费,就是很烦。K-S选取训练集的原理类似于挑女朋友,先选取两个离得最远的异地恋先谈着,然后觉得太远了,在找一个新的,进行比对,比对结果觉得挑的这个更好就进行替换,如此反复迭代选出你心目中最喜欢的几个女朋友(训练集),剩下的就是备胎了(测试集)

其他的不多说,直接贴代码吧
function [XSelected,XRest,vSelectedRowIndex]=ks(X,Num)

% ks selects the samples XSelected which uniformly distributed in the exprimental data X’s space

% Input

% X:the matrix of the sample spectra

% Num:the number of the sample spectra you want select

% Output

% XSelected:the sample spectras was selected from the X

% XRest:the sample spectras remain int the X after select

% vSelectedRowIndex:the row index of the selected sample in the X matrix

% Programmer: xiaoyi_1994 XMU
%% start of the kennard-stone step one

X=xlsread(‘X.xlsx’);%obtain the data

[nR,nC]=size(X); % obtain the size of the X matrix

mDistance=zeros(nR,nR); %dim a matrix for the distance storage

vAll of Sample=1:nR;

for i=1:nR-1
vRX=X(i,:); % 获取X的一行数据
for j=i+1:nR
vRX1=X(j,:); % 获得X中的另一行数据
mDistance(i,j)=norm(vRX-vRX1); % 计算欧氏距离
end
end

[vMax,vIndex Of mDistance]=max(mDistance);

[nMax,nIndex of vMax]=max(vMax);

vSelectedSample(1)=nIndex of vMax;

vSelectedSample(2)=vIndex Of mDistance(nIndex of vMax);

% end of the kennard-stone step one
%% start of the kennard-stone step two

for i=3:Num

vNotSelectedSample=setdiff(vAll of Sample,vSelectedSample);  

vMinDistance=zeros(1,nR-i + 1);   

for j=1:(nR-i+1)  

    nIndex of NotSelected=vNotSelectedSample(j);  

    vDistanceNew = zeros(1,i-1);  
    
    for k=1:(i-1)  

        nIndex of Selected=vSelectedSample(k);  

        if(nIndex of Selected<=nIndex of NotSelected)  

            vDistanceNew(k)=mDistance(nIndex of Selected,nIndex of NotSelected);  

        else  

            vDistanceNew(k)=mDistance(nIndex of NotSelected,nIndex of Selected);      

        end                         

    end  

      

    vMinDistance(j)=min(vDistanceNew);  

end  

[nUseless,nIndex of vMinDistance]=max(vMinDistance);  

vSelectedSample(i)=vNotSelectedSample(nIndex of vMinDistance);  

end
%%%%% end of the kennard-stone step two
%% start of export the result

vSelectedRowIndex=vSelectedSample;
for i=1:length(vSelectedSample)
XSelected(i,:)=X(vSelectedSample(i)😅; %训练集数据

end
vNotSelectedSample=setdiff(vAll of Sample,vSelectedSample);

for i=1:length(vNotSelectedSample)
XRest(i,:)=X(vNotSelectedSample(i)😅; %预测集数据

end
%%%%% end of export the result

  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: kennard-stone (k-s)算法是一种用于样本选择的算法,它可以从给定的数据集中选择一组最具代表性的样本。该算法的基本思想是通过最小化选定样本之间的距离来选择样本,以确保所选样本能够尽可能地代表原始数据集。该算法通常用于聚类、分类和回归等机器学习任务中,以减少计算成本和提高模型的准确性。 ### 回答2: kennard-stone (k-s)算法是一种用于寻找最近邻点的算法,它被广泛应用于地理信息系统 (GIS)、计算机视觉和立体成像等领域。这个算法的主要目的是在一个数据集中,找到每个点最近的K个点,然后以此来构建点之间的邻居关系。在K-S算法中,距离被定义为欧几里德距离,即两点间的直线距离。 这个算法的主要思想是通过迭代比较来找到每个点的K个最近邻居。下面是算法的具体步骤: 1. 首先选择一个点,称为"目标点"; 2. 计算目标点与数据集中所有点之间的距离; 3. 将距离按照从小到大排序; 4. 取前K个距离,对应的点即为目标点的K个最近邻居; 5. 对于每个最近邻居,重复步骤2-4; 6. 最终,每个点都将有一个邻居列表,即其K个最近邻居。 通过这个算法,可以快速地建立起数据集中点之间的邻居关系。这个算法具有以下优点: 1. 算法简单易用,可以很快地实现; 2. 在处理大型数集时,效率高,计算速度较快; 3. 可以处理高维数据集。 除了上述优点,K-S算法还有一些缺点,例如算法受到数据噪声的影响较大,噪声极大时,容易影响搜索结果的准确性。此外,在计算距离时,使用欧几里德距离也有其局限性,对于各种类型的数据集,需要采用不同的度量方法。 总的来说,kennard-stone (k-s)算法是一个有效的寻找最近邻点的算法,在计算机视觉、机器学习和地理信息系统等领域得到广泛应用。随着数据集不断增大和数据类型不断多样化,如何优化和改进K-S算法仍然是一个研究的重点。 ### 回答3: kennard-stone (k-s)算法是一种聚类算法,也被称为最小距离算法。该算法的目标是将n个数据点划分为k个不同的类。首先,将每个数据点作为一个初始类,然后将距离最近的类合并为一个新的类,直到数据点被划分成k个类为止。 在k-s算法中,通过计算两个类之间的距离来决定哪些类应该合并。通常使用欧几里得距离或曼哈顿距离来计算两个类之间的距离。一旦确定了最近的两个类,它们就被合并为一个新的类。 在k-s算法中,对于每个数据点,都可以计算它与其他数据点之间的距离。每个数据点都被分配到最接近的类中。然后可以重复这个过程,直到数据点被划分为k个类。 k-s算法的优点是可以处理大规模数据集,并且由于其简单性,可以很容易地进行实现。然而,k-s算法的缺点是它很容易受到初始簇之间的选择影响。如果选择错误的初始簇,则可能导致算法陷入局部最小值。此外,在数据集中存在噪声和离群值时,k-s算法可能无法生成合理的分类结果。 总之,kennard-stone (k-s)算法是一种简单实用的聚类算法,它可以在大规模数据集中进行处理,并且它对于距离测量的选择很灵活,但也存在一定的局限性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值