Java課程設計——博客做業教學數據分析系統(201521123091 李嘉廉)

#課程設計——博客做業教學數據分析系統(201521123084 李嘉廉)

1.團隊課程設計博客連接

博客做業教學數據分析系統html

2.我的負責模塊或任務說明

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

3.本身的代碼提交記錄截圖

4.本身負責模塊或任務詳細說明

(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];
        }
    }
}

5.課程設計感想

做爲組長,不單單是負責好本身的模塊,更重要的是團隊的協調合做。不過,幸運的是,找到的這羣隊友都通力配合、齊心合力,因此即便是在這麼趕的狀況下,咱們仍是如願完成了基本的功能。
使用Java實現了一些基本算法,還行,可是不是很好,有部分是借鑑別人的。
時間特別緊,來不及呈現更好的做品,身爲團隊負責人深感抱歉。算法

相關文章
相關標籤/搜索