我正在使用Oracle数据库并在Java中实现以下代码(带有SQL导入的库),我有一组学生,他们的平均值,我标记那些平均值高于1的学生远离平均值的标准差(通过在其中插入一个“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中实现的数据库呢?我是否只是将此信息添加到群集阵列?任何帮助将不胜感激。
答案 0 :(得分:0)
如果您只有一个属性,请选择与k-means不同的算法。
聚类算法实际上只适用于多维数据。
对于一维数据,使用内核密度估计来查找局部最小值以在那里分割数据。这会产生更有意义的分裂。同时,可以对一维数据进行排序(并且排序是您的SQL数据库做得很好的事情),这使问题比多维度更容易。
严重。一维数据是经典统计的主要领域。他们有很好的工具来处理这类数据,所以请使用它们!
多维数据,加速计算变得棘手,是数据挖掘真正发挥作用的地方。一旦问题变得难以在合理的时间内使用适当的统计数据处理,那么数据挖掘的启发式方法就具有吸引力。但在此之前,经典统计数据更加聪明和先进。