多维缩放可以为数据集找到一种二维表达形式。算法根据每对数据项之间的差距情况,尝试绘制出一幅图来,图中的各数据项之间的距离远近,对应于它们彼此间的差异程度。
以分类聚集算法中的数据为例
第一步:计算所有数据项两两间的实际距离(可参考皮尔逊算法或欧几里德算法)
第二步:将数据项随机放置在二维图上。
第三步:针对每两两构成的一对数据项,将它们的实际距离与当前在二维图上的距离进行比较,求出一个误差值
第四步:根据误差的情况,按照比例将每个数据项的所在位置移近或移远少许量。(每一个节点的移动,都是所有其它节点施加在该节点上的推或拉的结合效应。)
第五步:重复第三步、第四步(节点每移动一次,其当前距离与实际距离的差距就会减少一些)。这一过程会不断地重复多次,直到无法再通过移动节点来减少总体误差为止。
下面我们用PYTHON来实现此算法:
def scaledown(data, distance=pearson, rate=0.01): n = len(data) print n # 每一对数据项的真实距离 realdist = [[distance(data[i], data[j]) for j in range(n)] for i in range(0, n)] # 生成随机的二维LIST,表示各数据项在二维空间的初始坐标 loc = [[random.random(), random.random()] for i in range(n)] fakedist = [[0.0 for j in range(n)] for i in range(n)] lasterror = None for m in range(0, 100000): # 计算各数据项初始坐标的距离 for i in range(n): for j in range(n): fakedist[i][j] = sqrt(sum([pow(loc[i][x] - loc[j][x], 2) for x in range(len(loc[i]))])) # Move points grad = [[0.0, 0.0] for i in range(n)] totalerror = 0 for k in range(n): for j in range(n): if j == k: continue # 计算误差的比例 errorterm = (fakedist[j][k] - realdist[j][k]) / realdist[j][k] # Each point needs to be moved away from or towards the other # point in proportion to how much error it has grad[k][0] += ( (loc[k][0] - loc[j][0]) / fakedist[j][k]) * errorterm grad[k][1] += ( (loc[k][1] - loc[j][1]) / fakedist[j][k]) * errorterm # 求得所有数据项的误差和 totalerror += abs(errorterm) # 如果移动后,误差变得更大,则结束 if lasterror and lasterror < totalerror: break lasterror = totalerror # 移动节点 for k in range(n): loc[k][0] -= rate * grad[k][0] loc[k][1] -= rate * grad[k][1] return loc //作图的方法 def draw2d(data, labels, jpeg='mds2d.jpg'): img = Image.new('RGB', (1000, 1000), (255, 255, 255)) draw = ImageDraw.Draw(img) #设置字体类型与大小 font = ImageFont.truetype('simsun.ttc', 24) for i in range(len(data)): x = (data[i][0] + 0.5) * 500 y = (data[i][1] + 0.5) * 500 #此处注意编码 draw.text((x, y), unicode(labels[i], 'utf-8'), (0, 0, 0), font=font) img.save(jpeg, 'JPEG')
利用之前算法已得的数据进行测试下:
#encoding=utf-8 import clusters blognames,words,data = clusters.readfile('blogdata1.txt') coords = clusters.scaledown(data) clusters.draw2d(coords,blognames)
得到图:
相关推荐
集体智慧编程(知道的人都知道这本书,不解释,现在很难买到字纸的)
讲解了几个重要的算法并用python进行了实现(附代码)
集体智慧编程-python算法应用!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
这是集体智慧编程的书里面的所有源代码,加上还有所有的数据集,值得学习
集体智慧编程-python算法应用pdf.7z
多维缩放(multidimensional scaling ,MDS),是另外一种线性降维方式,与主成分分析法和线性降维分析法都不同的是,多维缩放的目标不是保留数据的最大可分性,而是更加关注与高维数据内部的特征。多维缩放算法集中于...
集体智慧编程中文版.pdf 扫描版本 。。。。。。。。。。。。。。。。。。。。
利用LSTM循环神经网络对多维数据进行预测,先对数据进行归一化处理,划分为训练集、测试集,用4个参数预测一个参数值
集体智慧编程第三章源代码加资源 已经修正可运行 支持python3
python书籍包括集体智慧编程中文版.pdf、Python源码剖析(完整版).pdf。
集体智慧编程书中所有章节的源代码,请注意代码为Python编写!
"Python实现数据分析"指的是利用Python编程语言及其相关的库和工具,对数据进行处理、清洗、转换、分析和可视化的过程。Python作为一种易学易用的编程语言,具有丰富的数据处理和分析库,因此被广泛用于数据科学和...
今天小编就为大家分享一篇使用python实现多维数据降维操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Python数据可视化编程实战是一本使用Python实现数据可视化编程的实战指南,介绍了如何使用Python流行的库,通过60余种方法创建美观的数据可视化效果。 全书共8章,分别介绍了准备工作环境、了解数据、绘制并定制化...
EM算法&Learn Python the Hard Way(第三版)&PYTHON自然语言处理中文版&集体智慧编程&自然语言处理综论 第二版
集体智慧编程(包括中文版和英文版两个PDF),不用多说了吧,经典数据分析入门教程。学习机器学习的好书
主要为大家详细介绍了python实现批量按比例缩放图片效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
今天小编就为大家分享一篇python实现在多维数组中挑选符合条件的全部元素,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
本书收集了《集体智慧编程中的所有例子的代码,供大家学习
Programming Collective Intelligence集体智慧编程英文版,清晰版本 非影印,数据分析,python进阶好书