發表文章

目前顯示的是有「資料探勘研究與實務」標籤的文章

推薦系統(Recommender Systems)筆記_4種推薦系統原理_矩陣分解深入理解

圖片
日常生活中常見到的像是新聞推薦、音樂推薦、電商產品推薦、電影推薦等等都是成熟的應用場景。 課堂上介紹到就稍微筆記一下 https://www.awoo.ai/zh-hant/blog/recommender/ 推薦系統原理基本上細分如下4種 根據內容的推薦系統->建構方式較耗時(X) 根據產品偕同過濾之推薦系統 根據矩陣分解的推薦系統 根據使用者偕同過濾之推薦系統 根據內容的推薦系統 以下有一個電影評分表分別由五位使用者根據四部電影做的評比 「評分紀錄表r」 如上表所示有些電影用戶尚未評分 電影推薦主要任務就是要預測使用者對於沒有評分電影的評分是多少 之後再根據該用戶的評分從高到低作排列 再將得分最高的幾部推薦給該特定用戶 另外還有所謂 「電影內容矩陣X」 我們會用上述兩個矩陣來求解出最終結果矩陣(用戶喜好矩陣 θ ) 公式如下: 通常評分紀錄表若該格子中用戶沒評分就會先填入0計算。 theta (j) 這個代表j用戶的喜好,是時尚算是一個向量,當中每個元素反映對不同類型影片喜好程度。 x的i次方:這個也是一個向量,裡面美元素代表隊於該部影片於不同種類占比。 最後面加上的正規化項是用來避免我們求出來的J (theta) 考試成績考太好,老師懷疑有作弊XDD,也就是過度擬合情況,可能會失真,藉由調整 λ ,目標就是讓代償(損失)函數最小化。 根據每部電影的內容以及用戶已經評分過的電影來推斷每一個用戶對每部電影的喜好程度,從而預測每個用戶對沒看過的電影評分! 困難點: 不過比較困難的點在於如何建構內容矩陣? 你要怎麼去評判一部片中它的愛情成分、打鬥成分、恐怖成分占比呢? 通常要藉由人為觀察,要去計算打鬥場景跟搞笑場景在整部片中佔據多長時間,想當然這過程十分耗時啦,此外電影、影集影片數目這麼多,這樣不太現實。 根據產品偕同過濾之推薦系統 用偕同過濾機制則是將評分表和用戶喜好矩陣做相乘運算 偕同過濾代價函數最終成形公式如下: 過程大致上會先有兩個矩陣 「評分紀錄表r」 「用戶喜好矩陣 θ 」 根據每個用戶對於每種電影類型的喜好程度以及用戶已經評分過的電影來推斷每部電影的內容,從而預測每個用戶對沒看過的電影評分。 電影內容矩陣 代價函數,公式如下: 可看到其實大致上是跟基於內容的機制是差不多的 差別只在於跟前一個公式相比是用每個電影來計算 困難點: 「用戶喜好矩陣 θ ...

原來CNN也能運用於NLP中

圖片
  當提及CNN一般普遍都會直覺聯想到在電腦視覺方面的應用。 而近幾年CNN也踏入自然語言處理,也有相當好的成績。 https://www.analyticsvidhya.com/blog/2022/03/basics-of-cnn-in-deep-learning/ 通常CNN要處裡應用於NLP的任務,往往需要以矩陣形式表達句子或文本。 (PS:因為CNN你要餵進去的格式要是矩陣) 矩陣中每一行對應一個分詞元素,通常會是一個單詞或是一個字符。 換言之,每一行都是一個詞或者字符的向量(比方word2vec) 假設共有10個詞,每個詞都用128維的vector表示,那就可得到一個10*128維度的矩陣。 如此一來這個矩陣就有點像是一幅影像。 Embedding層:一個7x5的矩陣,其中每row(橫列)是一個單詞的向量,即詞向量,詞向量的維度為5。(這邊用比較低的維度for好舉利用,通常可能用到128,256就會有128或256直行。) Convolution層:這里是一維卷積,卷積核寬度固定:即為詞向量維度(都是5個直行),卷積核的高度即一個窗口中包含的單詞的個數,這里的kernel_size=(2,3,4)即為一個窗口中分別可以包含2,3,4個單詞。然後每個kernel_size輸出2個通道,實際上是每類(包含單詞個數)卷積核的個數為2而已,再將卷積輸出的結果經過激活函數輸出 MaxPooling層(池化):每類卷積核輸出兩個通道,然後再取各個通道結果的最大值(MaxPooling),於是就得到了6個值。 FullConnection層:將MaxPooling層的輸出結果進行拼接構成一個全連接層的輸入,然後再根據分類類別數接上一個softmax層就可以得到分類結果了。 Ref: CNN在NLP的应用--文本分类 https://yxzf.github.io/2017/03/cnn-for-nlp-in-sentence-classification/ Convolutional Neural Network in Natural Language Processing https://towardsdatascience.com/convolutional-neural-network-in-natural-language-processing-96d67...

深入研究_Word2Vec兩種模型(CBOW , Skip-Gram)

