我有许多包含10个XY坐标的小数据集。我正在使用Matlab(R2012a)和k-means来获取质心。在某些聚类中(如下图所示),由于我的数据集太小,一个离群值会破坏我的质心值。有没有一种简单的方法来排除这些点?据说Matlab有一个“排除离群值”的函数,但我在工具菜单中找不到它。谢谢你的帮助!(是的,我是新手:-))
你正在寻找类似于“异常值去除”的东西,正如其他人所链接的那样,“没有严格的数学定义来说明什么构成了异常值” - http://en.wikipedia.org/wiki/Outlier#Identifying_outliers。
当你进行无监督聚类时,异常值检测变得更加困难,因为你既要学习聚类是什么,又要确定哪些数据点对应于“没有”聚类。
一个简单的定义是将所有与每个其他数据点“远离”的数据点视为异常值。例如,您可以考虑删除与任何其他点的最小距离最大的点:
x = randn(100,2);
x(101,:) = [10 10]; %a clear outlier
nSamples = size(x,1);
pointToPointDistVec = pdist(x);
pointToPointDist = squareform(pointToPointDistVec);
pointToPointDist = pointToPointDist + diag(inf(nSamples,1)); %remove self-distances; set to inf
smallestDist = min(pointToPointDist,[],2);
[maxSmallestDist,outlierInd] = max(smallestDist);