通过 VQ 进行聚类现在,我需要针对该数据集来测试我的 VQ 实现。首先,使用 cleanse 命令清理该数据集,以便删除所有错误的观察值。我指定了输入数据集文件 (zoo.dat)、输出文件前缀 (output) 和模式。我没有请求拆分该数据集,所以整个数据集将包含在一个文件中。
1
| ./cleanse -i zoo.dat -o output -c "sddddddddddddddddd"
|
结果是一个包含我已清理的数据集的 output.dat 文件。我将这个已清理的新文件传递给我的 learn 可执行程序,后者实现了机器学习算法。我指定了测试数据文件 (output.dat)、输出文件 (out)、要运行的迭代次数,以及要使用的算法(vq,表示矢量量化)。
1
| ./learn -t output.dat -o out -i 100000 -a vq
|
结果是一个包含动物名称和它所属的集群的文件。
清单 5. VQ 聚类算法的输出格式1
2
3
4
5
6
| aardvark,4
antelope,4
bass,2
bear,4
boar,4
...
|
我在下面对该数据进行了后期处理,以显示动物的所有集群和已发现出错的地方。请注意,通过 VQ 对动物园数据集进行分类的准确率为 84%,考虑到此方法的有损性质,这个结果是合理的。我在 Class 1 中重载了原始数据的两个类 ,而且 3 个类可以准确划分它们的特征。请注意,通过一个冷却时间表(随时间降低学习率,从而随时间最小化权重变化),可以实现更高的准确率。
清单 6. 使用 VQ 得到的来自动物园数据集的最终动物集群1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| ****Class 1
aardvark, antelope, bear, boar, buffalo, calf, cavy,
cheetah, deer, dolphin, duck, elephant, flamingo, fruitbat,
giraffe, girl, goat, gorilla, hamster, hare, leopard, lion,
lynx, mink, mole, mongoose, opossum, oryx, platypus,
polecat, pony, porpoise, puma, pussycat, raccoon, reindeer,
seal, sealion, squirrel, vampire, vole, wallaby, wolf.
****Class 2
chicken, crow, dove, gull, hawk, kiwi, lark, ostrich,
parakeet, penguin, pheasant, rhea, skimmer, skua, sparrow,
swan, wren, vulture.
****Class 3
pitviper, seasnake, slowworm, tortoise, tuatara,
****Class 4
bass, carp, catfish, chub, crayfish, dogfish, haddock,
herring, pike, piranha, seahorse, sole, stingray, tuna.
****Class 5
frog, frog, newt, toad.
****Class 6
flea, gnat, honeybee, housefly, ladybird, moth, termite,
wasp.
****Class 7
clam, crab, lobster, octopus, scorpion, seawasp, slug,
starfish, worm.
|
尽管 VQ 的聚类结果不是 100% 准确,但它取得了 84% 的合理成绩。现在我将介绍另一种聚类方法 - 一种具有独特优势的方法。 |