圖片
 Word2Vec(詞向量) https://www.analyticsvidhya.com/blog/2017/06/word-embeddings-count-word2veec/ 一般在分析影像或語音普遍都是針對密集且高維度的資料集,比方RGB三通道,聲音波型。 所有需要的資訊都存儲於raw data中,可能是一維或者二維的。 而換作在自然語言問題處理方面,會先進行分詞,給每一個詞一個編號,比方 '貓' 的編號是120 , '狗'則是340等等。 比方 '女生' 的編號是1230, '女王'的編號是 2329。 而這些編號並沒有規律,更相互無關連。 我們無法從編號中得到詞和詞之間的相關性,此外詞資料十分稀疏並不密集。 比方以下這句 How are you ? How : 234 Are:  7 you : 987 因此Google 在2013 年由 Tomas Mikolov 等人有提出了一個研究論文 Efficient Estimation of Word Representations in Vector Space 介紹到關於word2vector的核心思想,可將一個詞轉為向量形式來表達。 比方以下向量幾乎平行距離又很相近,相近詞就較鄰近。 國家和首都 詞性相近詞距離較近(現在進行式和過去式) 兩種模型(CBOW , Skip-Gram) 連續詞袋模型(CBOW, Continuous bag-of-word Model) 根據詞的上下文詞彙來預測目標詞彙,例如上下文詞彙是"今天早餐吃..." 要預測的目標詞彙就可能是 "蛋餅"、"漢堡"、"燒餅油條"之類的。 Skip-Gram模型 剛好和CBOW相反過來,其透過目標詞彙來預測上下文。 比方目標詞彙是 "早餐" 則其上下文就有可能出現 "今天" 或是有 "吃麵包" 等等。 https://medium.com/%E6%89%8B%E5%AF%AB%E7%AD%86%E8%A8%98/%E4%BD%BF%E7%94%A8-tensorflow-%E5%AD%B8%E7%BF%92-softmax-%E5%...

資料探勘研究與實務_空氣品質預報Time Series Regression_part2

圖片
2. 時間序列 a.預測目標 1. 將未來第一個小時當預測目標 取6小時為一單位切割,例如第一筆資料為第0~5小時的資料(X[0]),去預測第6小時(未來第一小時)的PM2.5值(Y[0]),下一筆資料為第1~6小時的資料(X[1])去預測第7 小時的PM2.5值(Y[1])  *hint: 切割後X的長度應為1464-6=1458 2. 將未來第六個小時當預測目標 取6小時為一單位切割,例如第一筆資料為第0~5小時的資料(X[0]),去預測第11小時(未來第六小時)的PM2.5值(Y[0]),下一筆資料為第1~6小時的資料(X[1])去預測第12 小時的PM2.5值(Y[1])  *hint: 切割後X的長度應為1464-11=1453  b. X請分別取 1. 只有PM2.5 (e.g. X[0]會有6個特徵,即第0~5小時的PM2.5數值) 2. 所有18種屬性 (e.g. X[0]會有18*6個特徵,即第0~5小時的所有18種屬性數值)  c. 使用兩種模型 Linear Regression 和 XGBoost 建模  d. 用測試集資料計算MAE (會有8個結果, 2種X資料 * 2種Y資料 * 2種模型) 確定PM2.5的位置,因為這是我們的目標變量。 在此發現一個小問題就是多於空白 在檢索 'PM2.5' 索引之前先將所有測項的名稱進行空白處理。 這可以通過 strip 函數來移除字符串前後的空白字符。 第5階段程式碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 ...

資料探勘研究與實務_空氣品質預報Time Series Regression_part1

圖片
https://airtw.moenv.gov.tw/ 下載資料集 新竹地區2021年10~12月之空氣品質資料 https://airtw.moenv.gov.tw/CHT/Query/InsValue.aspx 預設載下來是一個CSV 第一行之"0"~"23"代表小時。 那這次作業給的檔案還滿混亂的 首先測項不僅PM2.5而是混雜著其他項目 再來時間區段是跨好幾個月份2021的1月到12月 # 表示儀器檢核為無效值,* 表示程式檢核為無效值,x 表示人工檢核為無效值,A 係指因儀器疑似故障警報所產生的無效值,空白 表示缺值。 然後還是一個.xls檔案 在一開始讀取時要指定engine為xlrd 若沒特別指定此時可能會報以下的錯 ImportError: Missing optional dependency 'xlrd'. Install xlrd >= 1.0.0 for Excel support Use pip or conda to install xlrd. 假設你指定了仍報錯,就需要再補pip install一下。 在Spyder中要補其他套件方式在console下指令即可 看到dataframe讀取進來了真好 第1階段程式碼 1 2 3 4 5 6 import pandas as pd # 讀取檔案 file_path = r'E:\交大學分班\557607資料探勘研究與實務\HW3_11134225_周冠羽\新竹_2021.xls' data = pd.read_excel(file_path, engine= 'xlrd' ) 資料前處理  a. 取出10.11.12月資料  b. 缺失值以及無效值以前後一小時平均值取代 (如果前一小時仍有空值,再取更前一小時)  c. NR表示無降雨,以0取代  d. 將資料切割成訓練集(10.11月)以及測試集(12月)  e. 製作時序資料: 將資料形式轉換為行(row)代表18種屬性,欄(column)代表逐時數據資料 我們資料剛剛有說過充斥著 # 表示儀器檢核為無效值  * 表示程式檢核為無效值  x 表示人工檢核為無效值 A 指因儀器疑似故障警報所產生的無效值 空白 表示缺值。 第2階段...