看板 MATLAB 關於我們 聯絡資訊
假設有一筆資料 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
sunev: 用round 吧, 還有for 裡應該是==才對 12/19 00:31
謝謝回應,但我突然發現我要分的應該是類別變數 categorical variable 才對 也就是 0 1 2 3 4 被歸到同一群,27 13 25 18 等等被歸到連續那一群 如果是這樣該如何做呢?謝謝
sunev: 看不懂你的標準 12/19 01:10
s4300026: 覺得應該先讓板友搞懂分類標準,剛拜了一下google, 12/19 10:51
s4300026: 連續變數的意思是可以在某一區間內取任意值。 12/19 10:52
s4300026: 類別變數是指無法被量測的值,如流水號、性別、個性分類 12/19 10:54
s4300026: 不知道這樣的定義是否與你心中的定義相同? 12/19 10:55
s4300026: 然後我想問 [0 1 2 4 3] 和 [21 18 13 7 25]的差異性 12/19 11:01
s4300026: 為什麼一個被分到 連續 一個被分到 類別? 理由是? 12/19 11:02
s4300026: [21 18 13 7 25] 不能把東西分成25類(含以上)嗎? 12/19 11:03
celestialgod: 數值意義應該由人給予,比較難用一般rule訂定,硬要 12/19 11:23
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 有比上面更好的方法嗎? 另外連續整數測試指的是什麼? 謝謝大家~
profyang: 最好的方法是你在讀取資料時就多加一個數字來代表它是哪 12/19 12:59
profyang: 種變數 12/19 12:59
profyang: 不然你第二行和第四行都是正整數 這是要怎麼判別? 12/19 13:01
profyang: 只能你一開始就標清楚 例如類別變數是0 連續變數是1 多 12/19 13:02
profyang: 加一個數字(每行)這樣 12/19 13:02
s4300026: 看了你的回答,我的進一步問題是:為什麼要請matlab幫你 12/19 13:59
s4300026: 分類? 像是當你想要處理年齡資料時,你就呼叫X(:,4), 12/19 13:59
s4300026: 當你想要處理性別資料,你就呼叫X(:,1)不就好了,更正確 12/19 13:59
s4300026: 的說,你的各個欄位不就代表各資料類型了,使用%註解一 12/19 13:59
s4300026: 下各欄意義不是很好嗎? 如果你不想註解,你可以用struc 12/19 13:59
s4300026: t之類的把他們放在各種你命名的變數中,如X(1).old=1;X( 12/19 13:59
s4300026: 1).money=22e3; ... 12/19 13:59
profyang: 樓上也是個方法 關鍵就是在於這串Data原PO是怎麼把它吃 12/19 14:22
profyang: 進matlab的 在吃進來這過程中先分好類就好了 12/19 14:22
感謝回應,我想是我沒講清楚 如果事前知道 X 包含了什麼變數 那當然不必如此麻煩 但若事前不知道,例如說 X 是別人提供的 我希望能找一個方法來自動分類 當然要求別人先分好類也是解法之一 感謝大家的回應
profyang: 很好啊 是別人提供的 那別人提供你怎麼知道哪行是年齡哪 12/19 18:01
profyang: 行是教育水準?是他直接告訴你第二行是教育水準 第四行是 12/19 18:02
profyang: 年齡這樣嗎?這樣就很簡單你照他講的像s43大那樣弄就好了 12/19 18:02
profyang: 但我猜你問題一定不可能就這5行而已 一定你有很多行需要 12/19 18:03
profyang: 分類 別人一定是告訴你一個分類基準你才知道第2行是教育 12/19 18:03
profyang: 水準 第4行是年齡 問題是這個分類基準是啥你並沒有告訴 12/19 18:04
profyang: 我們阿 是第二行一定是連續正整數呢?還是怎樣?不說清楚 12/19 18:04
profyang: 我不不可能知道阿 12/19 18:04
profyang: 但連續正整數的話 萬一就那麼賽 年齡剛好是1 2 3 4 5你 12/19 18:06
profyang: 怎麼辦?總之你要先講清楚啊~ 12/19 18:06
celestialgod: 連續正整數的缺點正如樓上所說,總之,要分析資料都 12/19 19:41
celestialgod: 要先瞭解資料才是正道 12/19 19:41
celestialgod: 而且有人很故意把類別變數0,5,10,15,...也不是不可 12/19 19:42
celestialgod: 能 12/19 19:42
感謝指點,其實是我想寫一個估計法給有資料的人操作 因此我不會知道有哪些變數,也不知道變數的特性 但由於這個估計法必須先區分連續變數和類型變數 叫使用者先分好類目前看來是最好的答案 感謝各位板友的建議與回應,謝謝 ※ 編輯: Tinderstick (140.112.177.145), 01/01/2016 17:36:12