您的位置:首页 > 其它

K-近邻算法学习心得体会

2016-11-28 23:23 197 查看
    K-近邻算法(kNN)是分类数据最简单有效的算法,它的工作原理是:将样本数据集合(训练样本集)的特征向量和标签进行存储,需要存储全部的数据集,当输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,一般选用最小距离方式,然后提取与样本集中特征最相似数据的分类标签,作为新数据的标签。

   一般来说,只选择样本数据集中前k个最相似的特征,这就是k-近邻算法,一般k是不大于20的整数,通常可选择k=3,k=5,k=10,k的不同取值会影响分类,k值越小,容易发生过拟合,k值过大,整体的模型变得简单。可利用交叉验证法来选取最优的k值。

    K-近邻算法对训练数据集只进行归一化处理,处理完成后进行存储,不会进行其他处理,在新数据计算相似程度时,需要每次都与所有的训练数据集进行匹配,因此会产生很大的计算量,程序运行相对较慢。

《机器学习实践》内程序问题:

P23,

ax.scatter(datingDataMat[:,1],datingDataMat[:,2]),15.0*array(datingLabels),15.0*array(datingLabels))
原因:15.0是根据前面datingDataMat[]的大小进行确定
解决方式:array前面的系数可以利用shape(datingDataMat)[0]确定。
P30,
直接运行
kNN.handwritingClassTest()会产生错误,这是因为训练数据和测试数据的位置不对。
解决方式:将trainingFileList = listdir('trainingDigits') 改成trainingFileList = listdir('digits/trainingDigits')
将trainingMat[i,:] = img2vector('trainingDigits/%s' % fileNameStr)改成trainingMat[i,:] = img2vector('digits/trainingDigits/%s' % fileNameStr) 
将testFileList = listdir('testDigits')  改成testFileList = listdir('digits/testDigits'
将vectorUnderTest = img2vector('testDigits/%s' % fileNameStr) 改成vectorUnderTest = img2vector('digits/testDigits/%s' % fileNameStr)
重新编译运行,即可正常工作

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息