Matlab提供了一个机器学习的工具箱,里面提供了一个封装类用于kNN分类器。
这里以matlab2015a的documentation的为准。
Description
knn是一种基于最近邻的分类器,distance metric和邻域k需要被指定。使用训练数据训练kNN模型,使用predict方法对一个新的观测量进行预测。
Construction
mdl = fitcknn(X,y) 创建一个kNN分类器。
mdl = fitcknn(X,y,Name,Name,Value)
Input
X表示Predictor value,X的每一行表示一个observation,X的每一列表示一个variable。
Y表示Classification value,数据类型可以是字符或是数字向量,Y的每一列表示的是X对应行的分类结果。
还有其他的一些设置可以通过Name和Value的值进行设定。
Example
以“图片配诗”为例,我们先根据古诗词中出现的的高频词,如”绿树“、”青草“、”流水“、”明月“、”青天“等名词,从网上爬取相应的图片。对每一张图片分割成super_pixels,相应类别区域的super pixel使用最简单的rgb颜色直方图统计作为特征X(predictor、features 或 attributes),特征的维度即使256*3,类别Y就使用各类的英文单词。
mdl = fitcknn(X,Y);
%Examine the Quality of a KNN classifier
rloss = resubLoss(mdl);
cvmdl = crossval(mdl);
ClassificationKNN
PredictorNames: {1x768 cell}
ResponseName: ‘Y’
ClassNames: {‘moon’ ‘river’ ‘sky’ ‘tree’}
ScoreTransform: ‘none’
NumObservations: 9303
Distance: ‘euclidean’
NumNeighbors: 5
这里的特征都是归一化的特征(即使没有归一化,在fitcknn中也会被归一化)。
这里补充下拟合问题中的loss function的概念。对于所有的线性方法
y=f(θTx)
,我们首先确定
f
,然后找到参数
对于分类问题来说,如果分类正确则有
y⋅f=y⋅θTx>0
,
y⋅f=y⋅θTx<0
如果分类错误的话。
1. 0/1 loss,
minθ