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

看板MATLAB作者 ( )時間8年前 (2015/12/19 00:24), 8年前編輯推噓7(7032)
留言39則, 4人參與, 最新討論串1/1
假設有一筆資料 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://www.ptt.cc/bbs/MATLAB/M.1450455870.A.88D.html

12/19 00:31, , 1F
用round 吧, 還有for 裡應該是==才對
12/19 00:31, 1F
謝謝回應,但我突然發現我要分的應該是類別變數 categorical variable 才對 也就是 0 1 2 3 4 被歸到同一群,27 13 25 18 等等被歸到連續那一群 如果是這樣該如何做呢?謝謝

12/19 01:10, , 2F
看不懂你的標準
12/19 01:10, 2F

12/19 10:51, , 3F
覺得應該先讓板友搞懂分類標準,剛拜了一下google,
12/19 10:51, 3F

12/19 10:52, , 4F
連續變數的意思是可以在某一區間內取任意值。
12/19 10:52, 4F

12/19 10:54, , 5F
類別變數是指無法被量測的值,如流水號、性別、個性分類
12/19 10:54, 5F

12/19 10:55, , 6F
不知道這樣的定義是否與你心中的定義相同?
12/19 10:55, 6F

12/19 11:01, , 7F
然後我想問 [0 1 2 4 3] 和 [21 18 13 7 25]的差異性
12/19 11:01, 7F

12/19 11:02, , 8F
為什麼一個被分到 連續 一個被分到 類別? 理由是?
12/19 11:02, 8F

12/19 11:03, , 9F
[21 18 13 7 25] 不能把東西分成25類(含以上)嗎?
12/19 11:03, 9F

12/19 11:23, , 10F
數值意義應該由人給予,比較難用一般rule訂定,硬要
12/19 11:23, 10F

12/19 11:23, , 11F
做只能用連續整數測試看看
12/19 11:23, 11F
謝謝回應 的確,我應該要先讓板友(包括我自己)搞懂分類標準 我心中想的變數是性別、年紀、學歷、所得等個人資料 [ 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 有比上面更好的方法嗎? 另外連續整數測試指的是什麼? 謝謝大家~

12/19 12:59, , 12F
最好的方法是你在讀取資料時就多加一個數字來代表它是哪
12/19 12:59, 12F

12/19 12:59, , 13F
種變數
12/19 12:59, 13F

12/19 13:01, , 14F
不然你第二行和第四行都是正整數 這是要怎麼判別?
12/19 13:01, 14F

12/19 13:02, , 15F
只能你一開始就標清楚 例如類別變數是0 連續變數是1 多
12/19 13:02, 15F

12/19 13:02, , 16F
加一個數字(每行)這樣
12/19 13:02, 16F

12/19 13:59, , 17F
看了你的回答,我的進一步問題是:為什麼要請matlab幫你
12/19 13:59, 17F

12/19 13:59, , 18F
分類? 像是當你想要處理年齡資料時,你就呼叫X(:,4),
12/19 13:59, 18F

12/19 13:59, , 19F
當你想要處理性別資料,你就呼叫X(:,1)不就好了,更正確
12/19 13:59, 19F

12/19 13:59, , 20F
的說,你的各個欄位不就代表各資料類型了,使用%註解一
12/19 13:59, 20F

12/19 13:59, , 21F
下各欄意義不是很好嗎? 如果你不想註解,你可以用struc
12/19 13:59, 21F

12/19 13:59, , 22F
t之類的把他們放在各種你命名的變數中,如X(1).old=1;X(
12/19 13:59, 22F

12/19 13:59, , 23F
1).money=22e3; ...
12/19 13:59, 23F

12/19 14:22, , 24F
樓上也是個方法 關鍵就是在於這串Data原PO是怎麼把它吃
12/19 14:22, 24F

12/19 14:22, , 25F
進matlab的 在吃進來這過程中先分好類就好了
12/19 14:22, 25F
感謝回應,我想是我沒講清楚 如果事前知道 X 包含了什麼變數 那當然不必如此麻煩 但若事前不知道,例如說 X 是別人提供的 我希望能找一個方法來自動分類 當然要求別人先分好類也是解法之一 感謝大家的回應

12/19 18:01, , 26F
很好啊 是別人提供的 那別人提供你怎麼知道哪行是年齡哪
12/19 18:01, 26F

12/19 18:02, , 27F
行是教育水準?是他直接告訴你第二行是教育水準 第四行是
12/19 18:02, 27F

12/19 18:02, , 28F
年齡這樣嗎?這樣就很簡單你照他講的像s43大那樣弄就好了
12/19 18:02, 28F

12/19 18:03, , 29F
但我猜你問題一定不可能就這5行而已 一定你有很多行需要
12/19 18:03, 29F

12/19 18:03, , 30F
分類 別人一定是告訴你一個分類基準你才知道第2行是教育
12/19 18:03, 30F

12/19 18:04, , 31F
水準 第4行是年齡 問題是這個分類基準是啥你並沒有告訴
12/19 18:04, 31F

12/19 18:04, , 32F
我們阿 是第二行一定是連續正整數呢?還是怎樣?不說清楚
12/19 18:04, 32F

12/19 18:04, , 33F
我不不可能知道阿
12/19 18:04, 33F

12/19 18:06, , 34F
但連續正整數的話 萬一就那麼賽 年齡剛好是1 2 3 4 5你
12/19 18:06, 34F

12/19 18:06, , 35F
怎麼辦?總之你要先講清楚啊~
12/19 18:06, 35F

12/19 19:41, , 36F
連續正整數的缺點正如樓上所說,總之,要分析資料都
12/19 19:41, 36F

12/19 19:41, , 37F
要先瞭解資料才是正道
12/19 19:41, 37F

12/19 19:42, , 38F
而且有人很故意把類別變數0,5,10,15,...也不是不可
12/19 19:42, 38F

12/19 19:42, , 39F
12/19 19:42, 39F
感謝指點,其實是我想寫一個估計法給有資料的人操作 因此我不會知道有哪些變數,也不知道變數的特性 但由於這個估計法必須先區分連續變數和類型變數 叫使用者先分好類目前看來是最好的答案 感謝各位板友的建議與回應,謝謝 ※ 編輯: Tinderstick (140.112.177.145), 01/01/2016 17:36:12
文章代碼(AID): #1MT3C-YD (MATLAB)
文章代碼(AID): #1MT3C-YD (MATLAB)