發表文章

程式碼內嵌網站

  好用的程式碼內嵌網站 https://hilite.me/

特徵類型及常見特徵工程手法

圖片
https://www.geeksforgeeks.org/machine-learning/what-is-feature-engineering/ 在機器學習(深度學習)中關鍵絕大部分在 特徵工程 而特徵工程關鍵則在所謂 領域知識 。 特徵類型 數值型:有不同轉換方式,函數、條件式子皆可。(舉例:坪數、年齡、身高、體重) 類別型:一種類別對應一種數值分數。(舉例:行政區、性別、花種類、....) 二元特徵:僅True(1)/False(0)兩種數值特徵,可當作類別型或數值型 排序型特徵: 介於數值型與類別型特徵之間,類似考試的百分等級(0~99)。 有名次、大小關係,也可能並非連續數字。 通常當作數值型特徵處裡,若作為類別型特徵就會失去可排序特性。 時間型特徵: 若取總秒數可轉為數值型特徵,但會失去週期特徵(月、季、星期) 直接用本身可做為類別型特徵,但會失去排序依據資訊,類別數量也過大無意義。 常見特徵工程手法 特徵工程是將現實(可能非數值)資料轉換為對應數值型分數的過程 捨棄或調整離群值 : 若只有少數幾筆資料和其他數值差異極大,則無法標準化處理。 一種做法是直接移除,會挖一個洞。(若離群值數量真的很少的話建議用此做法) 一種做法是將離群值進行調整 類別型資料編碼 標籤編碼(Label Encoding): 類似編列流水號概念,依序將新出現的類別編新代碼。 已出現類別編上已使用的代碼,缺點是該數值大小順序皆無意義。 假設我們有一個「顏色」變數,將 red 指定為 0 、 green 為 1 、 blue 為 2 。 獨熱編碼(One Hot Encoding): 為改良數字大小無意義問題,將不同類別分別獨立為一欄。 缺點是當類別數量越多時,會需要較大記憶空間與計算耗時成本。 假設我們有一個「顏色」變數,其具有三個標籤 red 、 blue 和 green 。為了讓機器學習算法能夠處理,這些標籤都必須轉換為數值形式。透過創建三個新欄位(每個欄位對應一個標籤)來實現,其中對應標籤的欄位使用 1 ,其他顏色欄位則使用 0 。 時間特徵分解:時間欄位該怎麼做處理、劃分呢(週期循環特徵) 最直覺方法就是依照原始意義來分欄處理,或加上第幾週or星期幾。 但是某些欄位(例如:時分秒)和目標值關係極低,是否有更有意義的特徵呢? 可透過週其概念來合成一些重要特徵 聯想有哪幾種...

Windows作業系統環境下安裝Ruby_Wikipedia語料庫截取純文本wp2txt_WikiExtractor_gensim解析讀取wiki資料

圖片
Ruby預設環境會有類似node.js的npm install的cli  (定位就跟微軟開發者在用的nuget差不多、或python的pip install....) 叫做gem 相關Ruby開源套件貢獻者會在此網站平台做釋出 https://rubygems.org/ 在一些自然語言語料庫收集任務最為知名的就是維基百科 https://dumps.wikimedia.org/ 當然要注意的是wikimedia有對下載者進行了速率限制,並將每個 IP 位址的連線數上限設為 3 個。目的是確保每個人都能以合理的下載速度存取檔案。 在這邊要從官方網站的Database backup dumps進去 也就是所有跨語言的公開WIKI媒體資料完整副本,以嵌入 XML 的維基文本來源檔案和元資料形式提供。 官方有釋出dumps出來的文本壓縮檔無法直接解析需要特殊前處理 https://dumps.wikimedia.org/backup-index.html 看 Wikipedia 網域抓語言代碼: https://en.wikipedia.org/ → enwiki https://zh.wikipedia.org/ → zhwiki https://ja.wikipedia.org/ → jawiki 比方說 日本語言的最新dumps資料網址 https://dumps.wikimedia.org/jawiki/latest/ 英文語言的最新dumps資料網址 https://dumps.wikimedia.org/enwiki/latest/ https://dumps.wikimedia.org/enwiki/20260201/ 中文語言的最新dumps資料網址 https://dumps.wikimedia.org/zhwiki/latest/ https://dumps.wikimedia.org/zhwiki/20260201/ 舉例這邊針對英文和中文各自bz2做下載 enwiki-latest-pages-articles.xml.bz2 zhwiki-latest-pages-articles.xml.bz2 wiki中文語料庫僅3GB相較英文WIKI的23.2G來的小很多 Solution1. wp2txt 剛好涉及到裝wp2txt https://...

[論文筆記]Skip-Thought Vectors_將句子或片語(而非單詞)向量化

圖片
在導讀此篇論文筆記之前,還需要有RNN、LSTM等先備知識。 https://arxiv.org/pdf/1506.06726 Skip-Thoughts  使用跳躍思維模型 與 word2vec 相當相似是一種自然語言處理模型,但不是一次將個別單詞轉換為向量。 取而代之,將整個句子作為單位轉換為向量。 主要理論是去取得一個自然語言語料庫,並找出哪些句子傾向於彼此相鄰出現,然後訓練一個神經網路,使其能預測哪些句子預期會出現在任何其他句子之前或之後。 研究問題 這項研究試圖解決的核心問題是:如何在這個缺乏標註數據的狀況下,學習出高品質、通用且分佈式的句子表示向量(Distributed Sentence Representations)? 在當時,雖然詞向量(Word Vectors)已經能透過非監督學習取得很好的效果,但句子向量的學習大多仍依賴「監督式任務」(Supervised tasks),例如情感分析或邏輯推理 。 這導致模型學習到的特徵往往只針對特定任務有效,缺乏通用性。雖然 Paragraph Vector 是一種非監督替代方案,但它在測試階段需要進行推論來計算新句子的向量,效率較低 。 作者希望創造一種「隨取隨用」(off-the-shelf)的編碼器,能將任何句子映射成向量,並直接應用於各種下游任務 Skip-Thought Vectors採用的encoder-decoder結構,會先將輸入句子的單詞序列進行編碼,並依序預測前後文句的單詞作為輸出。通過學習句子與其前後文句之間的共現關係,Skip-thought 能夠獲得句子編碼結果的數值向量(Skip-Thought Vector),可視為是對單詞向量合成方法本身的學習。 研究背景 Skip-thought 是由 Ryan Kiros 等人於 2015 年提出的一種深度學習演算法,用於將文檔中的句子表達轉換為數值向量。該演算法的特點在於採用無監督學習方式,因此在學習過程中無需標籤或註解過的文本。只要存在由有序句子組成的文檔,即可基於此進行學習並建立模型。 此篇論文研究的靈感主要來自於詞嵌入模型,但其演算法與 Word2vec 有很大的不同。 在 Word2vec(skip-gram)中,主要是透過對輸入詞彙預測其周邊位置的詞彙,來學習詞彙之間的共現關係。 從詞到句子: 既然 Skip-gram...