博客做业教学数据分析系统html
- 數據分析
- Kmeans聚類算法實現
- 多元綫性回歸算法實現
- 部分前端實現
(1)KMeans聚类
这是我负责的算法实现的一个模块,总结一下,数据聚类是将没有类别参考的数据进行分析,并划分为不一样的组,即直接从这些数据中导出类标号。聚类分析自己则是根据数据来发掘数据对象及其关系信息,并将这些数据分组。关于这些数据的具体类别一开始并无任何参考,例如该怎么聚类,聚成多少类,都没人知道,咱们称之为无监督学习。前端
代码有借鉴node
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)。 咱们选用的是第一种算法。c++
// 训练样本获得参数值 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]; } } }
做为组长,不单单是负责好本身的模块,更重要的是团队的协调合做。不过,幸运的是,找到的这群队友都通力配合、齐心合力,因此即便是在这么赶的状况下,咱们仍是如愿完成了基本的功能。
使用Java实现了一些基本算法,还行,可是不是很好,有部分是借鉴别人的。
时间特别紧,来不及呈现更好的做品,身为团队负责人深感抱歉。算法