- 浏览: 553970 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (270)
- Ask chenwq (10)
- JSF (2)
- ExtJS (5)
- Life (19)
- jQuery (5)
- ASP (7)
- JavaScript (5)
- SQL Server (1)
- MySQL (4)
- En (1)
- development tools (14)
- Data mining related (35)
- Hadoop (33)
- Oracle (13)
- To Do (2)
- SSO (2)
- work/study diary (10)
- SOA (6)
- Ubuntu (7)
- J2SE (18)
- NetWorks (1)
- Struts2 (2)
- algorithm (9)
- funny (1)
- BMP (1)
- Paper Reading (2)
- MapReduce (23)
- Weka (3)
- web design (1)
- Data visualisation&R (1)
- Mahout (7)
- Social Recommendation (1)
- statistical methods (1)
- Git&GitHub (1)
- Python (1)
- Linux (1)
最新评论
-
brandNewUser:
楼主你好,问个问题,为什么我写的如下的:JobConf pha ...
Hadoop ChainMap -
Molisa:
Molisa 写道mapred.min.split.size指 ...
Hadoop MapReduce Job性能调优——修改Map和Reduce个数 -
Molisa:
mapred.min.split.size指的是block数, ...
Hadoop MapReduce Job性能调优——修改Map和Reduce个数 -
heyongcs:
请问导入之后,那些错误怎么解决?
Eclipse导入Mahout -
a420144030:
看了你的文章深受启发,想请教你几个问题我的数据都放到hbase ...
Mahout clustering Canopy+K-means 源码分析
算法:基于密度的局部离群点检测(lof算法)
输入:样本集合D,正整数K(用于计算第K距离)
输出:各样本点的局部离群点因子
过程:
- 计算每个对象与其他对象的欧几里得距离
- 对欧几里得距离进行排序,计算第k距离以及第K领域
- 计算每个对象的可达密度
- 计算每个对象的局部离群点因子
- 对每个点的局部离群点因子进行排序,输出。
Node.java:
import java.util.ArrayList; import java.util.List; public class Node { private String nodeName; // 样本点名 private double[] dimensioin; // 样本点的维度 private double kDistance; // k-距离 private List<Node> kNeighbor = new ArrayList<Node>(); // k-邻域 private double distance; // 到给定点的欧几里得距离 private double reachDensity; // 可达密度 private double reachDis; // 可达距离 private double lof; // 局部离群因子 public Node() { } public Node(String nodeName, double[] dimensioin) { this.nodeName = nodeName; this.dimensioin = dimensioin; } public String getNodeName() { return nodeName; } public void setNodeName(String nodeName) { this.nodeName = nodeName; } public double[] getDimensioin() { return dimensioin; } public void setDimensioin(double[] dimensioin) { this.dimensioin = dimensioin; } public double getkDistance() { return kDistance; } public void setkDistance(double kDistance) { this.kDistance = kDistance; } public List<Node> getkNeighbor() { return kNeighbor; } public void setkNeighbor(List<Node> kNeighbor) { this.kNeighbor = kNeighbor; } public double getDistance() { return distance; } public void setDistance(double distance) { this.distance = distance; } public double getReachDensity() { return reachDensity; } public void setReachDensity(double reachDensity) { this.reachDensity = reachDensity; } public double getReachDis() { return reachDis; } public void setReachDis(double reachDis) { this.reachDis = reachDis; } public double getLof() { return lof; } public void setLof(double lof) { this.lof = lof; } }
OutlierNodeDetect.java:
import java.util.Collections; import java.util.Comparator; import java.util.List; public class OutlierNodeDetect { private static int MIN_PTS = 5; // 1.找到给定点与其他点的欧几里得距离 // 2.对欧几里得距离进行排序,找到前5位的点,并同时记下k距离 // 3.计算每个点的可达密度 // 4.计算每个点的局部离群点因子 // 5.对每个点的局部离群点因子进行排序,输出。 public List<Node> getOutlierNode(List<Node> allNodes) { List<Node> kdAndKnList = getKDAndKN(allNodes); calReachDis(kdAndKnList); calReachDensity(kdAndKnList); calLof(kdAndKnList); Collections.sort(kdAndKnList, new LofComparator()); return kdAndKnList; } private void calLof(List<Node> kdAndKnList) { for (Node node : kdAndKnList) { List<Node> tempNodes = node.getkNeighbor(); double sum = 0.0; for (Node tempNode : tempNodes) { double rd = getRD(tempNode.getNodeName(), kdAndKnList); sum = rd / node.getReachDensity() + sum; } sum = sum / (double) MIN_PTS; node.setLof(sum); } } private void calReachDensity(List<Node> kdAndKnList) { for (Node node : kdAndKnList) { List<Node> tempNodes = node.getkNeighbor(); double sum = 0.0; double rd = 0.0; for (Node tempNode : tempNodes) { sum = tempNode.getReachDis() + sum; } rd = (double) MIN_PTS / sum; node.setReachDensity(rd); } } private void calReachDis(List<Node> kdAndKnList) { for (Node node : kdAndKnList) { List<Node> tempNodes = node.getkNeighbor(); for (Node tempNode : tempNodes) { double kDis = getKDis(tempNode.getNodeName(), kdAndKnList); if (kDis < tempNode.getDistance()) { tempNode.setReachDis(tempNode.getDistance()); } else { tempNode.setReachDis(kDis); } } } } private double getKDis(String nodeName, List<Node> nodeList) { double kDis = 0; for (Node node : nodeList) { if (nodeName.trim().equals(node.getNodeName().trim())) { kDis = node.getkDistance(); break; } } return kDis; } private double getRD(String nodeName, List<Node> nodeList) { double kDis = 0; for (Node node : nodeList) { if (nodeName.trim().equals(node.getNodeName().trim())) { kDis = node.getReachDensity(); break; } } return kDis; } private List<Node> getKDAndKN(List<Node> allNodes) { List<Node> kdAndKnList = new ArrayList<Node>(); for (int i = 0; i < allNodes.size(); i++) { List<Node> tempNodeList = new ArrayList<Node>(); Node nodeA = new Node(allNodes.get(i).getNodeName(), allNodes .get(i).getDimensioin()); for (int j = 0; j < allNodes.size(); j++) { Node nodeB = new Node(allNodes.get(j).getNodeName(), allNodes .get(j).getDimensioin()); double tempDis = getDis(nodeA, nodeB); nodeB.setDistance(tempDis); tempNodeList.add(nodeB); } // 对tempNodeList进行排序 Collections.sort(tempNodeList, new DistComparator()); for (int k = 1; k < MIN_PTS; k++) { nodeA.getkNeighbor().add(tempNodeList.get(k)); if (k == MIN_PTS - 1) { nodeA.setkDistance(tempNodeList.get(k).getDistance()); } } kdAndKnList.add(nodeA); } return kdAndKnList; } private double getDis(Node A, Node B) { double dis = 0.0; double[] dimA = A.getDimensioin(); double[] dimB = B.getDimensioin(); if (dimA.length == dimB.length) { for (int i = 0; i < dimA.length; i++) { double temp = Math.pow(dimA[i] - dimB[i], 2); dis = dis + temp; } dis = Math.pow(dis, 0.5); } return dis; } class DistComparator implements Comparator<Node> { public int compare(Node A, Node B) { return A.getDistance() - B.getDistance() < 0 ? -1 : 1; } } class LofComparator implements Comparator<Node> { public int compare(Node A, Node B) { return A.getLof() - B.getLof() < 0 ? -1 : 1; } } public static void main(String[] args) { ArrayList<Node> dpoints = new ArrayList<Node>(); double[] a = { 2, 3 }; double[] b = { 2, 4 }; double[] c = { 1, 4 }; double[] d = { 1, 3 }; double[] e = { 2, 2 }; double[] f = { 3, 2 }; double[] g = { 8, 7 }; double[] h = { 8, 6 }; double[] i = { 7, 7 }; double[] j = { 7, 6 }; double[] k = { 8, 5 }; double[] l = { 100, 2 };// 孤立点 double[] m = { 8, 20 }; double[] n = { 8, 19 }; double[] o = { 7, 18 }; double[] p = { 7, 17 }; double[] q = { 8, 21 }; dpoints.add(new Node("a", a)); dpoints.add(new Node("b", b)); dpoints.add(new Node("c", c)); dpoints.add(new Node("d", d)); dpoints.add(new Node("e", e)); dpoints.add(new Node("f", f)); dpoints.add(new Node("g", g)); dpoints.add(new Node("h", h)); dpoints.add(new Node("i", i)); dpoints.add(new Node("j", j)); dpoints.add(new Node("k", k)); dpoints.add(new Node("l", l)); dpoints.add(new Node("m", m)); dpoints.add(new Node("n", n)); dpoints.add(new Node("o", o)); dpoints.add(new Node("p", p)); dpoints.add(new Node("q", q)); OutlierNodeDetect lof = new OutlierNodeDetect(); List<Node> nodeList = lof.getOutlierNode(dpoints); for (Node node : nodeList) { System.out.println(node.getNodeName() + " " + node.getLof()); } } }
发表评论
-
EM算法小结
2012-07-20 12:16 3377描述 EM是一种基于模型的聚类算法,假设样本符合高斯混 ... -
研究生能力培养手册
2012-06-10 21:00 8341. 如果平时几乎没看过英文原文,读不懂怎么办? ... -
[转]中科院分词工具ICTCLAS Java JNI接口
2012-06-04 15:07 1832ICTCLAS,网址:http://www.ictcla ... -
正则表达式学习资源
2012-05-30 11:37 705不懂正则表达式,怎么好意思说是玩文本挖掘的? 下面 ... -
基于向量空间模型的文本聚类算法
2012-05-29 18:26 26801 文本聚类研究现状 Internet 已经发 ... -
再往前一步,学会更专业地看待问题,尝试去解决问题。
2012-05-22 14:11 910在科研工作中,有一个很基本的技能,就是对自己和别人的工 ... -
Bloom filter
2012-04-24 21:08 1139Bloom filter的优点: 大小固定,增加更多 ... -
[转]非均衡数据集的分类问题
2012-03-31 21:36 2932传统的机器学习分类 ... -
LDA(线性判别分析)&PCA(主成分分析)
2012-03-23 21:16 1411推荐解释得非常好的两篇博文 http://blog.c ... -
Porter Stemming
2012-02-29 10:57 870摘要: 在英语中,一个单词常常是另一个单词的“变种”,如:h ... -
Hadoop Browse the filesystem无法访问
2012-02-23 22:17 1071问题如题. 解决方法: 修改/windows/system ... -
数据挖掘数据集
2012-02-18 17:35 914收集数据挖掘过程中用到的数据集。欢迎补充! TREC ... -
分类器的动态选择
2012-02-18 17:15 1021XMU DM一师兄写的动态集成分类器的选择, 内容挺新颖的, ... -
book reading plan
2012-02-09 15:50 681Mining of Massive Datasets ... -
[转]学术论文的标准格式是什么?写论文有哪些小技巧
2012-02-08 21:45 920我有一篇谈研究生开题报告的文章,你可以参考下: ... -
Rapid-I, 一个JAVA的数据挖掘开源平台
2012-01-30 18:29 986当前主要使用的weka3.6,Hadoop的MapR ... -
Weka分析结果参数解释
2012-01-17 17:20 4198Kappa Statistic 假设有两个相互独立的人分别将 ... -
一淘背后的数据野心
2012-01-05 23:11 1167摘要:马云你能 ... -
多标记(multi-label)学习和Mulan
2011-12-21 20:33 2972概念澄清: ... -
数据挖掘最基础.
2011-12-15 11:34 01. 过拟合和泛化性的联系和区别? 过拟合:为了 ...
相关推荐
基于密度的局部离群点检测算法(LOF)的时间复杂度较高且不适用于大规模数据集和高维数据集的离群点检测。
摘要基于密度的局部离群点检测算法(LOF)的时间复杂度较高且不适用于大规模数据集和高维数据集的离群点检测。通过对 LOF算法的分析,提出了一种新的局部离群点检测
该算法在寻找数据点的近邻区域时采用了基于影响空间的局部离群点检测(INFLO)中影响空间的概念,然后在计算数据点的离群因子时,根据基于链接的离群点检测(COF)中链式距离的思想,提出了基于相似k距离邻居序列...
南京航空航天大学基本科研业务费专项科研基金项目(NS2010094)一种基于密度的局部离群点检测算法 DLOF胡彩平秦小麟(南京航空航天大学信息科学与技术学院南
针对NDOD(outlier detection algorithm based on neighborhood and density)算法在判断具有不同密度分布的聚类间过渡区域对象时存在的不足,以及为了降低算法时间复杂度,提出一种基于方形对称邻域的局部离群点检测...
为适应数据集分布形状多样性以及克服数据集密度问题,针对已有算法对离群簇检测效果欠佳的现状,提出了一种基于K-近邻树的离群检测算法KNMOD(outlier detection based on K-nearest neighborhood MST)。...
首先利用局部数据欧式空间中距离的数学期望和方差找到一个合适的k阶邻域,然后对这个k阶邻域内数据点的欧式距离和进行基于统计的离群点检测,实现自动适应数据流中稀疏段和稠密段的密度变化.理论和实验结果均表明,该...
首先将间歇过程数据展开成二维数据,利用滑动窗口技术分别在时间片内运用局部离群因子算法计算LOF统计量,并利用核密度估计(KDE)确定控制限。对于新来数据标准化处理后分别在相应窗口内投影,确定新数据的LOF统计...
针对NDOD(outlierdetectionalgorithmbasedonneighborhoodanddensity)算法在判断具有不同密度分布的聚类间过渡区域对象时存在的不足,以及为了降低算法时间复杂度,提出一种基于方形对称邻域的局部离群点检测方法。...
为能及时发现数据流上的局部离群点,分析数据流已有的离群点挖掘算法,提出基于小波密度估计的离群点检测算法。利用小波密度估计多尺度和多粒度的特点,通过小波概率阈值判断数据流中当前滑动窗口内的数据点是否为...
基于密度的局部离群点检测,使用于当全部样本点的密度不一致的情况
然后为了进一步优化基于密度的算法,基于<i>k邻域,根据邻域中数据点的个数与邻域所组成圆的面积之比,作为数据点密度计算的依据,进行离群点检测以获得更准确的离群点集。在多种公开数据集上进行实验,实验表明,该...
基于密度的局部离群点检测:通过基于局部离群点检测就能在样本空间数据分布不均匀的情况下也可以准确发现。 基于距离的离群点检测:如果样本空间D⾄少有N个样本点与对象O的距离⼤于d,那么对象O是以⾄少N个样本点和...
本文结合分割检测框架[1],在传统... 最后,通过大量实验,我们在分割检测框架中展示了我们的算法,将t分区的邻域与网格搜索结合使用,并基于密度的局部轨迹离群值算法,从而提高了结果的效率和准确性。大大改善了。
由于其重要的应用,为此开发了许多技术,包括基于分布的离群值检测方法,基于距离的离群值检测方法,基于密度的离群值检测方法和基于聚类的离群值检测方法等。完全令人满意。 基于k均值聚类算法的质心概念,本文...
首先利用局部离群因子(LOF)算法剔除原始数据中的离群点,将剩余数据作为训练数据建立KNN模型;然后计算待检测数据的检测指标,将其与控制限对比进行故障检测。最后,对检测出的故障计算训练数据基于KNN的变量贡献...
离群检测是数据挖掘中的一项重要任务,在天文观测,文本检测,欺诈检测等众多应用中具有很高的实用价值。 当前,有许多流行的异常检测算法可用,包括基于分布的,基于距离的,基于密度的和基于聚类的方法等。 然而,...
LOF离群因子算法,是基于密度的用于噪声和异常数据检测的常用算法,它通过为每个数据计算异常因子,来判断该数据是否为噪声或干扰数据。
根据核密度估计衡量各独立成分分量对系统故障的贡献度, 对各独立成分分量赋予不同权重, 突出包含有用信息的独立成分分量, 引入局部离群因子在特征空间构造统计量进行故障检测. 基于数值仿真和Tennessee Eastman ...
皮诺玛利 PyNomaly是LoOP(局部异常值)的Python 3实现。... 通过将样本的局部密度与其邻域的局部密度进行比较,可以识别出与邻域相比密度较低的区域中的样本,从而根据其局部离群概率来识别离群的样本。