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,
一般来说,只选择样本数据集中前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)重新编译运行,即可正常工作
相关文章推荐
- 学习EJB CMP/CMR 的心得体会
- Eclipse学习的心得体会:
- 奥运在我心中:奥运学习心得体会思想报告范文
- 关于OR-Mapping的学习心得体会
- (转贴)正则表达式学习心得体会(5)
- Perl 学习心得体会
- FFT算法学习心得
- java学习心得体会
- 学习java心得体会(二)
- 网络报表学习体会心得!
- 学习Xhtml+CSS2的一些心得体会
- 学习Xhtml+CSS2的一些心得体会
- 学习党的十7大心得体会
- 正则表达式学习心得体会(3)(转)
- IIS 6.0学习心得体会(二)--实践篇
- 学习使用Borland Together心得体会(二)
- (转贴)正则表达式学习心得体会(1)
- 师德师风学习心得体会(二)
- 学习使用Borland Together心得体会(二)
- IIS6.0 学习心得体会(一)--理论篇