[問題] 分辨連續或類別變數

作者: 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