java如何使用KMeans算法查找异常/异常值
我目前是机器学习新手,我将参与一个项目,该项目涉及使用机器学习库来检测和警告可能的异常。我将使用ApacheSpark,并决定使用KMeans方法来解决该项目
主要项目包括分析日常文件,检测某些记录中的波动变化,并将其报告为可能的异常(如果根据模型将其视为异常)。这些文件是在一天结束时生成的,我的程序需要在第二天早上检查它们,看看是否有异常。但是,我需要检查异常文件vs file,而不是在文件中。这意味着我必须比较每个文件的数据,看看它是否符合我将按照特定算法创建的模型。我想说的是,我有一些有效的数据,我将应用算法来训练我的模型。然后我必须将这个相同的模型应用到其他格式相同但数据明显不同的文件中。我不是在寻找预测列,而是在这些其他文件中检测异常。如果有异常,程序应该告诉我哪一行/哪一列有异常,然后我必须对其进行编程以发送电子邮件,说明特定文件中可能存在异常
就像我说的,我是机器学习新手。我想知道如何使用KMeans算法来检测文件上的异常值/异常
到目前为止,我已经创建了模型:
SparkConf conf = new SparkConf().setAppName("practice").setMaster("local");
JavaSparkContext sc = new JavaSparkContext(conf);
SparkSession spark = SparkSession
.builder()
.appName("Anomaly Detection")
.getOrCreate();
String day1txt = "C:\\Users\\User\\Documents\\day1.txt";
String day2txt = "C:\\Users\\User\\Documents\\day2.txt";
Dataset<Row> day1 = spark.read().
option("header", "true").
option("delimiter", "\t").
option("inferSchema", "true").
csv(day1txt);
day1 = day1.withColumn("Size", day1.col("Size").cast("Integer"));
day1 = day1.withColumn("Records", day1.col("Records").cast("Integer"));
VectorAssembler assembler = new VectorAssembler()
.setInputCols(new String[]{"Size", "Records"})
.setOutputCol("features");
Dataset<Row> day1vector = assembler.transform(day1);
KMeans kmeans = new KMeans().setK(5).setSeed(1L);
KMeansModel model = kmeans.fit(day1vector);
我不知道从现在开始该怎么做来检测异常值。我还有几个其他的。txt文件应该有“规范化”的数据,我还有几个文件有“篡改/未规范化”的数据。我是否需要使用所有可用的测试数据来训练我的模型,如果需要,如何使用不同的数据集训练模型?或者我只能用一个数据集对其进行训练,然后用其他数据集对其进行测试
编辑:
这是我将使用的文件(day1.txt)的一个示例(当然是虚拟数据/前10名)
Name Size Records
File1 1000 104370
File2 990 101200
File3 1500 109123
File4 2170 113888
File5 2000 111974
File6 1820 110666
File7 1200 106771
File8 1500 108991
File9 1000 104007
File10 1300 107037
这被认为是正常数据,我将有不同的文件,格式相同,但在相同的范围内有不同的值。然后我有一些文件,我故意添加了一个异常值,比如大小:1000,记录:50000
如何使用KMeans检测到这一点?或者,如果KMeans不是完美的模型,那么我应该使用哪种模型以及如何绕过它
# 1 楼答案
这有一个简单的方法。使用kmeans创建簇,然后为每个簇设置一个相对于簇中心的良好半径,如果某个点位于该半径之外,则为异常值
试试看这个:https://arxiv.org/pdf/1402.6859.pdf
有一些离群点检测技术,如:OneClassSvm或anglebaseoutlier检测等。试试看这个:http://scikit-learn.org/stable/modules/outlier_detection.html