最近的娛樂(lè)之一是自學(xué)R,當(dāng)讀到kmeans例子時(shí)炫隶,意識(shí)到一個(gè)很有趣的事情:
這里可以寫(xiě)一篇詮釋“知識(shí)體系只是用不同方式來(lái)表達(dá)同一個(gè)事實(shí)而已”的短文咳燕。
本文分成社科和自然科學(xué)兩個(gè)知識(shí)體系撼泛,首先是社科:
心理學(xué)和行為經(jīng)濟(jì)學(xué)有個(gè)說(shuō)法叫做“錨點(diǎn)效應(yīng)”麦撵,證明方法類(lèi)似這樣:
將人群分組ab測(cè)試,a組展示一個(gè)東西讓你估計(jì)是否值100搏屑,并且給一個(gè)估計(jì)數(shù)争涌。b組直接給估計(jì)數(shù)。
然后實(shí)驗(yàn)結(jié)果是被問(wèn)過(guò)100的組辣恋,估計(jì)的平均數(shù)更接近100亮垫。
分析原因模软,大致是因?yàn)槿说母兄芰?duì)于“絕對(duì)值”是不敏感的,對(duì)于“比較”是敏感的饮潦,說(shuō)白了就是無(wú)論你多差還是多好燃异,永遠(yuǎn)都有一個(gè)“鄰居家的孩子”如何如何,只對(duì)比继蜡,不看絕對(duì)值回俐。
再舉個(gè)不恰當(dāng)例子可能是,當(dāng)你是一群瞪羚里的一員稀并,一起被獵豹追仅颇,那么你跑的快不快并不重要,重要的是碘举,你是不是最慢的那一個(gè)忘瓦。因此“重視對(duì)比,忽略絕對(duì)值”的本能引颈,可以理解為是一種達(dá)爾文自然選擇的結(jié)果--雖然我也不太信達(dá)爾文政冻。
回到錨點(diǎn)話題,既然人類(lèi)天性就依賴對(duì)比线欲,尋找對(duì)比,那么在毫無(wú)東西可對(duì)比的情況下汽摹,一旦先入為主李丰,心理上就會(huì)不自禁地將哪怕毫無(wú)關(guān)系的東西當(dāng)作比較的出發(fā)點(diǎn),也就因此導(dǎo)致結(jié)果的不客觀逼泣。
這個(gè)理論可以廣泛用于產(chǎn)品定價(jià)趴泌,面試/相親技巧等,在類(lèi)似怪誕行為學(xué)拉庶,魔鬼經(jīng)濟(jì)學(xué)這些典型的機(jī)場(chǎng)讀物里經(jīng)呈茹荆看到,我們知道投資人/老板是坐飛機(jī)最多的氏仗,被影響也就最深吉捶,他們最?lèi)?ài)問(wèn)行業(yè)數(shù)據(jù)是多少,歷史同期是多少皆尔,說(shuō)白了就是在努力掙脫別人的錨點(diǎn)呐舔,盡可能保證獨(dú)立思考。
這些論調(diào)往往稱為人類(lèi)的心理和行為具備非理性的一面慷蠕,理性人應(yīng)該根據(jù)絕對(duì)值去做理性的判斷珊拼,好玩的是,下面我們嘗試用理性的方法來(lái)解釋一下如上內(nèi)容流炕。
現(xiàn)在開(kāi)始自然科學(xué)部分:
最簡(jiǎn)單的分類(lèi)算法kmeans澎现,目標(biāo)是將一堆雜亂的數(shù)據(jù)點(diǎn)進(jìn)行分類(lèi)仅胞,步驟是:
首先隨意選取類(lèi)別中心點(diǎn),將所有其他點(diǎn)歸到距離最近的中心點(diǎn)剑辫,形成幾個(gè)分類(lèi)干旧,當(dāng)然這時(shí)候是完全亂分的。
然后重新計(jì)算每個(gè)分類(lèi)群的距離中心點(diǎn)揭斧,再打亂所有的數(shù)據(jù)點(diǎn)莱革,根據(jù)新的中心再次按照距離歸類(lèi),第二次的歸類(lèi)中心點(diǎn)顯然比第一次亂來(lái)的會(huì)好很多讹开,再來(lái)一次會(huì)更好盅视,但好的幅度會(huì)減小。
以此類(lèi)推旦万,不斷重復(fù)闹击,新舊中心點(diǎn)的距離會(huì)逐漸減少,最后達(dá)到預(yù)設(shè)的最小值成艘,完成分類(lèi)赏半。
圖示比較能看清楚整個(gè)過(guò)程。
讓我們閉上眼睛體會(huì)一下淆两,這正是“先入為主”的錨點(diǎn)断箫,當(dāng)我們想對(duì)一堆雜亂的點(diǎn)進(jìn)行分類(lèi),但毫無(wú)頭緒的時(shí)候秋冰,如果有誰(shuí)拋出來(lái)任何一個(gè)分法仲义,無(wú)論是合理還是隨機(jī),也無(wú)論是真隨機(jī)還是假隨機(jī)剑勾,我們都可以根據(jù)這些預(yù)設(shè)錨點(diǎn)埃撵,不斷優(yōu)化分類(lèi)--也就是重新計(jì)算距離,來(lái)逐漸逼近最合理的分類(lèi)虽另。
這個(gè)幾乎是人工智能入門(mén)中入門(mén)的簡(jiǎn)單算法暂刘,某種程度上還原了人類(lèi)思考的模式,不僅可以解釋心理錨點(diǎn)捂刺,甚至還可以量化計(jì)算上文里心理學(xué)實(shí)驗(yàn)的結(jié)果谣拣。
更為奇妙的是,kmeans迭代距離分類(lèi)算法族展,還具備對(duì)于極端值敏感芝发,對(duì)于非凸形狀敏感,即“容易被帶溝里去”的特點(diǎn)苛谷,這和心理錨點(diǎn)更加不謀而和辅鲸。
唯一的不同是,現(xiàn)實(shí)生活中我們沒(méi)有太多機(jī)會(huì)可以迭代重復(fù)腹殿,并不是所有第一眼誤解都有機(jī)會(huì)解釋独悴,人生苦短例书,一個(gè)偏離較大的”初始錨點(diǎn)“或許能帶歪半生。
anyway刻炒,這就是本文想說(shuō)的:知識(shí)體系只是用不同方式來(lái)表達(dá)同一個(gè)事實(shí)而已决采,哪怕外在看起來(lái)是如此不相干,走下去的指向坟奥,卻是殊途同歸树瞭。
最后隨意寫(xiě)寫(xiě),用程序的思考模式描述一下kmeans爱谁,參數(shù)完全沒(méi)設(shè)計(jì)晒喷,看個(gè)感覺(jué)。
可以對(duì)比開(kāi)頭的語(yǔ)言访敌、邏輯的描述凉敲,體會(huì)一下編程思維和正常人思維的不同,是一種從原材料寺旺、零件開(kāi)始重新建造世界的感覺(jué)爷抓。
而從社科的角度無(wú)論理解、領(lǐng)悟阻塑、思辨的多深刻蓝撇,也完全比不上用代碼,像砌墻一樣實(shí)現(xiàn)一遍陈莽,來(lái)的感受徹骨唉地,這是怎么說(shuō)呢,一種“形而下”天然優(yōu)于“形而上”的掌控感传透。
//算距離,這里可以改到n維极颓,btw如果認(rèn)不出的人請(qǐng)回憶一下勾股定理
getDistance(){
d=sqrt((x1-x2)^2+(y1-y2)^2)
return d
}
//歸到某類(lèi)
getCluster(){
tmp給一個(gè)極大值
for (類(lèi)別id++){
if ((getDistance(x1,y1,類(lèi)別中心點(diǎn)x,類(lèi)別中心點(diǎn)y) < tmp)
label=該類(lèi)別id
}
return label
}
//取類(lèi)中心
getMeans(){
for (類(lèi)別內(nèi)所有點(diǎn)遍歷){
取距離means
}
根據(jù)mean距離朱盐,任取三個(gè)點(diǎn)算出新中心點(diǎn)x'y'
return 類(lèi)別中心點(diǎn)x',類(lèi)別中心點(diǎn)y'
}
//類(lèi)中心偏移程度,抽出來(lái)方便定義更復(fù)雜的停止重復(fù)條件
getDiff(){
getDistance(類(lèi)別中心點(diǎn)x,類(lèi)別中心點(diǎn)y,類(lèi)別中心點(diǎn)x',類(lèi)別中心點(diǎn)y')
retuen diff
}
//終于開(kāi)始正事兒了菠隆,隨機(jī)設(shè)中心兵琳,歸類(lèi),計(jì)算新中心骇径,循環(huán)直到中心偏移移動(dòng)小于1個(gè)單位躯肌,完成分類(lèi)
kmean(){
srand(類(lèi)別中心點(diǎn)xn,類(lèi)別中心點(diǎn)yn)//隨機(jī)設(shè)幾個(gè)初始中心
while diff<1{
for(遍歷所有點(diǎn)){
getCluster()
}
for(遍歷分類(lèi)){
getMeans()
getDiff
}
}
retuern 類(lèi)別中心點(diǎn)xn,類(lèi)別中心點(diǎn)yn
}
就到這了,謝謝閱讀破衔。