介紹
人工智能學(xué)習(xí)通常由兩種主要方法組成:監(jiān)督學(xué)習(xí)和無(wú)監(jiān)督的學(xué)習(xí)。監(jiān)督學(xué)習(xí)包括使用現(xiàn)有的訓(xùn)練集,這種訓(xùn)練集由預(yù)先標(biāo)記的分類(lèi)數(shù)據(jù)列組成。機(jī)器學(xué)習(xí)算法會(huì)發(fā)現(xiàn)數(shù)據(jù)的特征和這一列的標(biāo)簽(或輸出)之間的關(guān)聯(lián)。通過(guò)這種方式,機(jī)器學(xué)習(xí)模型可以預(yù)測(cè)它從來(lái)沒(méi)有公開(kāi)過(guò)的新的數(shù)據(jù)列,并且根據(jù)它的訓(xùn)練數(shù)據(jù)返回一個(gè)精確的分類(lèi)。在你已經(jīng)有了預(yù)先分類(lèi)的數(shù)據(jù)的情況下,監(jiān)督學(xué)習(xí)對(duì)于大數(shù)據(jù)集是非常有用的。
在另一種是無(wú)監(jiān)督的學(xué)習(xí)。使用這種學(xué)習(xí)方式,數(shù)據(jù)不需要在訓(xùn)練集中進(jìn)行預(yù)先標(biāo)記或預(yù)分類(lèi),相反,機(jī)器學(xué)習(xí)算法在數(shù)據(jù)的特征中發(fā)現(xiàn)相似的特征和關(guān)聯(lián),并將它們分組在一起。例如,根據(jù)某些特性,兩個(gè)數(shù)據(jù)可能會(huì)出現(xiàn)類(lèi)似的情況,因此會(huì)被分組到同一個(gè)框中(更正式地稱(chēng)為“集群”)。通過(guò)將相似的數(shù)據(jù)聚集在一起,就可以預(yù)測(cè)出新列之前從未見(jiàn)過(guò)的數(shù)據(jù),并獲得一個(gè)準(zhǔn)確的分類(lèi)。不受監(jiān)督的學(xué)習(xí)可以很好地適用于某些公共關(guān)系形式的數(shù)據(jù)集。這也得益于不需要事先貼上標(biāo)簽的訓(xùn)練集,而這往往是監(jiān)督學(xué)習(xí)中較為困難的部分(通常需要人工標(biāo)記訓(xùn)練數(shù)據(jù))。
與監(jiān)督學(xué)習(xí)的方法相似,無(wú)監(jiān)督學(xué)習(xí)和聚類(lèi)可以利用訓(xùn)練數(shù)據(jù)來(lái)形成分組。當(dāng)監(jiān)督學(xué)習(xí)使用預(yù)先標(biāo)記的訓(xùn)練集時(shí),無(wú)監(jiān)督的學(xué)習(xí)只需要數(shù)據(jù)。很自然地,預(yù)先標(biāo)記的訓(xùn)練數(shù)據(jù)用于監(jiān)督學(xué)習(xí)不僅費(fèi)時(shí),而且容易出現(xiàn)人為錯(cuò)誤。由于這些原因,不需要(人工/自動(dòng)化)預(yù)先標(biāo)記的數(shù)據(jù)集,無(wú)監(jiān)督學(xué)習(xí)就有潛力在機(jī)器學(xué)習(xí)和人工智能結(jié)果方面取得進(jìn)展。
在本教程中,我們將演示使用無(wú)監(jiān)督學(xué)習(xí)和集群來(lái)智能地識(shí)別圖上繪制的顏色點(diǎn),如紅色、綠色或藍(lán)色的整體顏色。例如,一個(gè)紫色的點(diǎn)可能被認(rèn)為是紅色或藍(lán)色的。我們的無(wú)監(jiān)督學(xué)習(xí)算法將會(huì)學(xué)習(xí)到像這樣的點(diǎn),作為一個(gè)特定的顏色類(lèi)別。我們還將看到運(yùn)行K-Means算法來(lái)聚類(lèi)訓(xùn)練數(shù)據(jù),識(shí)別聚類(lèi)中心,標(biāo)記現(xiàn)有數(shù)據(jù),并預(yù)測(cè)新數(shù)據(jù)的類(lèi)別。
最后,你將看到如何將非監(jiān)督分類(lèi)應(yīng)用于其他類(lèi)型的數(shù)據(jù),包括在特定類(lèi)別下對(duì)股票和債券ETF基金進(jìn)行分類(lèi)。
我們將使用R作為編程語(yǔ)言,當(dāng)然,你也可以使用JavaScript或你所選擇的任何語(yǔ)言作為示例。
在完成本教程之后,你將了解如何將無(wú)人監(jiān)督的機(jī)器學(xué)習(xí)應(yīng)用到各種主題,包括其他數(shù)字?jǐn)?shù)據(jù)、行業(yè)特定主題、自然語(yǔ)言處理,甚至文本中。
一堆漂亮的顏色
讓我們通過(guò)生成一組不同的顏色來(lái)開(kāi)始本教程。
我們都知道,顏色由紅色、綠色和藍(lán)色組成。通過(guò)將這三種顏色組合在一起,我們就可以獲得多種顏色。純紅色是由RGB(255、0、0)的紅色、綠色、藍(lán)色值確定的,同樣地,所有三個(gè)純色值都列在下面。
1rgb(255,0,0)//Red
2rgb(0,255,0)//Green
3rgb(0,0,255)//Blue
不同程度的紅色、綠色和藍(lán)色可以通過(guò)調(diào)整各自的值來(lái)表示。例如,rgb(255、0、255)由大量的紅色和大量的藍(lán)色組成,這就變成了紫色。
我們到底在分類(lèi)什么?
到目前為止,我們已經(jīng)討論了如何通過(guò)組合紅色、綠色和藍(lán)色的值來(lái)生成顏色。現(xiàn)在我們可以創(chuàng)建顏色了,機(jī)器學(xué)習(xí)算法是如何做到這一點(diǎn)的呢?
回想一下,紫色實(shí)際上可以被認(rèn)為是紅色或藍(lán)色。事實(shí)上,因?yàn)樽仙纠募t色和藍(lán)色值都包含最大值rgb(255、0、255),將此顏色標(biāo)記為紅色或藍(lán)色將是正確的。但是,如果我們稍微降低藍(lán)色的值,會(huì)怎么樣呢?
這種顏色在人眼看來(lái)仍然是紫色的。然而,現(xiàn)在它可能更準(zhǔn)確地歸類(lèi)為紅色。
下面是一些關(guān)于顏色如何分組的例子。
1rgb(200,0,150)//Purple Plum=> Red
2rgb(50,199,135)//Sea Green=> Green
3rgb(100,180,255)//Sky Blue=> Blue
有了以上分類(lèi)的概念,我們就可以利用機(jī)器學(xué)習(xí)來(lái)判斷它是否能單獨(dú)識(shí)別這些顏色組。雖然我們知道哪些顏色應(yīng)該是紅色的(在rgb()組合中有較高的紅色值),所以我們來(lái)看看計(jì)算機(jī)是否可以識(shí)別這些顏色組,并精確地將rgb值放置到它們的自然分組中。
考慮顏色
通過(guò)在圖上查看顏色,可以更容易地(更有趣!)來(lái)考慮顏色是如何聚集在一起的。這樣,我們可以在圖上畫(huà)出顏色,用各自的紅色、綠色和藍(lán)色的值將它們組合在一起,并了解這些顏色是如何自然地形成一層的。
生成隨機(jī)顏色
首先,讓我們看看一些可以隨機(jī)生成顏色,并在圖表上繪制它們的代碼。我們需要生成紅色、綠色和藍(lán)色的隨機(jī)值。我們還需要將rgb()值轉(zhuǎn)換為十六進(jìn)制格式,以便呈現(xiàn)圖表上的顏色。幸運(yùn)的是,R語(yǔ)言很容易將rgb轉(zhuǎn)換為十六進(jìn)制,只需調(diào)用以下代碼行:
1rgb(255,100,175, maxColorValue=255)
上述代碼的結(jié)果是?#FF64AF,這是一個(gè)與html兼容的顏色,我們可以在圖表上繪制。
將RGB轉(zhuǎn)換為數(shù)值
除了生成顏色外,我們還需要一種在2D圖表上繪制3D顏色的方法。也就是說(shuō),我們的顏色由紅色,綠色和藍(lán)色的值組成。然而,在圖表上繪制需要x y值。因此,我們需要一種將3D紅、綠、藍(lán)的數(shù)值轉(zhuǎn)換成數(shù)值的方法。
我們可以將顏色轉(zhuǎn)換為數(shù)值,只需將它們各自的紅、綠、藍(lán)的值乘以最大值,并相應(yīng)的進(jìn)行索引。
我們可以使用以下公式:
1(Red*256*256)+
2(Green*256)+
3(Blue)
使用上面的公式,我們得到以下這些示例顏色的值:
1rgb(200,0,150)
2//13107350
3rgb(50,199,135)
4//3327879
5rgb(100,180,255)
6//6599935
現(xiàn)在我們有了生成隨機(jī)顏色的方法并將它們轉(zhuǎn)換為數(shù)值表示,我們可以在圖表上畫(huà)出它們。然后,我們可以用無(wú)監(jiān)督學(xué)習(xí)來(lái)對(duì)它們進(jìn)行分類(lèi),并觀察計(jì)算機(jī)如何決定在顏色之間劃定界限,有效地將每一種顏色組合成一組紅色、綠色或藍(lán)色。注意紅色的顏色如何形成一個(gè)更大的數(shù)值。如果使用y軸來(lái)繪制值,那么紅色就會(huì)被繪制到圖表的頂部。同樣地,藍(lán)色值的值范圍更小,導(dǎo)致它們?cè)趫D表的底部出現(xiàn)。綠色的顏色在中間。
在圖表上繪制顏色
我們可以使用如下所示的R代碼來(lái)生成一組隨機(jī)顏色并將它們轉(zhuǎn)換為數(shù)值表示。
01rgb2Num <-function(data) {
02# Maps RGB colors to a single value.
03result <-sapply(1:nrow(data), function(row) {
04color <-data[row,]
05(color$red*256*256)+(color$green*256)+color$blue
06})
07
08result
09}
10generateColors <-function(n) {
11# Generate a set of random colors.
12colors <-as.data.frame(t(sapply(1:n, function(i) {
13parts <-sample(0:255,3)
14c(red=parts[1], green=parts[2], blue=parts[3],hex=rgb(parts[1], parts[2], parts[3], maxColorValue=255))
15})), stringsAsFactors=F)
16# Convert to numeric values.
17colors$red <-as.numeric(colors$red)
18colors$green <-as.numeric(colors$green)
19colors$blue <-as.numeric(colors$blue)
20
21# Map each color to an x/y-coordinate for easy plotting.
22colors$x <-1:nrow(colors)
23colors$y <-rgb2Num(colors)
24colors
25}
上面的代碼只生成每個(gè)紅色、綠色和藍(lán)色值中0-255的隨機(jī)數(shù)字。然后,它將為每種顏色生成html兼容的顏色的十六進(jìn)制值,并使用前面描述的簡(jiǎn)單公式計(jì)算y軸值。對(duì)于x軸,我們只需要使用顏色的索引(1-1000,對(duì)于1000種生成的顏色)。
下面是訓(xùn)練數(shù)據(jù)的一個(gè)例子,它是通過(guò)運(yùn)行上面的代碼生成的。
01> generateColors(10)
02red green bluehexx??????? y
031186160122#BAA07A? 1 12230778
042402114#280272? 2? 2622066
05312699118#7E6376? 3? 8282998
0641821490#B60E5A? 4 11931226
07520521360#CDD53C? 5 13489468
08690218216#5ADAD8? 6? 5954264
0977537178#4B25B2? 7? 4924850
108268253#1A08FD? 8? 1706237
119886232#0856E8? 9?? 546536
121015873187#9E49BB 10 10373563
你可以看到,我們現(xiàn)在可以通過(guò)使用紅色、綠色和藍(lán)色值生成的x、y值來(lái)輕松地將這些數(shù)據(jù)繪制到圖表上。
美麗的顏色
下面是根據(jù)它們各自的值繪制圖表,隨機(jī)生成的1000種顏色。
圖表中顯示了1000個(gè)隨機(jī)的顏色,由紅色、綠色和藍(lán)色的值組成。
正如你在上面的圖片中所看到的,藍(lán)色的顏色主要是在底部,然后是綠色的顏色。注意綠色的顏色如何融入到藍(lán)色和紅色中,它們?cè)诿總€(gè)邊界移動(dòng)的時(shí)候都使用不同程度的橙色和藍(lán)綠色。在綠色的和紅色的開(kāi)始之間,很難畫(huà)出一條清晰的分界線。同樣地,藍(lán)色和綠色的開(kāi)始和結(jié)束也很難確定。這種類(lèi)型的分類(lèi)是機(jī)器學(xué)習(xí)和人工智能算法的真正優(yōu)勢(shì)。
由于機(jī)器學(xué)習(xí)使用數(shù)據(jù)中的數(shù)值特性來(lái)形成關(guān)聯(lián)和分類(lèi),因此它可以確定一組邊界,以便將顏色分類(lèi)到它們各自的分組或聚類(lèi)中。
更少的顏色與更多的機(jī)器學(xué)習(xí)
用我們的分組公式繪制1000種顏色肯定會(huì)產(chǎn)生美麗的圖像。但是,讓我們考慮一組更小的只有100種顏色的數(shù)據(jù)集。這將使在紅色、綠色和藍(lán)色集群中查看數(shù)據(jù)及其最終分類(lèi)變得更加容易。
下面是我們的訓(xùn)練數(shù)據(jù),由100個(gè)隨機(jī)生成的顏色組成,根據(jù)它們各自的值繪制圖表。
圖表中顯示了100個(gè)隨機(jī)的顏色,由紅色、綠色和藍(lán)色的值組成。
上面的100種顏色和1000種顏色沒(méi)有什么不同。請(qǐng)注意,藍(lán)色的點(diǎn)在圖的底部是如何下降的,中間是綠色和黃色,紅色是指向頂部的點(diǎn)。
讓我們看看如何根據(jù)顏色對(duì)每個(gè)點(diǎn)進(jìn)行分類(lèi)和標(biāo)注來(lái)應(yīng)用無(wú)監(jiān)督的機(jī)器學(xué)習(xí)算法。
使顏色聚集成組
將數(shù)據(jù)聚集到組中最常用的算法是K-Means算法。這種聚類(lèi)算法將數(shù)據(jù)分組到k個(gè)集群中,基于每個(gè)數(shù)據(jù)點(diǎn)的特性與彼此之間的相似程度。我們可以將K-Means聚類(lèi)算法應(yīng)用到顏色點(diǎn)上,根據(jù)它們各自的紅、綠、藍(lán)顏色來(lái)組合它們。K-Means算法首先在數(shù)據(jù)中設(shè)置隨機(jī)的中心點(diǎn)。然后將最接近每個(gè)中心的所有點(diǎn)集中到一個(gè)單獨(dú)的集群中。然后將每個(gè)集群的中心轉(zhuǎn)移到相關(guān)點(diǎn)的中心。最后,我們將所有的點(diǎn)重新分配到最接近的中心,直到每個(gè)集群的中心不再發(fā)生變化(或者變化小于某個(gè)閾值),然后重復(fù)這個(gè)過(guò)程。
這時(shí),無(wú)人監(jiān)督的訓(xùn)練就完成了。
它可以幫助查看K-Means算法的可視化,從而更好地理解這些步驟是如何工作的。
K-Means聚類(lèi)
下面顯示了K-Means無(wú)監(jiān)督學(xué)習(xí)算法步驟的完整清單。
1.確定集群的數(shù)量(即K值)。
對(duì)于選擇集群的數(shù)量,一個(gè)經(jīng)驗(yàn)法則是將數(shù)據(jù)點(diǎn)的數(shù)量除以一半。下面給出了一個(gè)示例。
2.隨機(jī)初始化質(zhì)心(即每個(gè)集群的中心)。
3.將數(shù)據(jù)中的每個(gè)點(diǎn)分配給集群,并將其與最接近的中心放在一起。
4. 將每個(gè)集群的質(zhì)心轉(zhuǎn)移到分配給它的所有點(diǎn)的平均值(中心)。
5重復(fù)步驟3-5,直到質(zhì)心停止移動(dòng),或者點(diǎn)停止交換集群,或者到達(dá)一個(gè)給定的閾值。
下面顯示了用于確定集群的質(zhì)心的示例代碼。
1K=~~(Math.sqrt(points.length*0.5));
計(jì)算質(zhì)心
讓我們把K-Means算法應(yīng)用到顏色數(shù)據(jù)點(diǎn)上,看看集群中心的位置在哪里。通常情況下,你會(huì)嘗試猜測(cè)適當(dāng)數(shù)量的集群來(lái)使用,比如使用上面提到的算法。然而,由于我們知道我們要為數(shù)據(jù)點(diǎn)尋找紅色、綠色或藍(lán)色的分類(lèi),為了這3個(gè)集群組,我們可以將K值定為3。
我們可以在顏色數(shù)據(jù)點(diǎn)的集合上運(yùn)行K-means算法,代碼如下所示。
1# Run kmeans clustering on the data.
2fit <-kmeans(train[,1:3],3, nstart=20)
3train$group <-fit$cluster
在上面的代碼中,請(qǐng)注意,我們只選擇數(shù)據(jù)中的前3列。這對(duì)應(yīng)于紅色列、綠色列和藍(lán)色列,因?yàn)檫@是我們想要進(jìn)行的3個(gè)特性。我們的數(shù)據(jù)集中的其他列對(duì)應(yīng)在繪制圖和繪制顏色的坐標(biāo)上。
第二行代碼簡(jiǎn)單地設(shè)置了集群,在運(yùn)行算法之后,這些集群的每個(gè)數(shù)據(jù)點(diǎn)都被分配到各自的位置。
完成聚類(lèi)后,我們可以在質(zhì)心上查看詳細(xì)的進(jìn)程的結(jié)果。
01K-means clustering with3clusters of sizes24,33,43
02Cluster means:
03red???? green????? blue
04198.1666764.66667189.20833
052164.1818265.0303064.72727
063140.67442196.58140132.20930
07Clustering vector:
08[1]333322333232212133232333212113322333112321233
09[46]322212123231333131231333121112132213132223331
10[91]2323223131
11Within clustersumof squares by cluster:
12[1]182410.6201096.4443809.0
13(between_SS/total_SS=46.1%)
注意,我們的算法已經(jīng)完成了3個(gè)集群,大小分別為24、33和43(總計(jì)為100個(gè)數(shù)據(jù)點(diǎn))。它們表示為分配給每個(gè)集群的顏色點(diǎn)的數(shù)量。因此,24個(gè)數(shù)據(jù)點(diǎn)被分配到第一個(gè)集群,33個(gè)數(shù)據(jù)點(diǎn)到第二個(gè)集群,最后一個(gè)集群是43個(gè)數(shù)據(jù)點(diǎn)。
我們還可以看到每個(gè)集群中每個(gè)特性的平均值。請(qǐng)記住,每個(gè)數(shù)據(jù)點(diǎn)都有3個(gè)特征值(紅色、綠色和藍(lán)色之間的值為0-255),我們已經(jīng)對(duì)3個(gè)集群進(jìn)行了訓(xùn)練。因此,每個(gè)質(zhì)心也將有一個(gè)紅色、綠色和藍(lán)色的值,對(duì)應(yīng)于分配給它們的集群的相關(guān)數(shù)據(jù)點(diǎn)的平均值。當(dāng)我們?cè)趫D上畫(huà)出質(zhì)心時(shí),這個(gè)看起來(lái)會(huì)更直觀。
在這一點(diǎn)上,我們?cè)跀?shù)據(jù)上有3個(gè)受過(guò)訓(xùn)練的集群。我們所有的數(shù)據(jù)點(diǎn)都被分配到一個(gè)集群中。然而,集群實(shí)際上并沒(méi)有一個(gè)“名稱(chēng)”。
我們不能叫第一個(gè)集群為“我們的紅色組”,因?yàn)槲覀冞€不知道已經(jīng)分配給它的數(shù)據(jù)類(lèi)型是什么樣的(但實(shí)際上,我們可以窺視質(zhì)心的平均值,猜測(cè)每個(gè)集群的名稱(chēng);例如,第一個(gè)集群平均值rgb(98, 64, 189)這是紫色的顏色或者也可以被認(rèn)為是藍(lán)色的;同樣的第二個(gè)集群是rgb(164, 65, 64)這是紅色的;最后一個(gè)集群是rgb(140, 196, 132)這是綠色的)。
讓我們?cè)趫D上畫(huà)出每個(gè)群集的質(zhì)心,就在顏色點(diǎn)上。這將讓我們了解每個(gè)集群中心的位置,并為我們提供了一種正確方式,從而對(duì)集群進(jìn)行命名。
集群中心標(biāo)識(shí)在它們各自的位置顯示在圖中顏色。
在上圖中,我們?cè)陬伾珨?shù)據(jù)點(diǎn)上繪制了3個(gè)經(jīng)過(guò)訓(xùn)練的集群的中心。
正如我們從集群輸出結(jié)果中所預(yù)測(cè)的那樣,集群1實(shí)際上位于圖底部的藍(lán)色范圍內(nèi)。集群2在圖上是最高的,對(duì)應(yīng)紅色值。集群3位于中間,對(duì)應(yīng)綠色值。此時(shí),我們可以將集群命名為以下內(nèi)容:
1Cluster1-"Blue Group"
2Cluster2-"Red Group"
3Cluster3-"Green Group"
將顏色分類(lèi)為一個(gè)集群
讓我們看一下每個(gè)顏色數(shù)據(jù)點(diǎn),看看它們被分配給哪個(gè)集群比較合適。回想一下,在訓(xùn)練之后,我們?cè)O(shè)置了每個(gè)數(shù)據(jù)點(diǎn)分配的集群號(hào)。通過(guò)這種方式,我們的訓(xùn)練集現(xiàn)在有了一個(gè)額外的列,包含了分配的集群號(hào)。使用這個(gè)數(shù)據(jù)段,我們可以在圖上繪制每個(gè)數(shù)據(jù)點(diǎn)的集群,如下所示。
在將非監(jiān)督學(xué)習(xí)應(yīng)用到數(shù)據(jù)集之后,顏色被標(biāo)記為已分配的集群。
上面的圖像將每個(gè)數(shù)據(jù)點(diǎn)與指定的集群一起標(biāo)記。我們已經(jīng)在圖上繪制了集群中心,但現(xiàn)在我們也展示了每個(gè)點(diǎn)的實(shí)際賦值。
請(qǐng)注意,底部的大多數(shù)藍(lán)色點(diǎn)被分配給集群1(“藍(lán)色組”)。在圖的底部也有幾個(gè)點(diǎn)被分配給集群3(“綠色組”)。記住,我們要根據(jù)一個(gè)簡(jiǎn)單的數(shù)學(xué)公式,把原始的紅,綠,和藍(lán)色的值轉(zhuǎn)換成數(shù)值。但是,集群的運(yùn)作方式不同,通過(guò)計(jì)算平均值到每個(gè)集群的中心。
例如,查看圖表底部的點(diǎn),它們被標(biāo)記為3(“綠色組”)。它們的顏色從綠色、藍(lán)色到青色,再到藍(lán)綠色,所有的顏色都包括綠色和藍(lán)色。在藍(lán)色或綠色的組中對(duì)這些點(diǎn)進(jìn)行分類(lèi)是有意義的。
同樣地,在圖的頂部有一些點(diǎn)沒(méi)有被分配到集群2(“紅色組”),而是被分配到集群1或3。例如,分配給集群3的一些點(diǎn)是黃色的。它們被繪制在圖表的頂部,因?yàn)樗鼈兊臄?shù)值來(lái)自于我們的簡(jiǎn)單公式,但是它們被分組到“綠色”集群中,因?yàn)樗鼈兊膔gb值仍然在訓(xùn)練的“綠色”組的范圍內(nèi)。畢竟,黃色就在綠色的旁邊。
如果我們?cè)谥付ǖ募褐兄苯永L制每一種顏色,那么在每個(gè)顏色的坐標(biāo)和指定的顏色的位置上的差異就會(huì)變得更加明顯。這將允許我們根據(jù)所分配的集群來(lái)查看每一種顏色,并繪制在一個(gè)單線上。
將顏色分組到它們的集群中
讓我們看看哪個(gè)顏色點(diǎn)被分配到哪個(gè)更直觀的地方。根據(jù)我們對(duì)紅、綠、藍(lán)的簡(jiǎn)單數(shù)值計(jì)算,我們可以根據(jù)所指定的集群來(lái)繪制數(shù)據(jù)點(diǎn),而不是根據(jù)y軸的簡(jiǎn)單數(shù)值計(jì)算來(lái)繪制數(shù)據(jù)點(diǎn)。我們將x軸沿著一條直線來(lái)繪制每個(gè)點(diǎn),并將其指定的集群用于y軸。
這個(gè)圖表顯示了被分配的集群分組的顏色,每個(gè)集群都表示在y軸上。更明顯的展示了這些顏色是如何根據(jù)紅、綠、藍(lán)的顏色來(lái)聚類(lèi)的。
上圖顯示了在訓(xùn)練過(guò)程中,顏色是如何組合在一起的。當(dāng)然,所有的藍(lán)色值都被分組到集群1(“藍(lán)色組”)中。當(dāng)我們使用簡(jiǎn)單的y軸的數(shù)值計(jì)算時(shí),這包括了紫色和粉紅色的顏色(之前可能已經(jīng)在圖的頂部畫(huà)過(guò)了。[在紅色區(qū)域中])。
同樣地,紅色和黃色是在集群2(“紅色組”)中繪制的。包括棕色,甚至一些黃綠色。最后,綠色,淡藍(lán)色,甚至一些更接近綠色的淺粉色,在第三組(綠色組)中被繪制出來(lái)。
在新數(shù)據(jù)上預(yù)測(cè)
既然我們已經(jīng)用K-means聚類(lèi)訓(xùn)練了無(wú)監(jiān)督機(jī)器學(xué)習(xí)算法,我們就有了一種將顏色數(shù)據(jù)點(diǎn)標(biāo)記為特定集群的方法。我們將每個(gè)集群分別標(biāo)記為“藍(lán)色組”、“紅色組”和“綠色組”。
現(xiàn)在最大的測(cè)試是預(yù)測(cè)一個(gè)算法以前從未見(jiàn)過(guò)的新的數(shù)據(jù)點(diǎn)的分配組。它能預(yù)測(cè)出顏色點(diǎn)的正確顏色組嗎?
讓我們生成三個(gè)新的隨機(jī)顏色點(diǎn)。然后,我們將要求模型對(duì)每個(gè)集群進(jìn)行分類(lèi)。
1test <-generateColors(3)
上面的代碼生成3個(gè)新顏色,如下所示。
1red green bluehexx??????? y
2123217252#E811FC 1 15208956
3286109216#566DD8 2? 5664216
4367219216#43DBD8 3? 4447192
使用我們已經(jīng)訓(xùn)練過(guò)的模型(例如:計(jì)算出的質(zhì)心),我們可以確定每個(gè)點(diǎn)將被分配到哪個(gè)集群。在R語(yǔ)言中,我們可以使用kcaa庫(kù)來(lái)預(yù)測(cè)已經(jīng)經(jīng)過(guò)訓(xùn)練的k-means算法,如下所示。
1# Cast the k-means model to be of type kcaa, so we can use the predict method.
2fit2 <-as.kcca(fit, data=train[,1:3])
3# Predict the assigned color by mapping the color to a cluster.
4group <-predict(model, newdata=data[,1:3])
5# Assign the label of the cluster.
6data$label <-sapply(1:nrow(data), function(row) {
7centroids[centroids$group==data[row,'group'], ]$label
8})
在上面的代碼中,我們只是簡(jiǎn)單地將k-means模型轉(zhuǎn)換為kcaa類(lèi)型,這樣我們就可以調(diào)用預(yù)測(cè)方法。在轉(zhuǎn)型之后,我們可以調(diào)用預(yù)測(cè),通過(guò)我們已經(jīng)訓(xùn)練過(guò)的模型,以及數(shù)據(jù)點(diǎn)來(lái)預(yù)測(cè)。在預(yù)測(cè)了集群號(hào)之后,我們可以將給定的集群名稱(chēng)分配給每個(gè)數(shù)據(jù)點(diǎn),以便在預(yù)測(cè)的數(shù)據(jù)上進(jìn)行更易于理解的集群任務(wù)。
我們得到以下數(shù)據(jù)的結(jié)果。
1red green bluehexx??????? y group label
212415211#F1340B 1 15807499???? 2?? red
3280187139#50BB8B 2? 5290891???? 3 green
433415194#220FC2 3? 2232258???? 1? blue
注意,第一個(gè)點(diǎn)被分配到集群2(“紅色組”)。這很容易理解,因?yàn)榧t色值是最大的值。第二個(gè)點(diǎn)被分配給集群3(“綠色組”),并且確定的是,它的綠色值是最大的值。最后一個(gè)點(diǎn)被分配給集群1(“藍(lán)色組”),再一次因?yàn)樗乃{(lán)色值是最大的值。
在測(cè)試集中,每一種新顏色都可以預(yù)測(cè)一個(gè)類(lèi)別主題。
上面的圖像顯示了三個(gè)新的數(shù)據(jù)點(diǎn)的預(yù)測(cè)的集群組。這些隨機(jī)生成的顏色(紅、綠、藍(lán))分別被分配到紅、綠、藍(lán)兩組。
結(jié)語(yǔ)
聚類(lèi)顏色是一種簡(jiǎn)潔的的方法,可以直觀地理解人工智能中無(wú)監(jiān)督的機(jī)器學(xué)習(xí)是如何工作的。
然而,我們可以超越這個(gè)主題,將無(wú)監(jiān)督的學(xué)習(xí)轉(zhuǎn)向更多真實(shí)的場(chǎng)景中。