前一天我們做了初步的測試,得到了一個鳥鳥的結果,正確率幾乎只有跟丟銅板差不多。這樣的結果實在讓人無法接受,因此想了幾個方法來改善這個問題。
分類問題可以依據幾個角度來改善,第一個想到的是用不同的分類演算法,再來就是針對資料面的部分,例如增加資料量或是用不同的訓練、測試資料集比例;或是用不同 model 進行文字轉數值,最終就是進行資料降維的方式。我們在接下來的幾天會依序利用這些方式來改善分類結果並進行更詳細的說明:
之所以會針對以上的部分進行改善,除了針對分類演算法常使用的改善方式,主要就是訓練資料集的改進。之前我們花了許多時間解釋這個專案整個資料集的標記都是人工的方式,坦白說,要建立一個好的資料集也不是那麼容易的事,因為在這兩個月建立資料集的過程中我們還是陸陸續續發現資料有一些問題,所以有時候真的是邊改 code 邊做,有問題就趕緊修正,整個過程中有一些解決問題心得,當時就覺得或許這些問題可能會影響到後續的分類結果。所以我們會針對這部份把遇到的狀況寫下來當作給之後想自己建立相關資料集的朋友們一個參考。
這邊先依序把每個部分快速講解一下,細節的部分在後續四天會有更詳細的說明。
抓取資料與標記問題
之前我們在 Day 13: 小天地裡的遊戲 (上集)與 Day 14: 小天地裡的遊戲 (下集) 有提到在標記介面會自動幫忙挑出文章內的公司名稱與代號,以及標記出該公司的股價。當我們在進行標記動作的時候陸續發現一些問題,例如無法正確標記公司名稱,或是多個公司名稱同時出現,抑或是股價的漲跌時好時壞,很難看出文章的敘述到底該屬於正確或不正確等問題。也因為如此,在資料的標記可能一開始就造成類別錯誤地問題,進而導致之後分類的正確性。
分類演算法
一個比較單純是數學上的問題。就我們之前的理解,不同了分類演算法對於不同的資料集(數量、分佈 等)會有各自優缺點。因此採用適當的分類演算法或是最佳化分類演算法的設定(變數)都可以改善正確率的效果。
在訓練集與測試及資料的使用比例上也可以嘗試進行調整,在 N-fold validation 部分使用不同的 N 值也是一個改善正確率的方式。
資料面
在 Day 19:文字 vs. 數字 提到用 fasttext 把文字轉成數值向量。以 wordembedding 的部分還可以使用 Google 的 word2vec 方式進行。用不同的 model 是一個方法,另外也可以嘗試最原始的 TF-IDF 方式來進行向量值的編碼。
當數值向量產生後在進行分類計算前可以進行正規化 (Data Normalization) 的動作,經正規化後的資料分布也會有利於改善分類計算的結果。
資料降維
最後是資料降維。在計算分類問題若資料維度過高不只耗費計算時間(效能)也可能會影響分類結果;資料降維大家可能最先想到 PCA ( Principal Component Analysis ),不過也有許多利用最佳化演算法進行降為的動作。到底用何種降維方式可以改善分類效能,在這『資料降維』這篇會有詳細的說明。
好,這就是我們提出可以改善資料分類的效能的一些方法,詳細的步驟就留待之後的每一篇再來細細說明了。
免責聲明:本文章提到的股市指數與說明皆為他人撰寫文章內容,包括:選股條件,買入條件,賣出條件和風險控制參數,只適用於文章內的解釋與說明,此提示及建議內容僅供參考之用,並不構成投資研究、認購、招攬或邀約任何人士投資任何投資產品或交易策略,亦不應視為投資建議。