集體編程智慧讀書筆記——第一章

一.什麼是集體智慧

      概念:集體智慧(Collective Intelligence,CI),簡稱集智,它是一種共享的或羣體的智能。在網絡時代來臨以前,集體智慧就一直活躍在生物學、社會學、計算機科學、大衆行爲學等領域。隨着Web 2.0的崛起和社會性軟件的普及,集體智慧這在社交網絡服務、衆包、分享、評論和推薦等領域也獲得了普遍應用 ,典型案例包括:百度百科、豬八戒網、任務中國、Threadless、InnoCentive、digg、iStockphoto、Mechanical Turk等。愈來愈多的傳統公司和組織也開始使用各類集體智慧平臺或工具,藉助外部智慧以解決複雜問題python

二.什麼是機器學習

1.機器學習簡介

  • 機器學習(Machine Learning, ML)是一門多領域交叉學科,涉及機率論、統計學、逼近論凸分析算法複雜度理論等多門學科。專門研究計算機怎樣模擬或實現人類的學習行爲,以獲取新的知識或技能,從新組織已有的知識結構使之不斷改善自身的性能。
  • 它是人工智能的核心,是使計算機具備智能的根本途徑,其應用遍佈人工智能的各個領域,它主要使用概括、綜合而不是演繹。
  • 編程的技知識機器學習的一部分,數學和統計學是機器學習的關鍵部分。

2.機器學習的侷限

  • 機器學習的算法受限於算法模式,即它的學習能力以及自主分析能力受限於機器自身。
  • 具體的一個表現就是基於少數數據進行的概括不少都是不精確的(過分概括)。
  • 不少算法在理論上和其實是有的區別的。

三.學習型算法的其餘用處

  • 生物工藝學
  • 金融欺詐偵測
  • 機器視覺
  • 產品市場化
  • 供應鏈優化
  • 股票市場分析
  • 國家安全

四.一些算法原理

協做過濾

概念:對一大羣人進行搜索,把其中興趣相同的人概括到一塊,算法會對這羣概括的人進行其它數據的挖掘,並把他們組合起來製做一個推薦表格。算法

收集數據

     在數據少許時可使用python的一些內置數據對象進行處理,可是當大量的數據處理時,須要使用數據庫。數據庫

尋找相近的用戶方法

  • 歐幾里得距離
  • 皮爾遜相關度

 歐幾里得距離編程


這裏寫圖片描述

簡介安全

  • 計算類似度評價值最簡單的一個方法是使用歐幾里得距離。
  • 定義:指多維空間兩點間的距離,當爲二維平面的時候咱們能夠很好的進行想象,兩個點的距離計算就是,橫座標相減的平方加上縱座標相減的平方而後開方,多維的話,以此類推

公式網絡

注意事項less

  • 由於計算是基於各維度特徵的絕對數值,因此歐氏度量須要保證各維度指標在相同的刻度級別,好比對身高(cm)和體重(kg)兩個單位不一樣的指標使用歐式距離可能使結果失效。
  • 歐幾里得距離是數據上的直觀體現,看似簡單,但在處理一些受主觀影響很大的評分數據時,效果則不太明顯;好比,U1對Item1,Item2 分別給出了2分,4分的評價;U2 則給出了4分,8分的評分。經過分數能夠大概看出,兩位用戶褒Item2 ,貶Item1,也許是性格問題,U1 打分更保守點,評分偏低,U2則更粗放一點,分值略高。在邏輯上,是能夠給出兩用戶興趣類似度很高的結論。若是此時用歐式距離來處理,獲得的結果卻不盡如人意。即評價者的評價相對於平均水平偏離很大的時候歐幾里德距離不能很好的揭示出真實的類似度

代碼示例:機器學習

'''編程思路
得到二者共同評分項
def sim_distance(數據文檔,'person1','person2')
    s={}
    for item in UL[p1]:
        if item in UL[p2]:
            si[item] = 1
    return si
歐幾里得距離算法
若是沒有得到相同項,返回0
    if len(si) == 0:
               return 0            
    sum_of_squares = sum([pow(UL[p1][item] -UL[p2][item] , 2) for item in si])
    return 1/(1+math.sqrt(sum_of_squares)) 
'''

#!/user/bin/python
# -*- coding: cp936 -*-
from math import sqrt
BJ={'小明':{'唐人街探案':4.9,'湄公河行動':7.8,'紅海行動':10},
    '小紅':{'唐人街探案':4.9,'湄公河行動':7.8,'紅海行動':10},
    '小將':{'唐人街探案':9.2,'湄公河行動':6.8,'紅海行動':6,},
    'jace':{'唐人街探案':6.0,'湄公河行動':4.7,'紅海行動':8},
    'jack':{'唐人街探案':4.9,'湄公河行動':7.8,'紅海行動':6},
    'davi':{'唐人街探案':9.2,'湄公河行動':6.8,'紅海行動':5,},
    }

