【问题标题】:Implementing K-Means Algorithm JDBC实现 K-Means 算法 JDBC
【发布时间】:2013-07-24 03:24:40
【问题描述】:

我正在使用 Oracle 数据库,并在 java 中实现了以下代码(使用 SQL 导入库),其中我有一组学生,他们的平均值,我标记这些学生的平均值高于一个偏离平均值的标准差(通过插入一个带有“1”的新列)。然后我统计符合条件的学生人数,并将他们添加到新表中:

try{
         Statement stOne, stTwo, stThree, stFour;
         String SelectAverage = "SELECT MEAN FROM STUDENTS";
          ResultSet rsOne = stOne.executeQuery(SelectAverage);

    String TotalAverage = "SELECT Avg(MEAN) AS averages FROM STUDENTS";
          ResultSet rsTwo = stTwo.executeQuery(TotalAverage);     

          String student_stan_dev = "SELECT STDEV(MEAN) AS standardDeviation FROM STUDENTS";
          ResultSet rsThree = stThree.executeQuery(student_stan_dev);

           int onesdMean = 1;


           //Loop Duration_Sec column
           while(rsOne.next()){

           //Convert values into float values
           float allAvgs = rsOne.getFloat("MEAN");
           float totalAvg = rsTwo.getFloat("averages"); 
           float StDev = rsThree.getFloat("standardDeviation");

           float theSD = allAvgs - (onesdMean * StDev);
           }

        String flaggedStudents = "ALTER TABLE STUDENTS ADD FlaggedStudents INT";
        ResultSet rsFour = stFour.executeUpdate(flaggedStudents);

           if(allAvgs >= theSD){
               String FlagHint = "INSERT INTO STUDENTS.FlaggedStudents VALUES('1')";
               st.executeUpdate(FlagHint);
           }

        String countInstances = "SELECT STUDENTS.NAME, STUDENTS.FlaggedStudents" +
                "COUNT(*)OVER(PARTITION BY STUDENTS) AS cnt FROM STUDENTS";
           st.executeQuery(countInstances);


        st.executeUpdate("CREATE TABLE IF NOT EXISTS StudentCount" +
        "(NAME INT , cnt INT)");

        String insertVals = String.format("INSERT INTO StudentCount" +
                "(NAME , cnt INT") +
                " VALUES ('%s','%s')");

        st.execute(insertVals);

我的问题是,我想改用 k-means 算法,将符合此标准的学生聚集在一起,并将远远不符合此标准的学生分开。我已经看到了 k-means 算法的源代码,但是我将如何使用 java/SQL 中实现的数据库来做到这一点?我是否只需将此信息添加到集群阵列中?任何帮助将不胜感激。

【问题讨论】:

    标签: java sql data-mining cluster-analysis k-means


    【解决方案1】:

    如果您只有一个属性,请选择与 k-means 不同的算法。

    聚类算法确实只适用于多维数据。

    对于一维数据,使用核密度估计来找到局部最小值以在此处拆分数据。这会产生更有意义的拆分。同时,可以对一维数据进行排序(排序是您的 SQL 数据库非常擅长的事情),这使得问题比多维更容易。

    说真的。一维数据是经典统计的主要领域。他们为此类数据提供了出色的工具,因此请使用它们!

    多维数据难以加速计算,这正是数据挖掘真正发挥作用的地方。一旦问题变得难以在合理的时间内用适当的统计数据处理,那么数据挖掘的启发式方法就很有吸引力。但在此之前,经典的统计数据要聪明和先进得多。

    【讨论】:

      猜你喜欢
      • 2011-07-24
      • 2020-03-10
      • 2014-02-02
      • 2013-07-03
      • 2010-12-05
      • 2017-04-20
      • 2013-04-22
      • 1970-01-01
      • 2011-09-04
      相关资源
      最近更新 更多