[问题] 分辨连续或类别变量

楼主: Tinderstick ( )   2015-12-19 00:24:27
假设有一笔资料 X
我想把其中的连续变量和类别变量分别找出来
举例来说
X = [ 0 0 2.5 21 1
1 1 3.4 18 0
1 2 6.6 13 1
1 4 4.8 7 1
0 3 5.1 25 1 ];
我想将 X 分成
X_con = [ 2.5 21
3.4 18
6.6 13
4.8 7
5.1 25 ];
X_cat = [ 0 0 1
1 1 0
1 2 1
1 4 1
0 3 1 ];
我目前想到的方法是
flag = false(1,size(X,2));
for i = 1:size(X,2)
flag(i) = all(X(:,i).*X(:,i)==X(:,i));
end
X_con = X(:,~flag);
X_bin = X(:,flag);
这么一来可以找到 binary variables
但是显然没找到其他类别变量
想请问各位有更好的方法吗?
谢谢大家
作者: sunev (Veritas)   2015-12-19 00:31:00
用round 吧, 还有for 里应该是==才对看不懂你的标准
作者: s4300026 (s4300026)   2015-12-19 10:51:00
觉得应该先让板友搞懂分类标准,刚拜了一下google,连续变量的意思是可以在某一区间内取任意值。类别变量是指无法被量测的值,如流水号、性别、个性分类不知道这样的定义是否与你心中的定义相同?然后我想问 [0 1 2 4 3] 和 [21 18 13 7 25]的差异性为什么一个被分到 连续 一个被分到 类别? 理由是?[21 18 13 7 25] 不能把东西分成25类(含以上)吗?
作者: celestialgod (天)   2015-12-19 11:23:00
数值意义应该由人给予,比较难用一般rule订定,硬要做只能用连续整数测试看看
作者: profyang (prof)   2015-12-19 12:59:00
最好的方法是你在读取资料时就多加一个数字来代表它是哪种变量不然你第二行和第四行都是正整数 这是要怎么判别?只能你一开始就标清楚 例如类别变量是0 连续变量是1 多加一个数字(每行)这样
作者: s4300026 (s4300026)   2015-12-19 13:59:00
看了你的回答,我的进一步问题是:为什么要请matlab帮你分类? 像是当你想要处理年龄资料时,你就呼叫X(:,4),当你想要处理性别资料,你就呼叫X(:,1)不就好了,更正确的说,你的各个字段不就代表各资料类型了,使用%注解一下各栏意义不是很好吗? 如果你不想注解,你可以用struct之类的把他们放在各种你命名的变量中,如X(1).old=1;X(1).money=22e3; ...
作者: profyang (prof)   2015-12-19 14:22:00
楼上也是个方法 关键就是在于这串Data原PO是怎么把它吃进matlab的 在吃进来这过程中先分好类就好了很好啊 是别人提供的 那别人提供你怎么知道哪行是年龄哪行是教育水准?是他直接告诉你第二行是教育水准 第四行是年龄这样吗?这样就很简单你照他讲的像s43大那样弄就好了但我猜你问题一定不可能就这5行而已 一定你有很多行需要分类 别人一定是告诉你一个分类基准你才知道第2行是教育水准 第4行是年龄 问题是这个分类基准是啥你并没有告诉我们阿 是第二行一定是连续正整数呢?还是怎样?不说清楚我不不可能知道阿但连续正整数的话 万一就那么赛 年龄刚好是1 2 3 4 5你怎么办?总之你要先讲清楚啊~
作者: celestialgod (天)   2015-12-19 19:41:00
连续正整数的缺点正如楼上所说,总之,要分析资料都要先了解资料才是正道而且有人很故意把类别变量0,5,10,15,...也不是不可能

Links booklink

Contact Us: admin [ a t ] ucptt.com