前端也要懂機(jī)器學(xué)習(xí)之二
上一篇文章講述了機(jī)器學(xué)習(xí)的基本知識(shí)點(diǎn),這一篇就開(kāi)啟一些算法的摸索之路。既然我們是前端研發(fā)工程師,那就選擇ml.js這個(gè)庫(kù)進(jìn)行編碼。本次涉及到的算法包含:KNN、決策樹(shù)、隨機(jī)森林、樸素貝葉斯、支持向量機(jī)、線性回歸、K-均值聚類算法,這七個(gè)算法橫跨監(jiān)督學(xué)習(xí)算法(分類算法、回歸算法)、非監(jiān)督學(xué)習(xí)算法,可以作為前端入門機(jī)器學(xué)習(xí)的必修課程,也可作為既將到來(lái)的端智能時(shí)代的必讀刊物。
一、監(jiān)督學(xué)習(xí)算法
1.1 分類算法
1.1.1 K-近鄰分類算法(KNN)
一、定義
如果一個(gè)樣本在特征空間中的k個(gè)最相似(即特征空間中最鄰近)的樣本中的大多數(shù)屬于某一個(gè)類別,則該樣本也屬于這個(gè)類別。(通常k是不大于20的整數(shù))
二、優(yōu)缺點(diǎn)
1.優(yōu)點(diǎn)
- 簡(jiǎn)單有效
- 精度高
- 對(duì)異常值不敏感
- 無(wú)須訓(xùn)練
2.缺點(diǎn)
- 計(jì)算復(fù)雜度高、空間復(fù)雜度高(計(jì)算量大,內(nèi)存開(kāi)銷大)
- 必須指定K值,K值選擇不當(dāng)則分類精度不能保證。(K值取很小,容易受到異常點(diǎn)的影響,容易出現(xiàn)過(guò)擬合;K值取很大,受到樣本均衡問(wèn)題)
三、計(jì)算距離
對(duì)于KNN算法,最核心的內(nèi)容是計(jì)算距離,兩個(gè)樣本之間的距離可以通過(guò)歐氏距離計(jì)算。其計(jì)算公式為:
四、應(yīng)用場(chǎng)景
小數(shù)據(jù)場(chǎng)景(幾千~幾萬(wàn)樣本),可用于字符識(shí)別、文本分類、圖像識(shí)別等領(lǐng)域
五、代碼
- const KNN = require('ml-knn');
- // 訓(xùn)練集特征
- const dataset = [
- [1.0, 1.1],
- [1.0, 1.0],
- [0, 0],
- [0, 0.1]
- ];
- // 訓(xùn)練集目標(biāo)
- const labels = ['A', 'A', 'B', 'B'];
- // 實(shí)例化KNN算法(進(jìn)行訓(xùn)練)
- const knn = new KNN(dataset, labels, { k: 3});
- // 需要進(jìn)行預(yù)測(cè)的點(diǎn)
- const predictDataSet = [[0, 0], [3, 1]];
- // 進(jìn)行預(yù)測(cè)
- predictLabels = knn.predict(predictDataSet);
- console.log(predictLabels);// [ 'B', 'A' ]
1.1.2 決策樹(shù)
一、定義
決策樹(shù)(Decision Tree)是在已知各種情況發(fā)生概率的基礎(chǔ)上,通過(guò)構(gòu)成決策樹(shù)來(lái)求取凈現(xiàn)值的期望值大于等于零的概率,評(píng)價(jià)項(xiàng)目風(fēng)險(xiǎn),判斷其可行性的決策分析方法,是直觀運(yùn)用概率分析的一種圖解法。決策樹(shù)是一種樹(shù)形結(jié)構(gòu),其中每個(gè)內(nèi)部節(jié)點(diǎn)表示一個(gè)屬性上的測(cè)試,每個(gè)分支代表一個(gè)測(cè)試輸出,每個(gè)葉節(jié)點(diǎn)代表一種類別。
二、優(yōu)缺點(diǎn)
1.優(yōu)點(diǎn)
- 計(jì)算復(fù)雜度不高
- 輸出結(jié)果易于理解
- 對(duì)中間值的缺失不敏感
- 可以處理連續(xù)和種類字段
- 可以處理不相關(guān)特征數(shù)據(jù)
2.缺點(diǎn)
- 可能出現(xiàn)過(guò)擬合現(xiàn)象,需要進(jìn)行剪枝操作
- 對(duì)于各類別樣本數(shù)量不一致的數(shù)據(jù),信息增益偏向于那些更多數(shù)值的特征
三、應(yīng)用場(chǎng)景
常用于解決分類和回歸問(wèn)題,用該算法的前提條件是:
1. 具有決策者期望達(dá)到的明確目標(biāo)
2. 存在決策者可以選擇的兩個(gè)以上的可行的備選方案
3. 存在決策者無(wú)法控制的兩個(gè)以上不確定因素
4. 不同方案在不同因素下的收益或損失可以計(jì)算出來(lái)
5. 決策者可以估計(jì)不確定因素發(fā)生的概率
四、重點(diǎn)知識(shí)點(diǎn)
1.信息熵
信息是很抽象的概念,很難進(jìn)行量化對(duì)量,為了解決對(duì)信息的量化度量問(wèn)題,香農(nóng)提出了“信息熵”的概念。信息熵是在信息的基礎(chǔ)上,將有可能產(chǎn)生的信息定義為一個(gè)隨機(jī)變量,變量的期望就是信息熵。信息熵的計(jì)算公式為(單位為比特):
注:熵是用來(lái)度量不確定性,熵越大則其不確定性越大,反之越小 2. 信息增益
信息增益在決策樹(shù)算法中是用來(lái)選擇特征的指標(biāo),信息增益越大,則這個(gè)特征的選擇性越好,在概率論中定義為:待分類的集合的熵和選定某個(gè)特征的條件熵之差。其計(jì)算公式為:
注:
- g(D, A)表示特征A對(duì)訓(xùn)練數(shù)據(jù)集D的信息增益
- H(D)表示集合D的信息熵
- H(D|A)表示條件熵
3.常用算法
(1)ID3算法
ID3算法是采用信息增益作為特征選擇的標(biāo)準(zhǔn),信息增益越大,說(shuō)明按此特征分類后越能消除信息的不確定性。
(2)C4.5算法
ID3算法具有兩大缺點(diǎn):一個(gè)是類別越多的特征計(jì)算出的信息增益越大,易導(dǎo)致生成的決策樹(shù)廣而淺;另一個(gè)是只能處理離散變量,不能處理連續(xù)變量。C4.5是在ID3的算法基礎(chǔ)上采用信息增益率作為特征選擇,通過(guò)增加類別的懲罰因子,規(guī)避了類別越多信息增益越大的問(wèn)題,同時(shí)也可以對(duì)連續(xù)變量通過(guò)均值離散化的方式解決無(wú)法處理連續(xù)變量的問(wèn)題。
(3)CART算法
C4.5存在不能處理回歸問(wèn)題的缺點(diǎn),該缺點(diǎn)由CART解決。CART不在通過(guò)信息熵的方式選取最優(yōu)劃分特征,而是采用基尼系數(shù)(基尼不純度),兩者衡量信息量的作用相當(dāng),但基尼系數(shù)由于沒(méi)有對(duì)數(shù)運(yùn)算,可大大減少計(jì)算開(kāi)銷。
五、代碼
- const irisDataset = require('ml-dataset-iris');
- const { DecisionTreeClassifier } = require('ml-cart');
- // 獲取訓(xùn)練集中的特征值
- const dataSet = irisDataset.getNumbers();
- // 獲取訓(xùn)練集中的目標(biāo)值,并轉(zhuǎn)換為標(biāo)量
- const labels = irisDataset
- .getClasses()
- .map(elem => irisDataset.getDistinctClasses().indexOf(elem));
- // 實(shí)例化決策樹(shù)的分類器
- const dTClassifier = new DecisionTreeClassifier({
- gainFunction: 'gini',
- maxDepth: 10,
- minNumSamples: 3
- });
- // 進(jìn)行訓(xùn)練
- dTClassifier.train(dataSet, labels);
- const predictDataset = [[5.1,3.5,1.4,0.2]];
- // 進(jìn)行預(yù)測(cè)
- const result = dTClassifier.predict(predictDataset);
- // 結(jié)果轉(zhuǎn)換為對(duì)應(yīng)的文本形式
- console.log(result.map(value => irisDataset.getDistinctClasses()[value]));
1.1.3 隨機(jī)森林
一、定義
在機(jī)器學(xué)習(xí)中,隨機(jī)森林是一個(gè)包含多個(gè)決策樹(shù)的分類器,其輸出的類別是由個(gè)別樹(shù)輸出的類別的眾數(shù)而定(隨機(jī)森林就是通過(guò)集成學(xué)習(xí)的思想將多棵樹(shù)集成的一種算法,其基本單元是決策樹(shù))。
二、優(yōu)缺點(diǎn)
1.優(yōu)點(diǎn)
- 具有極好的準(zhǔn)確率(由集成算法的特點(diǎn)引入)
- 抗過(guò)擬合能力:通過(guò)平均決策樹(shù),降低過(guò)擬合的風(fēng)險(xiǎn)性(由隨機(jī)這個(gè)特點(diǎn)引入)
- 能夠有效地運(yùn)行在大數(shù)據(jù)集上,處理具有高維特征的輸入樣本,而且不需要降維
- 能夠評(píng)估各個(gè)特征在分類問(wèn)題上的重要性
2.缺點(diǎn)
- 在某些噪音較大的分類或回歸問(wèn)題上會(huì)過(guò)擬合
- 比決策樹(shù)算法更復(fù)雜,計(jì)算成本更高
三、重要知識(shí)點(diǎn)
1.隨機(jī)森林的每棵樹(shù)的生成規(guī)則(A表示訓(xùn)練集總樣本個(gè)數(shù)、N表示訓(xùn)練樣本個(gè)數(shù)、M表示特征個(gè)數(shù))
(1)對(duì)于每棵樹(shù)隨機(jī)有放回的從訓(xùn)練集中抽取N個(gè)訓(xùn)練樣本,作為該樹(shù)的訓(xùn)練集 (2)指定一個(gè)常數(shù)m<
2..為什么要隨機(jī)抽樣訓(xùn)練集?
隨機(jī)抽樣是為了保證每棵樹(shù)的訓(xùn)練集都不一樣,若不隨機(jī)抽樣會(huì)導(dǎo)致最終訓(xùn)練出的分類結(jié)果完全一樣。
3.為什么要有放回的抽樣?
有放回的抽樣才能保證每次抽取時(shí)的概率是一樣的,達(dá)到獨(dú)立同分布,可保證每一棵決策樹(shù)都是相互獨(dú)立的。
4.隨機(jī)森林分類效果(錯(cuò)誤率)相關(guān)因素?
(1)森林中任意兩棵樹(shù)的相關(guān)性:相關(guān)性越大,錯(cuò)誤率越大
(2)森林中每棵樹(shù)的分類能力:每棵樹(shù)的分類能力越強(qiáng),整個(gè)森林的錯(cuò)誤率越低
(注:減小特征選擇個(gè)數(shù)m,樹(shù)的相關(guān)性和分類能力會(huì)相應(yīng)降低,反之會(huì)隨之增大)
四、代碼
- const irisDataset = require('ml-dataset-iris');
- const { RandomForestClassifier } = require('ml-random-forest');
- // 獲取訓(xùn)練集中的特征值
- const dataSet = irisDataset.getNumbers();
- // 獲取訓(xùn)練集中的目標(biāo)值,并轉(zhuǎn)換為標(biāo)量
- const labels = irisDataset
- .getClasses()
- .map(elem => irisDataset.getDistinctClasses().indexOf(elem));
- // 實(shí)例化分類器
- const rFClassifier = new RandomForestClassifier({
- seed: 3,
- maxFeatures: 0.8,
- replacement: true,
- nEstimators: 25
- });
- // 進(jìn)行訓(xùn)練
- rFClassifier.train(dataSet, labels);
- const predictDataset = [[5.1,3.5,1.4,0.2]];
- // 進(jìn)行預(yù)測(cè)
- const result = rFClassifier.predict(predictDataset);
- // 結(jié)果轉(zhuǎn)換為對(duì)應(yīng)的文本形式
- console.log(result.map(value => irisDataset.getDistinctClasses()[value]));
1.1.4 樸素貝葉斯
一、定義
樸素貝葉斯法(NBC)是基于貝葉斯定理與特征條件獨(dú)立假設(shè)的分類方法。先通過(guò)已給定的訓(xùn)練集,以特征詞之間獨(dú)立作為前提假設(shè),學(xué)習(xí)從輸入到輸出的聯(lián)合概率分布,再基于學(xué)習(xí)到的模型,輸入X求出使得后驗(yàn)概率最大的輸出Y。
二、優(yōu)缺點(diǎn)
1.優(yōu)點(diǎn)
- 樸素貝葉斯模型發(fā)源于古典數(shù)學(xué)理論,有穩(wěn)定的分類效率
- 對(duì)缺失數(shù)據(jù)不敏感,算法簡(jiǎn)單,常用于文本分類
- 分類準(zhǔn)確度高,速度快
2.缺點(diǎn)
- 使用了樣本獨(dú)立性的假設(shè),如果特征屬性有關(guān)聯(lián)性,其效果較差
三、應(yīng)用場(chǎng)景
- 文本分類
- 文字識(shí)別
- 圖像識(shí)別
四、重要知識(shí)點(diǎn)
1.貝葉斯公式
注:貝葉斯公式是打通P(W|C)和P(C|W)的橋梁
2.為什么引入拉普拉斯平滑系數(shù)
為了防止計(jì)算出的分類概率為0,所以引入拉普拉斯平滑系數(shù),即讓P(W1|C)不為0,其計(jì)算公式為:
注:其中α為指定系數(shù),一般為1;m為訓(xùn)練文檔中統(tǒng)計(jì)出的特征詞個(gè)數(shù)
三種貝葉斯模型
(1)高斯分布樸素貝葉斯——用于一般分類問(wèn)題
(2)多項(xiàng)式分布樸素貝葉斯——適用于文本數(shù)據(jù)(特征表示的是次數(shù))
(3)伯努利分布樸素貝葉斯——適用于伯努利分布、文本數(shù)據(jù)(特征表示的是是否出現(xiàn))
五、代碼
- const irisDataset = require('ml-dataset-iris');
- const { GaussianNB } = require('ml-naivebayes');
- // 獲取訓(xùn)練集中的特征值
- const dataSet = irisDataset.getNumbers();
- // 獲取訓(xùn)練集中的目標(biāo)值
- const labels = irisDataset
- .getClasses()
- .map(elem => irisDataset.getDistinctClasses().indexOf(elem));
- //實(shí)例化分類器
- const gaussianNB = new GaussianNB();
- // 進(jìn)行訓(xùn)練
- gaussianNB.train(dataSet, labels);
- const predictDataset = [[5.1,3.5,1.4,0.2]];
- // 進(jìn)行預(yù)測(cè)
- const result = gaussianNB.predict(predictDataset);
- // 結(jié)果轉(zhuǎn)換為對(duì)應(yīng)的文本形式
- console.log(result.map(value => irisDataset.getDistinctClasses()[value]));
1.1.5 支持向量機(jī)
一、定義
支持向量機(jī)(SVM)是一類按監(jiān)督學(xué)習(xí)方式對(duì)數(shù)據(jù)進(jìn)行二元分類的廣義線性分類器,其決策邊界是對(duì)學(xué)習(xí)樣本求解的最大邊距超平面。
二、優(yōu)缺點(diǎn)
1.優(yōu)點(diǎn)
- 有嚴(yán)格的數(shù)學(xué)理論支持,可解釋性強(qiáng),不依靠統(tǒng)計(jì)方法,簡(jiǎn)化了通常的分類和回歸問(wèn)題。
- 上述支持向量決定了最終結(jié)果,對(duì)異常值不敏感,可以幫助抓住關(guān)鍵樣本,剔除大量冗余樣本
- 該算法簡(jiǎn)單且具有較好的“魯棒性”
- 計(jì)算的復(fù)雜度取決于支持向量的數(shù)目,而不是樣本空間的維數(shù),某種意義上避免了“維數(shù)災(zāi)難”
- 泛化能力較強(qiáng)
2.缺點(diǎn)
- 對(duì)大規(guī)模訓(xùn)練樣本難以實(shí)施:SVM的空間消耗主要是存儲(chǔ)訓(xùn)練樣本和核矩陣,由于SVM是借助二次規(guī)劃來(lái)求解支持向量,而求解二次規(guī)劃將涉及m階矩陣的運(yùn)算,當(dāng)m數(shù)目很大時(shí)該矩陣的存儲(chǔ)和計(jì)算將耗費(fèi)大量的機(jī)器內(nèi)存和運(yùn)算時(shí)間。
- 解決多分類問(wèn)題困難:經(jīng)典的支持向量機(jī)算法只給出了二類分類算法,解決多分類問(wèn)題需要通過(guò)多個(gè)二類支持向量機(jī)的組合來(lái)解決(一對(duì)多組合模式、一對(duì)一組合模式和SVM決策樹(shù))。
- 對(duì)參數(shù)和核函數(shù)選擇敏感:支持向量機(jī)性能的優(yōu)劣主要取決于核函數(shù)的選取。
三、應(yīng)用場(chǎng)景
SVM在各領(lǐng)域的模式識(shí)別問(wèn)題中有應(yīng)用,包括人像識(shí)別、文本分類、手寫(xiě)字符識(shí)別、生物信息學(xué)等。
四、重要知識(shí)點(diǎn)
1.重要概念
(1) 線性可分:在二維空間上,兩類點(diǎn)被一條直線完全分開(kāi)叫做線性可分
(2)最大間隔超平面:從二維擴(kuò)展到多維空間中,將兩個(gè)點(diǎn)集完全正確地劃分開(kāi)就形成一個(gè)超平面,為了使這個(gè)超平面更具魯棒性,則會(huì)找最佳超平面(即為最大間隔超平面,該平面是以最大間隔把兩類樣本分開(kāi)的超平面)。(兩類樣本分別分割在該超平面的兩側(cè)、兩側(cè)距離超平面最近的樣本點(diǎn)到超平面的距離被最大化了)
(3)支持向量:樣本中距離超平面最近的一些點(diǎn)叫支持向量
(4)軟間隔:對(duì)于不能夠完全線性可分的樣本可引入軟間隔,相比于硬間隔的苛刻條件,軟間隔允許個(gè)別樣本出現(xiàn)在間隔帶里面。(注:硬間隔和軟間隔均是在說(shuō)樣本的完全線性可分或者大部分樣本點(diǎn)的線性可分)
2.對(duì)于線性不可分處理方式
將線性不可分樣本映射到高維空間中,使樣本在高維空間線性可分,此時(shí)由于維度提高會(huì)導(dǎo)致計(jì)算量增大,所以需要使用核函數(shù)幫助處理,引入核函數(shù)后就不需要計(jì)算高維甚至無(wú)窮維空間的內(nèi)積了。
3.引入核函數(shù)的好處
(1)減少了計(jì)算量
(2)減少了存儲(chǔ)數(shù)據(jù)的內(nèi)存使用量
4.常見(jiàn)核函數(shù)分類
(1)線性核函數(shù) (2)多項(xiàng)式核函數(shù) (3)高斯核函數(shù)
五、代碼
- const SVM = require('libsvm-js/asm');
- const svm = new SVM({
- kernel: SVM.KERNEL_TYPES.RBF,
- type: SVM.SVM_TYPES.C_SVC,
- gamma: 1,
- cost: 1
- });
- const dataSet = [[0, 0], [1, 1], [1, 0], [0, 1]];
- const labels = [0, 0, 1, 1];
- // 進(jìn)行訓(xùn)練
- svm.train(dataSet, labels);
- // 進(jìn)行預(yù)測(cè)
- const predictedLabel = svm.pred
1.2 回歸算法
1.2.1 線性回歸
一、定義
線性回歸是利用回歸方程(函數(shù))對(duì)一個(gè)或多個(gè)自變量(特征值)和因變量(目標(biāo)值)之間關(guān)系進(jìn)行建模的一種分析方式。只有一個(gè)自變量的情況稱為單變量回歸,大于一個(gè)自變量的情況叫做多元回歸。
二、優(yōu)缺點(diǎn)
1.優(yōu)點(diǎn)
- 思想簡(jiǎn)單、容易實(shí)現(xiàn)、建模迅速,對(duì)于小數(shù)據(jù)量、簡(jiǎn)單關(guān)系情形的很有效
- 是需要強(qiáng)大的非線性模型的基礎(chǔ)
- 理解容易,其結(jié)果具有很好的可解釋型,有利于決策分析。
- 能解決回歸問(wèn)題
缺點(diǎn)
- 對(duì)于非線性數(shù)據(jù)或者數(shù)據(jù)特征間具有相關(guān)性多項(xiàng)式回歸難以建模
- 難以很好地表達(dá)高度復(fù)雜的數(shù)據(jù)
三、應(yīng)用場(chǎng)景
- 趨勢(shì)線(時(shí)間序列數(shù)據(jù)的長(zhǎng)期走勢(shì))
- 流行病學(xué)
- 金融(分析和計(jì)算投資的系統(tǒng)風(fēng)險(xiǎn))
- 經(jīng)濟(jì)學(xué)(預(yù)測(cè)消費(fèi)支出、固定投資支出等)
四、重要知識(shí)點(diǎn)
- 回歸目的——預(yù)測(cè)數(shù)值型的目標(biāo)值
- 回歸性能評(píng)價(jià)指標(biāo)——均方誤差(MSE)
- 過(guò)擬合
(1)定義:一個(gè)建設(shè)在訓(xùn)練數(shù)據(jù)上能夠獲得比其它假設(shè)更好的擬合,但是在測(cè)試數(shù)據(jù)集上卻不能很好地?cái)M合數(shù)據(jù),此時(shí)認(rèn)為這個(gè)假設(shè)出現(xiàn)了過(guò)擬合現(xiàn)象。(模型過(guò)于復(fù)雜)
(2)原因:原始特征過(guò)多,存在一些嘈雜特征
(3)解決辦法:正則化
4.欠擬合
(1)定義:一個(gè)假設(shè)在訓(xùn)練數(shù)據(jù)集上不能獲得很好的擬合,并且在測(cè)試數(shù)據(jù)集上也不能很好地?cái)M合數(shù)據(jù),此時(shí)認(rèn)為這個(gè)假設(shè)出現(xiàn)了欠擬合的現(xiàn)象。(模型過(guò)于簡(jiǎn)單)
(2)原因:學(xué)習(xí)到數(shù)據(jù)的特征過(guò)少
(3)解決辦法:增加數(shù)據(jù)的特征數(shù)量
5.正則化
(1)L2正則化
L2正則化可以使得其中一些W都很小(接近于0),削弱某個(gè)特征影響。Ridge回歸就是用的L2正則化。
(2)L1正則化
L1正則化可以使得其中一些W的值直接為0,刪除整個(gè)特征的影響。LASSO回歸用的就是L1正則化。
五、代碼
- const SimpleLinearRegression = require('ml-regression-simple-linear');
- const x = [0.5, 1, 1.5, 2, 2.5];
- const y = [0, 1, 2, 3, 4];
- const regression = new SimpleLinearRegression(x, y);
- const result = regression.predict(3);
- console.log(result);
二、非監(jiān)督學(xué)習(xí)算法
2.1 K-均值聚類算法
一、定義
K均值聚類算法是一種迭代求解的聚類分析算法,其步驟為:
隨機(jī)設(shè)置K個(gè)特征空間內(nèi)的點(diǎn)作為初始的聚類中心
對(duì)于其它每個(gè)點(diǎn)計(jì)算到K個(gè)中心的距離,位置的點(diǎn)選擇最近的一個(gè)聚類中心點(diǎn)作為標(biāo)記類別
接著重新計(jì)算出每個(gè)聚類的新中心點(diǎn)(平均值)
如果計(jì)算得出的新中心點(diǎn)與原中心點(diǎn)一樣,則結(jié)束,否則重新進(jìn)行第二步過(guò)程
二、優(yōu)缺點(diǎn)
1.優(yōu)點(diǎn)
- 原理簡(jiǎn)單,容易實(shí)現(xiàn),算法復(fù)雜度低
- 可解釋度較強(qiáng)
- 處理大數(shù)據(jù)集的時(shí)候,該算法可以保證較好的伸縮性
- 當(dāng)簇近似高斯分布的時(shí)候效果很好
2.缺點(diǎn)
- K值需要人為設(shè)定,不同K值得到的結(jié)果不一樣
- 對(duì)初始的簇中心敏感,不同選取方式會(huì)得到不同結(jié)果
- 對(duì)異常值敏感
- 需樣本存在均值(限定數(shù)據(jù)種類)
- 不適合太離散的分類、樣本類別不均衡的分類、非凸形狀的分類
- 可能收斂到局部最小值
三、代碼
- const kmeans = require('ml-kmeans');
- // 需要進(jìn)行聚類的全部數(shù)據(jù)
- const data = [[1, 1, 1], [-1, -1, -1], [-1, -1, -1.5], [1, 2, 1]];
- // 質(zhì)心
- const centers = [[1, 2, 1], [-1, -1, -1]];
- const ans = kmeans(data, 2, {
- initialization: centers
- });
- console.log(ans);
本文轉(zhuǎn)載自微信公眾號(hào)「執(zhí)鳶者」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系執(zhí)鳶者眾號(hào)。