#a=1/sqrt(1+pow(4.9-4.7,2)+pow(7.8-7.0,2))
def sim_distance(prefs,person1,person2):
    person1Items = prefs[person1]
    commonItemName = [itemName for itemName in person1Items if itemName in prefs[person2]]
    if len(commonItemName) == 0:return 0
    distance = sqrt(sum([pow(prefs[person1][item]-prefs[person2][item],2) for item in commonItemName]))
    return 1/(1+distance)



#輸出結果
>>> import ojld_distance
>>> reload(ojld_distance)
<module 'ojld_distance' from 'E:/software/python2\ojld_distance.pyc'>
>>> sim_distance(BJ,'小將','小紅')
0.14373291978667996


#!/user/bin/python
# -*- coding: cp936 -*-
from math import sqrt
BJ={'小明':{'唐人街探案':4.9,'湄公河行動':7.8,'紅海行動':10},
    '小紅':{'唐人街探案':4.9,'湄公河行動':7.8,'紅海行動':10},
    '小將':{'唐人街探案':9.2,'湄公河行動':6.8,'紅海行動':6,},
    'jace':{'唐人街探案':6.0,'湄公河行動':4.7,'紅海行動':8},
    'jack':{'唐人街探案':4.9,'湄公河行動':7.8,'紅海行動':6},
    'davi':{'唐人街探案':9.2,'湄公河行動':6.8,'紅海行動':5,},
    }

#a=1/sqrt(1+pow(4.9-4.7,2)+pow(7.8-7.0,2))
def distance(p,person1,person2):
    s1={}
    for item in p[person1]:
        if item in p[person2]:
            s1[item]=1
    if len(s1)==0: return 0
    sum_distance=sum([pow(p[person1][item]-p[person2][item],2) for item in p[person1] if item in p[person2]])
    return 1/(1+sum_distance)

>>> import sum_distance1
>>> distance(BJ,'小明','小明')
1.0

爾遜相關度工具


這裏寫圖片描述

簡介性能

  • 用法:皮爾遜相關係數是判斷兩組數據與某一直線擬合程度的一種度量,在數據不是很規範時(例如某些用戶誇大評價)會產出更好的結果。
  • 最佳擬合直線:直線和全部的點的距離儘量近。若是擬合度最佳,則擬合度爲一條對角線。
  • 相關公式這裏寫圖片描述

代碼示例

#!/user/bin/python
# -*- coding: cp936 -*-
critics = {
    'Lisa':{'Lady':2.5,'Snak':3.5,'Just':3.0,'Superman':3.5,'Dupree':2.5,'Night':3.0},
    'Gene':{'Lady':3.0,'Snak':3.5,'Just':1.5,'Superman':5.0,'Dupree':3.5,'Night':3.0},
    'Michael':{'Lady':2.5,'Snak':3.0,'Superman':3.5,'Night':4.0},
    'Claudia':{'Snak':3.5,'Just':3.0,'Superman':4.0,'Dupree':2.5,'Night':4.5},
    'Mick':{'Lady':3.0,'Snak':4.0,'Just':2.0,'Superman':3.0,'Dupree':2.0,'Night':3.0},
    'Jack':{'Lady':3.0,'Snak':4.0,'Just':3.0,'Superman':5.0,'Dupree':3.5,'Night':3.0},
    'Toby':{'Snak':4.5,'Superman':4.0,'Dupree':1.0}
}
from math import sqrt
def sim_pearson(prefs,p1,p2):
    si = {}
    for item in prefs[p1]:
        if item in prefs[p2]: si[item] = 1

    n = len(si)

    if n == 0:return 1

    sum1 = sum([prefs[p1][it] for it in si])
    sum2 = sum([prefs[p2][it] for it in si])

    sum1Sq = sum([pow(prefs[p1][it],2) for it in si])
    sum2Sq = sum([pow(prefs[p2][it],2) for it in si])

    pSum = sum([prefs[p1][it]*prefs[p2][it] for it in si])

    num = pSum - (sum1*sum2/n)
    den = sqrt((sum1Sq-pow(sum1,2)/n)*(sum2Sq - pow(sum2,2)/n))
    if den == 0: return 0
    r = num/den
    return  r


print (sim_pearson(critics,'Lisa','Gene'))


#輸出結果

0.396059017191
相關文章
相關標籤/搜索