zoukankan      html  css  js  c++  java
  • Java课程设计——博客作业教学数据分析系统(201521123091 李嘉廉)

    课程设计——博客作业教学数据分析系统(201521123084 李嘉廉)


    1.团队课程设计博客链接

    博客作业教学数据分析系统

    2.个人负责模块或任务说明

    • 數據分析
    • Kmeans聚類算法實現
    • 多元綫性回歸算法實現
    • 部分前端實現

    3.自己的代码提交记录截图

    4.自己负责模块或任务详细说明

    (1)KMeans聚类
    这是我负责的算法实现的一个模块,总结一下,数据聚类是将没有类别参考的数据进行分析,并划分为不同的组,即直接从这些数据中导出类标号。聚类分析本身则是根据数据来发掘数据对象及其关系信息,并将这些数据分组。关于这些数据的具体类别一开始并没有任何参考,例如该怎么聚类,聚成多少类,都没人知道,我们称之为无监督学习。

    代码有借鉴

    public void doIteration(ArrayList<Node> centroid) {
    
    	int cnt = 1;
    	int cntEnd = 0;
    	int numLabel = centroid.size();
    	while (true) {// 迭代,直到所有的质心都不变化为止
    		boolean flag = false;
    		for (int i = 0; i < arrayList.size(); ++i) {
    			double dis = 0x7fffffff;
    			cnt = 1;
    			for (int j = 0; j < centroid.size(); ++j) {
    				Node node = centroid.get(j);
    				if (getDistance(arrayList.get(i), node) < dis) {
    					dis = getDistance(arrayList.get(i), node);
    					arrayList.get(i).label = cnt;
    				}
    				cnt++;
    			}
    		}
    		int j = 0;
    		numLabel -= 1;
    		while (j < numLabel) {
    			int c = 0;
    			Node node = new Node();
    			for (int i = 0; i < arrayList.size(); ++i) {
    				if (arrayList.get(i).label == j + 1) {
    					for (int k = 0; k < dimension; ++k) {
    						node.attributes[k] += arrayList.get(i).attributes[k];
    					}
    					c++;
    				}
    			}
    			double[] attributelist = new double[dimension];
    			for (int i = 0; i < dimension; ++i) {
    				attributelist[i] = node.attributes[i] / c;
    				if (attributelist[i] != centroid.get(j).attributes[i]) {
    					centroid.get(j).attributes[i] = attributelist[i];
    					flag = true;
    				}
    			}
    			if (!flag) {
    				cntEnd++;
    				
    				// 若所有的质心都不变,则跳出循环
    				if (cntEnd == numLabel) {
    					break;
    				}
    			}
    			j++;
    		}
    		
    		// 若所有的质心都不变,则 success
    		if (cntEnd == numLabel) {
    			break;
    		}
    	}
    }
    

    (2)多元线性回归
    首先介绍一下多元线性回归的算法:
    假设有 共n个feature
    拟合函数

    代价函数

    它的功能主要是通过给定的训练数据集,拟合出一个线性模型,进而对新数据做出预测。通过最小化代价函数来求得值,一般优化的方法有两种,第一是梯度下降算法(Gradient Descent),第二种是正规方程法(The normal equations)。 我们选用的是第一种算法。

    // 训练样本得到参数值
    public void trainTheta() {
    	int iteration = this.iteration;
    	while ((iteration--) > 0) {
    		// 计算每个theta的偏导
    		// partialDerivative := sum(...) / m
    		double[] partialDerivative = computePartialDerivative();
    
    		// 更新每个theta,同时更新
    		for (int i = 0; i < theta.length; i++) {
    			theta[i] -= alpha * partialDerivative[i];
    		}
    	}
    }
    

    5.课程设计感想

    作为组长,不仅仅是负责好自己的模块,更重要的是团队的协调合作。不过,幸运的是,找到的这群队友都通力配合、齐心协力,所以即使是在这么赶的情况下,我们还是如愿完成了基本的功能。
    使用Java实现了一些基本算法,还行,但是不是很好,有部分是借鉴别人的。
    时间特别紧,来不及呈现更好的作品,身为团队负责人深感抱歉。

  • 相关阅读:
    在三层开发的DAL层中, 从web.config中读取数据库的连接字符串的方法
    [转]使用 DataAdapter 执行批量更新
    各式各样的 ICONS
    20个“标准的”配色方案
    一款 FORM 框报错提示 Demo
    超漂亮的仿腾讯弹出层效果
    POJ 2192 (DP)
    POJ 2063 (DP)
    POJ 3624 (DP)
    JavaScript技巧集
  • 原文地址:https://www.cnblogs.com/ljl36/p/7056769.html
Copyright © 2011-2022 走看看