跨學科知識體系或許是殊途同歸的

最近的娛樂之一是自學R,當讀到kmeans例子時,意識到一個很有趣的事情:

這裡可以寫一篇詮釋「知識體系只是用不同方式來表達同一個事實而已」的短文。

本文分成社科和自然科學兩個知識體系,首先是社科:

心理學和行為經濟學有個說法叫做「錨點效應」,證明方法類似這樣:

將人群分組ab測試,a組展示一個東西讓你估計是否值100,並且給一個估計數。b組直接給估計數。

然後實驗結果是被問過100的組,估計的平均數更接近100。

分析原因,大致是因為人的感知能力對於「絕對值」是不敏感的,對於「比較」是敏感的,說白了就是無論你多差還是多好,永遠都有一個「鄰居家的孩子」如何如何,只對比,不看絕對值。

再舉個不恰當例子可能是,當你是一群瞪羚里的一員,一起被獵豹追,那麼你跑的快不快並不重要,重要的是,你是不是最慢的那一個。因此「重視對比,忽略絕對值」的本能,可以理解為是一種達爾文自然選擇的結果--雖然我也不太信達爾文。

回到錨點話題,既然人類天性就依賴對比,尋找對比,那麼在毫無東西可對比的情況下,一旦先入為主,心理上就會不自禁地將哪怕毫無關係的東西當作比較的出發點,也就因此導致結果的不客觀。

這個理論可以廣泛用於產品定價,面試/相親技巧等,在類似怪誕行為學,魔鬼經濟學這些典型的機場讀物里經常看到,我們知道投資人/老闆是坐飛機最多的,被影響也就最深,他們最愛問行業數據是多少,歷史同期是多少,說白了就是在努力掙脫別人的錨點,儘可能保證獨立思考。

這些論調往往稱為人類的心理和行為具備非理性的一面,理性人應該根據絕對值去做理性的判斷,好玩的是,下面我們嘗試用理性的方法來解釋一下如上內容。

現在開始自然科學部分:

最簡單的分類演算法kmeans,目標是將一堆雜亂的數據點進行分類,步驟是:

首先隨意選取類別中心點,將所有其他點歸到距離最近的中心點,形成幾個分類,當然這時候是完全亂分的。

然後重新計算每個分類群的距離中心點,再打亂所有的數據點,根據新的中心再次按照距離歸類,第二次的歸類中心點顯然比第一次亂來的會好很多,再來一次會更好,但好的幅度會減小。

以此類推,不斷重複,新舊中心點的距離會逐漸減少,最後達到預設的最小值,完成分類。

圖示比較能看清楚整個過程。

圖片來源:網路

讓我們閉上眼睛體會一下,這正是「先入為主」的錨點,當我們想對一堆雜亂的點進行分類,但毫無頭緒的時候,如果有誰拋出來任何一個分法,無論是合理還是隨機,也無論是真隨機還是假隨機,我們都可以根據這些預設錨點,不斷優化分類--也就是重新計算距離,來逐漸逼近最合理的分類。

這個幾乎是人工智慧入門中入門的簡單演算法,某種程度上還原了人類思考的模式,不僅可以解釋心理錨點,甚至還可以量化計算上文里心理學實驗的結果。

更為奇妙的是,kmeans迭代距離分類演算法,還具備對於極端值敏感,對於非凸形狀敏感,即「容易被帶溝里去」的特點,這和心理錨點更加不謀而和。

唯一的不同是,現實生活中我們沒有太多機會可以迭代重複,並不是所有第一眼誤解都有機會解釋,人生苦短,一個偏離較大的」初始錨點「或許能帶歪半生。

anyway,這就是本文想說的:知識體系只是用不同方式來表達同一個事實而已,哪怕外在看起來是如此不相干,走下去的指向,卻是殊途同歸。

最後隨意寫寫,用程序的思考模式描述一下kmeans,參數完全沒設計,看個感覺。

可以對比開頭的語言、邏輯的描述,體會一下編程思維和正常人思維的不同,是一種從原材料、零件開始重新建造世界的感覺。

而從社科的角度無論理解、領悟、思辨的多深刻,也完全比不上用代碼,像砌牆一樣實現一遍,來的感受徹骨,這是怎麼說呢,一種「形而下」天然優於「形而上」的掌控感。

//算距離,這裡可以改到n維,btw如果認不出的人請回憶一下勾股定理

getDistance(){

d=sqrt((x1-x2)^2+(y1-y2)^2)

return d

}

//歸到某類

getCluster(){

tmp給一個極大值

for (類別id++){

if ((getDistance(x1,y1,類別中心點x,類別中心點y) < tmp)

label=該類別id

}

return label

}

//取類中心

getMeans(){

for (類別內所有點遍歷){

取距離means

}

根據mean距離,任取三個點算出新中心點xy

return 類別中心點x,類別中心點y

}

//類中心偏移程度,抽出來方便定義更複雜的停止重複條件

getDiff(){

getDistance(類別中心點x,類別中心點y,類別中心點x,類別中心點y)

retuen diff

}

//終於開始正事兒了,隨機設中心,歸類,計算新中心,循環直到中心偏移移動小於1個單位,完成分類

kmean(){

srand(類別中心點xn,類別中心點yn)//隨機設幾個初始中心

while diff<1{

for(遍歷所有點){

getCluster()

}

for(遍歷分類){

getMeans()

getDiff

}

}

retuern 類別中心點xn,類別中心點yn

}

就到這了,謝謝閱讀。

推薦閱讀:

【申請小結】Do Your Best and God Will Do the Rest
我們何時遨遊宇宙
SpaceX 公司現狀的一點解讀
036 走勢中樞級別延續定理、中心定理及第三類買賣點定理

TAG:經濟學 | 人工智慧 |