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

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

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

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

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

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

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

1109478-20170620223101413-1235617492.jpg

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)多元线性回归
首先介绍一下多元线性回归的算法:
假设有 1109478-20170620225517288-1043677117.png共n个feature
拟合函数
1109478-20170620225611663-1871709447.png
代价函数
1109478-20170620225628429-1367500203.png
它的功能主要是通过给定的训练数据集,拟合出一个线性模型,进而对新数据做出预测。通过最小化代价函数来求得值,一般优化的方法有两种,第一是梯度下降算法(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实现了一些基本算法,还行,但是不是很好,有部分是借鉴别人的。
时间特别紧,来不及呈现更好的作品,身为团队负责人深感抱歉。

转载于:https://www.cnblogs.com/ljl36/p/7056769.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值