问题:找出一个班级中兴趣爱好相近的人
思路:将每个人的兴趣爱好(足球、篮球、美剧。。。)都列出来,看看那两个或几个人的兴趣爱好重合度高
评价标准:杰卡德相似性系数(Jaccard Similarity);
计算公式:A同学与B同学共同的兴趣爱好数量/A同学与B同学所有的兴趣爱好数量。(可见系数不可能大于1)
图:个体间关系的直观表示,根据要表达的内容分为有向图、无向图等,端点表示个体,端点之间的线(边)表示关系。
python相关模块:networks
延伸:
聚类:当为相似性系数设置一个阈值,即小于该系数的两个同学认定他两没关系,在图中二者之间不划线。可以发现整个 班级会分成几个小团体(个体之间连线较多,团体之间连线较少),这样的小团体又称为连通分支。
阈值的变化,会导致连通分支也跟着变(设为1,一个连通分支都没有)。聚类的效果没有统一标准,不同的视角出 发,对聚类的标准要求不一样。
常用的判断聚类标准:轮廓系数(silhouette coefficient)
计算公式:s=(b-a)/max(a,b),a为簇内距离(个体之间的平均距离,可以通过相似性系数取反表示,因为相似性越高表示二 者距离越近),b为蔟间距离(与最近的蔟内各个体的平均距离)。越大说明团体之间越干净
python相关:s计算函数sklearn.metrics.silhouette_score
通过调整阈值求最大s函数,scipy中minimize函数取反(取反使实际是求最小值,但最后结果是求了s的最大值)