概念:集體智慧(Collective Intelligence,CI),簡稱集智,它是一種共享的或羣體的智能。在網絡時代來臨以前,集體智慧就一直活躍在生物學、社會學、計算機科學、大衆行爲學等領域。隨着Web 2.0的崛起和社會性軟件的普及,集體智慧這在社交網絡服務、衆包、分享、評論和推薦等領域也獲得了普遍應用 ,典型案例包括:百度百科、豬八戒網、任務中國、Threadless、InnoCentive、digg、iStockphoto、Mechanical Turk等。愈來愈多的傳統公司和組織也開始使用各類集體智慧平臺或工具,藉助外部智慧以解決複雜問題 。python
概念:對一大羣人進行搜索,把其中興趣相同的人概括到一塊,算法會對這羣概括的人進行其它數據的挖掘,並把他們組合起來製做一個推薦表格。算法
在數據少許時可使用python的一些內置數據對象進行處理,可是當大量的數據處理時,須要使用數據庫。數據庫
歐幾里得距離編程
簡介安全
公式網絡
注意事項less
代碼示例:機器學習
'''編程思路 得到二者共同評分項 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