徒手寫機器學習演算法 K means和整合學習演算法

2021-09-29 10:12:49 字數 1960 閱讀 2447

k-means是一種聚類演算法,其核心思想是針對乙個訓練集通過預先給定的初始點和初始的聚類數目、迭代地將資料集拆分成多個類別。然後我們會把多個k-means弱分類器集合起來,構成乙個更強的整合分類器。

核心idea:迭代地尋找和當前幾個中心對應的最近向量,然後根據最新的劃分更新這些中心;

核心idea:根據弱分類器的表現不斷更新它們的權重,最終的**是乙個加權平局;

類宣告kmeans.hpp

#include #include "eigen/dense"

#include #include #include //typedef mapc_all;

using namespace std;

using namespace eigen;

class kmeans

;class experts

;

類實現和測試kmeans.cpp

#include "eigen/dense"

#include #include "kmeans.hpp"

#include //g++ kmeans.cpp -o kmeans.out -i/download/eigen

using namespace std;

using namespace eigen;

kmeans::kmeans(){}

kmeans::~kmeans(){}

double kmeans::norm(vectorxd* vec1, vectorxd* vec2)

void kmeans::train(vectorx,vectory,int k)

} for (int i = 0; i < x.size(); ++i)

for (std::set::iterator iter= c_y.begin(); iter!= c_y.end(); ++iter) }

vectorxd kmeans::getmeanu(int y)

sum += *(iter->first);

num++;

} }//cout<

double minnorm = norm(c_u.begin()->second,x);

//int move = 0;

for (std::map::iterator iterc_u = c_u.begin(); iterc_u != c_u.end(); ++iterc_u) }

//cout

else

sum += *(iter->first);

num++;}}

cout<

return false;

}experts::experts(){}

experts::~experts(){}

void experts::train(vectorx,vectory)

else //predict wrongly;

}iter_d++;

} loss.push_back(w.dot(v)); //need trans??? no

wh.array() = (wh.array())*((-nita*v).array().exp()); //vectorly calculate; }}

mapexperts::predict(vectorxd* x)

else

}return res;

}

機器學習 K Means演算法

簡介 又叫k 均值演算法,是非監督學習中的聚類演算法。基本思想 k means演算法比較簡單。在k means演算法中,用cluster來表示簇 容易證明k means演算法收斂等同於所有質心不再發生變化。基本的k means演算法流程如下 選取k個初始質心 作為初始cluster,每個初始clus...

機器學習 K Means演算法應用

import matplotlib.pyplot as plt from sklearn.datasets.samples generator import make blobs 聚類資料測試工具 在sklearn中,隨機生成1000個樣本,每個樣本2個特徵,共4個簇,簇中心在 1,1 0,0 1,...

機器學習筆記 k means演算法

k means是一種無監督的聚類演算法,也就是不給標籤,演算法自動來進行分類,最終分成k個簇。輸入 k 簇的個數 訓練集 無標籤的樣本集合 輸出 k個簇 k應該比樣本數量小 1 隨機初始化k個均值向量 代表k個簇的中心 可以隨機選取k個訓練樣本作為初始均值向量。2 開始迴圈 1 對每個樣本進行遍歷,...