医学数据分类问题
在医学实验中,分别测量M个被试的N个部位的时序信号,得到M组向量数据,每组包括N个向量,使用某种分类方法分别将每组的N个向量分为k类。用什么方法来测量对这M个被试的时序信号(N个向量)进行分类,所得结果的一致性?即有没有一个标准,使得我们可以依照此标准说,第一个与第二个被试的不同部位时序信号的分类结果很相近,他们相应部位的时序信号被分到了同一类。
[解决办法]
可以试一试k-mean等算法
[解决办法]
参考这个中心距作为特征值的概念:
平移后每个向量相对于自己核的偏移量不变这个道理很重要。
就好比你上班刷指纹,偏上或者偏下,偏左或者偏右,不需要当不同的图片来识别。
一切数据皆向量,这是重要的思维,不管是指纹还是你的医学数据,还是音频,视频!~
这是从程序员到数据挖掘分析师的重要思维转变!~~
1:单维度偏移量d=[A(i)-A(i+1)]^2 (当i=max时 ,i=0)
2:所有维度综合偏移量D=∑(dk)
这样就把互相比对向量相似度事情,变成了单一的数字分桶.
用这个办法可以把海量向量分桶处理,复杂度降低到接近O(桶内大小)的水平.
下边的实验说明,当一个指纹图片平移后,我还可以通过O(1)时间找到它,哪怕和一亿张其他图片混在一起。
因为它的特征值没变!~~
- C# code
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Drawing;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { //偏移前的指纹数据 Point[] Points1 = new Point[100]; //偏移后的指纹数据 Point[] Points2 = new Point[100]; //假设偏移量 int OffsetX = -3; int OffsetY = 4; Random Rand = new Random(); for (int i = 0; i < 100; i++) { Points1[i] = new Point(Rand.Next(100), Rand.Next(100)); Points2[i] = new Point(Points1[i].X + OffsetX, Points1[i].Y + OffsetY); } //相对自己的偏移量. double D1 = 0d; double D2 = 0d; for (int i = 0; i < 100; i++) { int j = (i == 99) ? 0 : i + 1; D1 += Math.Pow(((double)Points1[i].X - (double)Points1[j].X), 2d) + Math.Pow(((double)Points1[i].Y - (double)Points1[j].Y), 2d); D2 += Math.Pow(((double)Points2[i].X - (double)Points2[j].X), 2d) + Math.Pow(((double)Points2[i].Y - (double)Points2[j].Y), 2d); } //输出距离差 Console.WriteLine(D1 - D2); Console.Read(); } }}
[解决办法]
可以先把数据“标准化”,消除量纲的影响。
使得不同个体的数据都是无量纲的,才具有可比性。