聚类算法反应人们想要的物品(tanimoto相关度)

本文探讨了Tanimoto相关度如何有效地处理01关系,例如判断是否观看过某部电影,而皮尔逊相关度适用于程度衡量的问题,如电影评分。通过集体智慧编程作者提供的数据,改变化学距离函数,结果显示,游戏机和衣服鞋子被正确聚类,同时揭示了一些有趣的关联,如想要手机的人可能也想养狗,而希望有男朋友的人比例较高。
摘要由CSDN通过智能技术生成

也就是tanimoto相关度能够很好的解决01关系, 也就是是否关系, 比如是否看过某部电影; 而皮尔逊相关度能够很好的解决一些用程度衡量的, 比如为某部电影打分就是程度

其中用到的数据来自集体智慧编程的作者

只是把距离函数改掉了:

#coding:utf-8
import os
import sys
import chardet
from math import sqrt
from PIL import Image, ImageDraw
import random

def readFile(fileName):
    lines = [line for line in file(fileName)]
    colNames = lines[0].strip().split('\t')[1:]
    rowNames = []
    data = []
    for line in lines[1:]:
        p = line.strip().split('\t')
        rowNames.append(p[0])
        data.append([float(x) for x in p[1:]])
    return rowNames, colNames, data

def pearsonBeta(v1, v2):
    sum1 = sum(v1)
    sum2 = sum(v2)
    
    sum1Sq = sum([pow(v, 2) for v in v1])
    sum2Sq = sum([pow(v, 2) for v in v2])
    
    pSum = sum([v1[i] * v2[i] for i in range(len(v1))])
    
    nums = pSum - (sum1 * sum2 / len(v1))
    den = sqrt((sum1Sq - pow(sum1, 2) / len(v1)) * (sum2Sq - pow(sum2, 2) / len(v2)))
    if(den == 0):
        return 0
    return 1.0 - nums/den

#距离函数
def pearson(v1, v2):
    sum1 = sum(v1)
    sum2 = sum(v2)
    eSum1 = sum1 / len(v1) 
    eSum2 = sum2 / len(v2)
    
    pSum = sum([(v1[i] - eSum1) * (v2[i] - eSum2) for i in range(len(v1))])
    pTmp1 = sqrt(sum([pow(v1[i] -eSum
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值