作者Tinderstick ( )
看板MATLAB
标题[问题] 分辨连续或类别变数
时间Sat Dec 19 00:24:27 2015
假设有一笔资料 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
但是显然没找到其他类别变数
想请问各位有更好的方法吗?
谢谢大家
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 58.115.173.27
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1450455870.A.88D.html
1F:推 sunev: 用round 吧, 还有for 里应该是==才对 12/19 00:31
谢谢回应,但我突然发现我要分的应该是类别变数 categorical variable 才对
也就是 0 1 2 3 4 被归到同一群,27 13 25 18 等等被归到连续那一群
如果是这样该如何做呢?谢谢
2F:推 sunev: 看不懂你的标准 12/19 01:10
3F:推 s4300026: 觉得应该先让板友搞懂分类标准,刚拜了一下google, 12/19 10:51
4F:→ s4300026: 连续变数的意思是可以在某一区间内取任意值。 12/19 10:52
5F:→ s4300026: 类别变数是指无法被量测的值,如流水号、性别、个性分类 12/19 10:54
6F:→ s4300026: 不知道这样的定义是否与你心中的定义相同? 12/19 10:55
7F:→ s4300026: 然後我想问 [0 1 2 4 3] 和 [21 18 13 7 25]的差异性 12/19 11:01
8F:→ s4300026: 为什麽一个被分到 连续 一个被分到 类别? 理由是? 12/19 11:02
9F:→ s4300026: [21 18 13 7 25] 不能把东西分成25类(含以上)吗? 12/19 11:03
10F:→ celestialgod: 数值意义应该由人给予,比较难用一般rule订定,硬要 12/19 11:23
11F:→ celestialgod: 做只能用连续整数测试看看 12/19 11:23
谢谢回应
的确,我应该要先让板友(包括我自己)搞懂分类标准
我心中想的变数是性别、年纪、学历、所得等个人资料
[ 0 1 1 1 0 ] 代表性别
[ 0 1 2 4 3 ] 对应到不同的教育水准 0: 没念书 1: 国小 2: 国中 之类
[ 21 18 13 7 25 ] 则是年纪
而资料里可能还有 [ 22000 28000 31520 36050 ] 等不同所得
通常後两者会被当作连续变数
但由於测量误差,收集到的数据只能取到整数
因此用 round 可能行不通
不过我想这是我定义上的问题,跟 Matlab 无关了
anyway 还是谢谢大家
最後想请问
就算只挑出 binary variables
有比上面更好的方法吗?
另外连续整数测试指的是什麽?
谢谢大家~
12F:推 profyang: 最好的方法是你在读取资料时就多加一个数字来代表它是哪 12/19 12:59
13F:→ profyang: 种变数 12/19 12:59
14F:推 profyang: 不然你第二行和第四行都是正整数 这是要怎麽判别? 12/19 13:01
15F:→ profyang: 只能你一开始就标清楚 例如类别变数是0 连续变数是1 多 12/19 13:02
16F:→ profyang: 加一个数字(每行)这样 12/19 13:02
17F:推 s4300026: 看了你的回答,我的进一步问题是:为什麽要请matlab帮你 12/19 13:59
18F:→ s4300026: 分类? 像是当你想要处理年龄资料时,你就呼叫X(:,4), 12/19 13:59
19F:→ s4300026: 当你想要处理性别资料,你就呼叫X(:,1)不就好了,更正确 12/19 13:59
20F:→ s4300026: 的说,你的各个栏位不就代表各资料类型了,使用%注解一 12/19 13:59
21F:→ s4300026: 下各栏意义不是很好吗? 如果你不想注解,你可以用struc 12/19 13:59
22F:→ s4300026: t之类的把他们放在各种你命名的变数中,如X(1).old=1;X( 12/19 13:59
23F:→ s4300026: 1).money=22e3; ... 12/19 13:59
24F:→ profyang: 楼上也是个方法 关键就是在於这串Data原PO是怎麽把它吃 12/19 14:22
25F:→ profyang: 进matlab的 在吃进来这过程中先分好类就好了 12/19 14:22
感谢回应,我想是我没讲清楚
如果事前知道 X 包含了什麽变数
那当然不必如此麻烦
但若事前不知道,例如说 X 是别人提供的
我希望能找一个方法来自动分类
当然要求别人先分好类也是解法之一
感谢大家的回应
26F:推 profyang: 很好啊 是别人提供的 那别人提供你怎麽知道哪行是年龄哪 12/19 18:01
27F:→ profyang: 行是教育水准?是他直接告诉你第二行是教育水准 第四行是 12/19 18:02
28F:→ profyang: 年龄这样吗?这样就很简单你照他讲的像s43大那样弄就好了 12/19 18:02
29F:→ profyang: 但我猜你问题一定不可能就这5行而已 一定你有很多行需要 12/19 18:03
30F:→ profyang: 分类 别人一定是告诉你一个分类基准你才知道第2行是教育 12/19 18:03
31F:→ profyang: 水准 第4行是年龄 问题是这个分类基准是啥你并没有告诉 12/19 18:04
32F:→ profyang: 我们阿 是第二行一定是连续正整数呢?还是怎样?不说清楚 12/19 18:04
33F:→ profyang: 我不不可能知道阿 12/19 18:04
34F:→ profyang: 但连续正整数的话 万一就那麽赛 年龄刚好是1 2 3 4 5你 12/19 18:06
35F:→ profyang: 怎麽办?总之你要先讲清楚啊~ 12/19 18:06
36F:→ celestialgod: 连续正整数的缺点正如楼上所说,总之,要分析资料都 12/19 19:41
37F:→ celestialgod: 要先了解资料才是正道 12/19 19:41
38F:→ celestialgod: 而且有人很故意把类别变数0,5,10,15,...也不是不可 12/19 19:42
39F:→ celestialgod: 能 12/19 19:42
感谢指点,其实是我想写一个估计法给有资料的人操作
因此我不会知道有哪些变数,也不知道变数的特性
但由於这个估计法必须先区分连续变数和类型变数
叫使用者先分好类目前看来是最好的答案
感谢各位板友的建议与回应,谢谢
※ 编辑: Tinderstick (140.112.177.145), 01/01/2016 17:36:12