有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案