介紹
人工智能學(xué)習(xí)通常由兩種主要方法組成:監(jiān)督學(xué)習(xí)和無監(jiān)督的學(xué)習(xí)。監(jiān)督學(xué)習(xí)包括使用現(xiàn)有的訓(xùn)練集洗做,這種訓(xùn)練集由預(yù)先標(biāo)記的分類數(shù)據(jù)列組成荐糜。機(jī)器學(xué)習(xí)算法會(huì)發(fā)現(xiàn)數(shù)據(jù)的特征和這一列的標(biāo)簽(或輸出)之間的關(guān)聯(lián)局服。通過這種方式,機(jī)器學(xué)習(xí)模型可以預(yù)測(cè)它從來沒有公開過的新的數(shù)據(jù)列袍嬉,并且根據(jù)它的訓(xùn)練數(shù)據(jù)返回一個(gè)精確的分類。在你已經(jīng)有了預(yù)先分類的數(shù)據(jù)的情況下灶平,監(jiān)督學(xué)習(xí)對(duì)于大數(shù)據(jù)集是非常有用的伺通。
在另一種是無監(jiān)督的學(xué)習(xí)。使用這種學(xué)習(xí)方式逢享,數(shù)據(jù)不需要在訓(xùn)練集中進(jìn)行預(yù)先標(biāo)記或預(yù)分類罐监,相反,機(jī)器學(xué)習(xí)算法在數(shù)據(jù)的特征中發(fā)現(xiàn)相似的特征和關(guān)聯(lián)瞒爬,并將它們分組在一起弓柱。例如,根據(jù)某些特性侧但,兩個(gè)數(shù)據(jù)可能會(huì)出現(xiàn)類似的情況矢空,因此會(huì)被分組到同一個(gè)框中(更正式地稱為“集群”)。通過將相似的數(shù)據(jù)聚集在一起禀横,就可以預(yù)測(cè)出新列之前從未見過的數(shù)據(jù)屁药,并獲得一個(gè)準(zhǔn)確的分類。不受監(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í)的方法相似,無監(jiān)督學(xué)習(xí)和聚類可以利用訓(xùn)練數(shù)據(jù)來形成分組七问。當(dāng)監(jiān)督學(xué)習(xí)使用預(yù)先標(biāo)記的訓(xùn)練集時(shí)蜓耻,無監(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ù)集有勾,無監(jiān)督學(xué)習(xí)就有潛力在機(jī)器學(xué)習(xí)和人工智能結(jié)果方面取得進(jìn)展。
在本教程中古程,我們將演示使用無監(jiān)督學(xué)習(xí)和集群來智能地識(shí)別圖上繪制的顏色點(diǎn)蔼卡,如紅色、綠色或藍(lán)色的整體顏色挣磨。例如雇逞,一個(gè)紫色的點(diǎn)可能被認(rèn)為是紅色或藍(lán)色的。我們的無監(jiān)督學(xué)習(xí)算法將會(huì)學(xué)習(xí)到像這樣的點(diǎn)茁裙,作為一個(gè)特定的顏色類別塘砸。我們還將看到運(yùn)行K-Means算法來聚類訓(xùn)練數(shù)據(jù),識(shí)別聚類中心晤锥,標(biāo)記現(xiàn)有數(shù)據(jù)掉蔬,并預(yù)測(cè)新數(shù)據(jù)的類別。
最后矾瘾,你將看到如何將非監(jiān)督分類應(yīng)用于其他類型的數(shù)據(jù)女轿,包括在特定類別下對(duì)股票和債券ETF基金進(jìn)行分類。
我們將使用R作為編程語言壕翩,當(dāng)然蛉迹,你也可以使用JavaScript或你所選擇的任何語言作為示例。
在完成本教程之后戈泼,你將了解如何將無人監(jiān)督的機(jī)器學(xué)習(xí)應(yīng)用到各種主題婿禽,包括其他數(shù)字?jǐn)?shù)據(jù)、行業(yè)特定主題大猛、自然語言處理扭倾,甚至文本中。
一堆漂亮的顏色
讓我們通過生成一組不同的顏色來開始本教程挽绩。
我們都知道膛壹,顏色由紅色、綠色和藍(lán)色組成。通過將這三種顏色組合在一起模聋,我們就可以獲得多種顏色肩民。純紅色是由RGB(255、0链方、0)的紅色持痰、綠色、藍(lán)色值確定的祟蚀,同樣地工窍,所有三個(gè)純色值都列在下面。
1rgb(255,0,0)//Red
2rgb(0,255,0)//Green
3rgb(0,0,255)//Blue
不同程度的紅色前酿、綠色和藍(lán)色可以通過調(diào)整各自的值來表示患雏。例如,rgb(255罢维、0淹仑、255)由大量的紅色和大量的藍(lán)色組成,這就變成了紫色肺孵。
我們到底在分類什么?
到目前為止匀借,我們已經(jīng)討論了如何通過組合紅色、綠色和藍(lán)色的值來生成顏色⌒郏現(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ì)怎么樣呢?
這種顏色在人眼看來仍然是紫色的杖爽。然而敲董,現(xiàn)在它可能更準(zhǔn)確地歸類為紅色。
下面是一些關(guān)于顏色如何分組的例子慰安。
1rgb(200,0,150)//Purple Plum=> Red
2rgb(50,199,135)//Sea Green=> Green
3rgb(100,180,255)//Sky Blue=> Blue
有了以上分類的概念腋寨,我們就可以利用機(jī)器學(xué)習(xí)來判斷它是否能單獨(dú)識(shí)別這些顏色組。雖然我們知道哪些顏色應(yīng)該是紅色的(在rgb()組合中有較高的紅色值)化焕,所以我們來看看計(jì)算機(jī)是否可以識(shí)別這些顏色組萄窜,并精確地將rgb值放置到它們的自然分組中。
考慮顏色
通過在圖上查看顏色,可以更容易地(更有趣查刻!)來考慮顏色是如何聚集在一起的键兜。這樣,我們可以在圖上畫出顏色穗泵,用各自的紅色普气、綠色和藍(lán)色的值將它們組合在一起,并了解這些顏色是如何自然地形成一層的佃延。
生成隨機(jī)顏色
首先棋电,讓我們看看一些可以隨機(jī)生成顏色,并在圖表上繪制它們的代碼苇侵。我們需要生成紅色赶盔、綠色和藍(lán)色的隨機(jī)值。我們還需要將rgb()值轉(zhuǎn)換為十六進(jìn)制格式榆浓,以便呈現(xiàn)圖表上的顏色于未。幸運(yùn)的是,R語言很容易將rgb轉(zhuǎn)換為十六進(jìn)制陡鹃,只需調(diào)用以下代碼行:
1rgb(255,100,175, maxColorValue=255)
上述代碼的結(jié)果是?#FF64AF烘浦,這是一個(gè)與html兼容的顏色,我們可以在圖表上繪制萍鲸。
將RGB轉(zhuǎn)換為數(shù)值
除了生成顏色外闷叉,我們還需要一種在2D圖表上繪制3D顏色的方法。也就是說脊阴,我們的顏色由紅色握侧,綠色和藍(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ù)值表示棠笑,我們可以在圖表上畫出它們梦碗。然后,我們可以用無監(jiān)督學(xué)習(xí)來對(duì)它們進(jìn)行分類,并觀察計(jì)算機(jī)如何決定在顏色之間劃定界限洪规,有效地將每一種顏色組合成一組紅色印屁、綠色或藍(lán)色。注意紅色的顏色如何形成一個(gè)更大的數(shù)值斩例。如果使用y軸來繪制值雄人,那么紅色就會(huì)被繪制到圖表的頂部。同樣地念赶,藍(lán)色值的值范圍更小础钠,導(dǎo)致它們?cè)趫D表的底部出現(xiàn)。綠色的顏色在中間叉谜。
在圖表上繪制顏色
我們可以使用如下所示的R代碼來生成一組隨機(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è)例子袁稽,它是通過運(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)在可以通過使用紅色推汽、綠色和藍(lán)色值生成的x、y值來輕松地將這些數(shù)據(jù)繪制到圖表上闻葵。
美麗的顏色
下面是根據(jù)它們各自的值繪制圖表民泵,隨機(jī)生成的1000種顏色。
圖表中顯示了1000個(gè)隨機(jī)的顏色槽畔,由紅色、綠色和藍(lán)色的值組成胁编。
正如你在上面的圖片中所看到的厢钧,藍(lán)色的顏色主要是在底部,然后是綠色的顏色嬉橙。注意綠色的顏色如何融入到藍(lán)色和紅色中早直,它們?cè)诿總€(gè)邊界移動(dòng)的時(shí)候都使用不同程度的橙色和藍(lán)綠色。在綠色的和紅色的開始之間市框,很難畫出一條清晰的分界線霞扬。同樣地,藍(lán)色和綠色的開始和結(jié)束也很難確定。這種類型的分類是機(jī)器學(xué)習(xí)和人工智能算法的真正優(yōu)勢(shì)喻圃。
由于機(jī)器學(xué)習(xí)使用數(shù)據(jù)中的數(shù)值特性來形成關(guān)聯(lián)和分類萤彩,因此它可以確定一組邊界,以便將顏色分類到它們各自的分組或聚類中斧拍。
更少的顏色與更多的機(jī)器學(xué)習(xí)
用我們的分組公式繪制1000種顏色肯定會(huì)產(chǎn)生美麗的圖像雀扶。但是,讓我們考慮一組更小的只有100種顏色的數(shù)據(jù)集肆汹。這將使在紅色愚墓、綠色和藍(lán)色集群中查看數(shù)據(jù)及其最終分類變得更加容易。
下面是我們的訓(xùn)練數(shù)據(jù)昂勉,由100個(gè)隨機(jī)生成的顏色組成浪册,根據(jù)它們各自的值繪制圖表。
圖表中顯示了100個(gè)隨機(jī)的顏色岗照,由紅色议经、綠色和藍(lán)色的值組成。
上面的100種顏色和1000種顏色沒有什么不同谴返。請(qǐng)注意煞肾,藍(lán)色的點(diǎn)在圖的底部是如何下降的,中間是綠色和黃色嗓袱,紅色是指向頂部的點(diǎn)籍救。
讓我們看看如何根據(jù)顏色對(duì)每個(gè)點(diǎn)進(jìn)行分類和標(biāo)注來應(yīng)用無監(jiān)督的機(jī)器學(xué)習(xí)算法。
使顏色聚集成組
將數(shù)據(jù)聚集到組中最常用的算法是K-Means算法渠抹。這種聚類算法將數(shù)據(jù)分組到k個(gè)集群中蝙昙,基于每個(gè)數(shù)據(jù)點(diǎn)的特性與彼此之間的相似程度。我們可以將K-Means聚類算法應(yīng)用到顏色點(diǎn)上梧却,根據(jù)它們各自的紅奇颠、綠、藍(lán)顏色來組合它們放航。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è)過程吨铸。
這時(shí),無人監(jiān)督的訓(xùn)練就完成了祖秒。
它可以幫助查看K-Means算法的可視化诞吱,從而更好地理解這些步驟是如何工作的舟奠。
K-Means聚類
下面顯示了K-Means無監(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ù)量的集群來使用卵史,比如使用上面提到的算法。然而搜立,由于我們知道我們要為數(shù)據(jù)點(diǎn)尋找紅色以躯、綠色或藍(lán)色的分類,為了這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)都被分配到各自的位置。
完成聚類后匈织,我們可以在質(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上畫出質(zhì)心時(shí)题禀,這個(gè)看起來會(huì)更直觀。
在這一點(diǎn)上膀捷,我們?cè)跀?shù)據(jù)上有3個(gè)受過訓(xùn)練的集群迈嘹。我們所有的數(shù)據(jù)點(diǎn)都被分配到一個(gè)集群中。然而担孔,集群實(shí)際上并沒有一個(gè)“名稱”江锨。
我們不能叫第一個(gè)集群為“我們的紅色組”,因?yàn)槲覀冞€不知道已經(jīng)分配給它的數(shù)據(jù)類型是什么樣的(但實(shí)際上,我們可以窺視質(zhì)心的平均值,猜測(cè)每個(gè)集群的名稱;例如,第一個(gè)集群平均值rgb(98, 64, 189)這是紫色的顏色或者也可以被認(rèn)為是藍(lán)色的;同樣的第二個(gè)集群是rgb(164, 65, 64)這是紅色的;最后一個(gè)集群是rgb(140, 196, 132)這是綠色的)。
讓我們?cè)趫D上畫出每個(gè)群集的質(zhì)心,就在顏色點(diǎn)上沥邻。這將讓我們了解每個(gè)集群中心的位置它浅,并為我們提供了一種正確方式,從而對(duì)集群進(jìn)行命名挑豌。
集群中心標(biāo)識(shí)在它們各自的位置顯示在圖中顏色。
在上圖中墩崩,我們?cè)陬伾珨?shù)據(jù)點(diǎn)上繪制了3個(gè)經(jīng)過訓(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"
將顏色分類為一個(gè)集群
讓我們看一下每個(gè)顏色數(shù)據(jù)點(diǎn),看看它們被分配給哪個(gè)集群比較合適吹害∶荆回想一下,在訓(xùn)練之后它呀,我們?cè)O(shè)置了每個(gè)數(shù)據(jù)點(diǎn)分配的集群號(hào)螺男。通過這種方式,我們的訓(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)作方式不同补君,通過計(jì)算平均值到每個(gè)集群的中心。
例如昧互,查看圖表底部的點(diǎn)挽铁,它們被標(biāo)記為3(“綠色組”)。它們的顏色從綠色敞掘、藍(lán)色到青色叽掘,再到藍(lán)綠色,所有的顏色都包括綠色和藍(lán)色玖雁。在藍(lán)色或綠色的組中對(duì)這些點(diǎn)進(jìn)行分類是有意義的更扁。
同樣地,在圖的頂部有一些點(diǎn)沒有被分配到集群2(“紅色組”),而是被分配到集群1或3疯潭。例如赊堪,分配給集群3的一些點(diǎn)是黃色的面殖。它們被繪制在圖表的頂部竖哩,因?yàn)樗鼈兊臄?shù)值來自于我們的簡(jiǎn)單公式,但是它們被分組到“綠色”集群中脊僚,因?yàn)樗鼈兊膔gb值仍然在訓(xùn)練的“綠色”組的范圍內(nèi)相叁。畢竟,黃色就在綠色的旁邊辽幌。
如果我們?cè)谥付ǖ募褐兄苯永L制每一種顏色增淹,那么在每個(gè)顏色的坐標(biāo)和指定的顏色的位置上的差異就會(huì)變得更加明顯。這將允許我們根據(jù)所分配的集群來查看每一種顏色乌企,并繪制在一個(gè)單線上虑润。
將顏色分組到它們的集群中
讓我們看看哪個(gè)顏色點(diǎn)被分配到哪個(gè)更直觀的地方。根據(jù)我們對(duì)紅加酵、綠拳喻、藍(lán)的簡(jiǎn)單數(shù)值計(jì)算,我們可以根據(jù)所指定的集群來繪制數(shù)據(jù)點(diǎn)猪腕,而不是根據(jù)y軸的簡(jiǎn)單數(shù)值計(jì)算來繪制數(shù)據(jù)點(diǎn)冗澈。我們將x軸沿著一條直線來繪制每個(gè)點(diǎn),并將其指定的集群用于y軸陋葡。
這個(gè)圖表顯示了被分配的集群分組的顏色亚亲,每個(gè)集群都表示在y軸上。更明顯的展示了這些顏色是如何根據(jù)紅腐缤、綠捌归、藍(lán)的顏色來聚類的。
上圖顯示了在訓(xùn)練過程中岭粤,顏色是如何組合在一起的惜索。當(dāng)然,所有的藍(lán)色值都被分組到集群1(“藍(lán)色組”)中绍在。當(dāng)我們使用簡(jiǎn)單的y軸的數(shù)值計(jì)算時(shí)门扇,這包括了紫色和粉紅色的顏色(之前可能已經(jīng)在圖的頂部畫過了。[在紅色區(qū)域中])偿渡。
同樣地臼寄,紅色和黃色是在集群2(“紅色組”)中繪制的。包括棕色溜宽,甚至一些黃綠色吉拳。最后,綠色适揉,淡藍(lán)色留攒,甚至一些更接近綠色的淺粉色煤惩,在第三組(綠色組)中被繪制出來。
在新數(shù)據(jù)上預(yù)測(cè)
既然我們已經(jīng)用K-means聚類訓(xùn)練了無監(jiān)督機(jī)器學(xué)習(xí)算法炼邀,我們就有了一種將顏色數(shù)據(jù)點(diǎn)標(biāo)記為特定集群的方法魄揉。我們將每個(gè)集群分別標(biāo)記為“藍(lán)色組”、“紅色組”和“綠色組”拭宁。
現(xiàn)在最大的測(cè)試是預(yù)測(cè)一個(gè)算法以前從未見過的新的數(shù)據(jù)點(diǎn)的分配組洛退。它能預(yù)測(cè)出顏色點(diǎn)的正確顏色組嗎?
讓我們生成三個(gè)新的隨機(jī)顏色點(diǎn)。然后杰标,我們將要求模型對(duì)每個(gè)集群進(jìn)行分類兵怯。
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)練過的模型(例如:計(jì)算出的質(zhì)心)媒区,我們可以確定每個(gè)點(diǎn)將被分配到哪個(gè)集群。在R語言中掸犬,我們可以使用kcaa庫(kù)來預(yù)測(cè)已經(jīng)經(jīng)過訓(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類型噪服,這樣我們就可以調(diào)用預(yù)測(cè)方法。在轉(zhuǎn)型之后胜茧,我們可以調(diào)用預(yù)測(cè)粘优,通過我們已經(jīng)訓(xùn)練過的模型,以及數(shù)據(jù)點(diǎn)來預(yù)測(cè)呻顽。在預(yù)測(cè)了集群號(hào)之后雹顺,我們可以將給定的集群名稱分配給每個(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è)類別主題。
上面的圖像顯示了三個(gè)新的數(shù)據(jù)點(diǎn)的預(yù)測(cè)的集群組下翎。這些隨機(jī)生成的顏色(紅缤言、綠、藍(lán))分別被分配到紅视事、綠胆萧、藍(lán)兩組。
結(jié)語
聚類顏色是一種簡(jiǎn)潔的的方法郑口,可以直觀地理解人工智能中無監(jiān)督的機(jī)器學(xué)習(xí)是如何工作的鸳碧。
然而,我們可以超越這個(gè)主題犬性,將無監(jiān)督的學(xué)習(xí)轉(zhuǎn)向更多真實(shí)的場(chǎng)景中。