發表文章

目前顯示的是 2021的文章

如何得到和 Anaconda 的 Jupyter Notebook 一樣的使用者體驗但卻不需安裝 Anaconda ?

圖片
 身為一個資料科學家或是機器學習工程師,Jupyter Notebook 是必不可少的好用工具,而 Anaconda 則是在入門這個領域的時候為了減少痛苦而安裝的一個龐大軟體。 但實際上大部分時候我們只需要 Anaconda 中的 Jupyter Notebook,而不是它內含的其他東西以及Python 環境選擇 (我不如用 pipenv...),若是你像我一樣希望捨棄笨重的 Anaconda,但又希望獲得同樣的體驗,而不是每次都要打開 terminal,輸入 Jupyter Notebook 才能打開的話,這篇會是一篇適合你閱讀的文章。 Anaconda 上的體驗是怎樣的? 若是以只使用 Jupyter Notebook 為前提的話,它主要的方便在於安裝 Anaconda 之後會自動產生一個 Jupyter Notebook 的捷徑在開始工具欄,當你需要使用的時候就直接點開就好。而不用打開 terminal 打字什麼的。 (我很在意這個所以一直被 Anaconda 綁架......)  除此之外,Anaconda 的 Jupyter Notebook 路徑是固定的,每次開啟都會在 username 那個資料夾裡面,所以我得因此被其綁架而得把所有資料和 Notebook 都放在那個資料夾裡面。 所以,接下來就要開始如何將 Jupyter Notebook 以一個有 icon 的桌面捷徑開啟而且還可以基於開啟的路徑而開啟的教學。 安裝 Jupyter Notebook pip install notebook 建立 Jupyter Notebook 捷徑 首先要在桌面上右鍵新增 -> 建立捷徑,然後在項目位置中打入  cmd /k "jupyter notebook" , 如下圖。 然後就將捷徑命名為 jupyter notebook,或是其他你喜歡的名字,像是 AI 煉蠱場之類的。 這串項目位置的意思是當點擊這個捷徑的時候會做兩個動作 :   1. 打開 cmd   2. 自動打入 jupyter notebook 改變 Jupyter Notebook Icon 這步很簡單,總之就是去下載 jupyter notebook 的 icon (記得轉成 .ico 檔名),然後...

時間序列資料的交叉驗證方法 Cross Validation on Time Series data

圖片
最近接了一個跟時間序列資料預測有關的case,也因此開始惡補一些跟時間序列有關的知識。時間序列資料其實和正常的資料相比來說有許多不同的地方需要小心處理,其中一個我自己挺有印象的就是驗證方法上的不同,因此打算寫一篇 blog 來介紹幾個能夠在時間序列上使用的驗證方法。 為什麼正常的交叉驗證不可行? 這是因為正常的過程是基於 隨機 的切分資料,不論是 Boostrapping resampling, k-fold 或是 stratified k-fold 等等都一樣。想像如果你將一群有時間前後關係的資料打亂,可能會因為隨機性而拿未來的資料來預測過去,拿現在的資料預測過去,這在機器學習上完全不合理,因此我們必須用其他方法來避免掉這種 future-looking 的預測方式。 Walking Forward (Time Series Split ) Cross-Validation 既然我們只需要避免 future-looking,那麼我們的交叉驗證方法 只需要確保使用的訓練資料其時間是早於測試資料即可 。 舉一個例子來說,比如有一個時間序列資料集,照時間順序排列包含 [1, 2, 3, 4, 5] 第一個 iteration : Training: [1] , Test: [2] 第二個 iteration : Training: [1, 2], Test: [3] 第三個 iteration : Training: [1, 2, 3], Test: [4] 第四個 iteration : Training: [1, 2 ,3, 4], Test: [5] 最後將四個 fold 的模型表現平均起來就得到交叉驗證的最後結果 這種方法不僅能達成交叉驗證的核心思想,也就是要把所有資料都至少掃過一遍來驗證,以避免資料的偏誤。同時也比不使用交叉驗證,只將整個資料切成兩半,以時間較早的作為訓練,較晚的作為測試的方式都好很多。 除此之外也能夠在不同時間線上測試模型的表現有沒有不一樣,以便之後能夠對那個時間所發生的事件做深入分析。 實作上可以參考  sklearn.model_selection.TimeSeriesSplit Blocked Cross Validation 相較於 Walk Forward CV,Blocked CV 完全隔開了訓練資料以...

【讀書筆記】特徵工程不再難

圖片
本篇文章為 特徵工程不再難:資料科學新手也能輕鬆搞定! ( Feature Engineering Made Easy. By  Sinan Ozdemir, Divya Susarla ) 之個人讀書筆記。 書中有提供程式碼,請見此 Github Repo ,但應該是 Python 2,我下面的程式碼都會改為 Python 3 版本。 特徵工程的評估步驟 先得到機器學習模型的 baseline performance 應用特徵工程 對於每一種特徵工程,獲取一個效能指標並和 baseline 相比較 如果效能的改進大於某個臨界值 (User defined),則認為這種特徵工程是有益的,並將其部屬到機器學習模型中 效能的改變通常是以百分比(%)為計 (如果 baseline performance 是從 40% 準確率變成 76% 準確率的話,改進就是 76-40 / 40 = 90% 評估監督式學習演算法?迴歸通常用 MSE,分類通常用 Accuracy 或是 AUC 評估非監督式學習演算法?主要用  輪廓係數(  silhouette coefficient ) 或是用統計檢定的相關係數、t-test、卡方檢定(Chi-squared tests)以及其他方法來評估並量化原始資料以及轉換後的資料的結果 特徵工程的技巧有哪些 特徵理解 : 學習如何辨識定量(數值型)和定性資料(分類型) 特徵改進 : 清洗和填補缺失值 特徵選擇 : 透過統計方法選擇一部分特徵以減少資料雜訊 特徵建構 : 建構新的特徵,探索特徵之間的互動 特徵轉換 : 提取資料中的隱藏結構,利用數學方法轉換資料集、增強效果 特徵學習 : 以深度學習來對資料進行學習,以此來更加地瞭解資料 特徵理解 資料結構分為結構化和非結構化 結構化資料指的是可明確將觀察值(Row)和特徵(Column)分開的資料 非結構化資料指的是不遵守標準結構 (表格) 的資料 通常判斷資料的第一個問題是,資料是定量還是定性的? 事實上,資料可以同時是定量和定性的,為了更明確的去區分開來,通常會分為四個等級 定類等級 (nominal level) : 第一個等級,結構最弱,屬於定性資料,比如血型的A、B、O、AB,動物物種和人名,通常可以畫出眾數(mode)以及長條圖(bar plot)...