Windows Subsystem for Linux (WSL) – 在你的 Windows 裡面有個 Ubuntu 環境!

身為一個 “會寫程式的人”,程式就是要在 Linux 上面跑~! 好,我們今天要來跟各位介紹如何在 Windows 上擁有一個 Linux 的環境。我們從大一上的 C 語言裡就是在一個 Linux 的環境上執行我們的程式碼。而為什麼蕭北北要我們使用 Linux 呢? 其實在開發軟體的時候,大多數的時候我們都會選擇用 Linux 是因為在架設環境上,它相比 Windows 來得簡單並且相容性高(真的…),並且它是免費以及開源(Free and Open Sourced),因此很多公司都會用 Linux 來當後台。但是大家永遠都離不開 Windows(因為 Office 太好用了)。好消息是,Microsoft 在 Windows 10 裡讓我們可以按一鍵(差不多一鍵)就可以有一個可以跑起來的 Ubuntu 了~(沒錯,不用虛擬環境 VM 哦~ 首先,我們需要先到 控制台 > 程式集 並且將 Windows 子系統 Linux 版。勾起了並按確定之後,Windows 會提示你需要重開機。重新開機了之後再繼續接下來的安裝環節。這個設定過程是必需的,不然等等會跳出錯誤訊息哦~ 重新開機後,我們接下來可以到 Start 裡面開啟 Microsoft …

深度學習 – 理論篇:(2) 機器學習 101

我們在上一篇文章討論過了很多跟“學習”相關的專有名詞,我們這次要來討論一些在訓練模型的時候會很長看到的名詞(沒錯,我們還在名詞解釋的階段。但是這次所提到的專有名詞會跟實際操作/評估模型上會比較有關。 What are learning models? 我們首先要討論的東西就是模型。我們上次說機器學習是透過大量的資料(“經驗”)來學習一個任務。這些模型會根據一個目標函數(Objective Function)來學習如何完成一個特定的任務(分類、回歸、分群、關聯法則等)。並希望未來套用模型到同一個的任務上,也可以表現得不錯。 剛剛提到了目標函數,也有人會稱它為 Loss Function 或 Cost Function。原則上這幾個名詞是有差別的,但大家在平時對話時都會交替使用。目標函數主要衡量兩個東西: 損失(Loss): 衡量模型對訓練資料的表現(Measures how well the model fits on the training data) 正規化(Regularization): 衡量模型的複雜度(Measures the complexity of the model) Bias vs. Variance 我們在建造模型的時候會用 Bias 和 Variance 來形容一個模型有怎樣的失誤。如果我們的模型太複雜的話,會造成我們的模型 Variance 太高。而會在我們的訓練資料集 Overfit(在訓練資料表現得很好,而在測試資料表現得很差)。 如果我們的模型太簡單,則會造成我們模型過於 Biased。而會在我們的資料集 Underfit(無法做出穩定的判斷,換句話說就是亂猜啦)。 這也就是傳說中的 Bias-Variance Trade-off。我們會希望我們所訓練出來的模型會有適當的 Bias 和 …

大家一起學 Java (1) – 環境安裝

資管系的程式之路如同學生想要打敗大魔王。而這個大魔王,也就是楊 未來的專題啦… 從物件導向程式設計、遊戲設計、專案開發,課程中所用到的語言都脫離不了 Java 和 C# 這兩個物件導向程式語言。很多軟體也是利用物件導向的邏輯來開發的, 而且這些物件導向的概念也對各位未來開發很有幫助哦~ 但在開始進入撰寫前,我們要先把 Java 裝起來,不然寫個屁咧… 因為 Java 會有版權問題,因此我們選擇開源並且有長期維護(Long Term Support, LTS)的 AdoptOpenJDK。 下載 使用 Windows 的小朋友們可以就直接到 AdoptOpenJDK 的官網上面下載選擇你要的 JDK 和 JVM 按下載就可以安裝了。我們就統一選擇最新的 LTS 版本 OpenJDK 11 和 AdoptOpenJDK 自己寫的 HotSpot JVM。通常 LTS 版本會比較穩定,因為會長期在維護。 對了,安裝的過程中已經提示會將 JDK 的路徑設置到 PATH 環境變數。因此,可以直接在指令界面下 java 和 javac。若有需要,可以到 控制台 -> 系統與安全 …

大家一起學 JavaScript – (1) 環境安裝

從來沒想過大鳥會寫 js 的文章(Python 最棒,來啊來戰啊。但是因為目前實驗室網頁掛掉了,被推坑要在短時間內幹出一個靜態網頁。因此,在這系列文章會先以架設網頁為主;再將一些 js 用來協助網頁前後端的套件和 function。 以此文章獻給六角學院校長,廖洧杰學長這學期開始不在高大開課了 QQ Introduction 在 1994 年時,全球資訊網(World Wide Web, WWW)開始普及化時。這時候瀏覽器(Web Browser)所呈現的網頁都是以靜態的 HTML 和 CSS 所渲染出來的。這時後的瀏覽器霸主 Netscape 想在瀏覽器裡面導入一個可以讓瀏覽器執行的 Scripting Language,JavaScript 就在此誕生了,成為瀏覽器主要核心技術之一。但是這一版的 JavaScript 只能在客戶端(Client-side,這裡指瀏覽器)執行。直到 2009 年 Node.js 的推出,才開始增長。 後來 JavaScript 的社群也不斷的在增長,並很多年都在 StackOverflow 和 GitHub 的調查中獲取最受歡迎的語言。所以… 我應該不需要再介紹為什麼我們要學 js 了。 nvm 我們會在這系列的文章中會使用 Node.js 為我們的編譯器/執行環境(Interpreter/Runtime Environnt)。因為 Node.js 更新速度還蠻快的,而且加上為了可以執行舊版的 Node.js,我們會常使用。Node …

大家一起學 Python – (14) XGBOOST: Kaggle 之王道

Kaggle 是一個開放的機器學習比賽平台。裡面有成千上萬的機器學習相關的比賽,而比賽很常都是由大公司如: Google,Microsoft 所舉辦。如果在某個比賽得了前三名的話,你不但可以獲得獎金,甚至可以把經歷放到履歷裡面讓自己變得很香。重點是我們這群普通人還有一堆 label 過的 data 可以使用。 在過去的比賽中,最常用到的模型都是屬於 Ensembled Trees 類型,最有名的就是傳說中的 Random Forest。但在 2016 年,一個 KDDCup 大大,華盛頓大學資工系博士生,Tianqi Chen(不知道中文名)提出了 XGBoost,並且屌打了過去的演算法,並稱霸 Kaggle 的天下。雖然如今 Kaggle 也快被 Neural Network 佔領地位了,但是還是有很多人都還是會先用 XGBoost 來當成 baseline,或最終模型。 在繼續解釋前,我們要先講解一下一些決策樹基本概念。決策樹很適合用在表類數據,只要找到正確的 feature 來做 splitting, 基本上都會有很高的準確率;並且它的可譯性高,因此很受歡迎。樹長得越深,代表模型長得越複雜,這樣會降低效率,甚至可能造成這棵樹不夠 generalized,使得它很容易 overfit。反之,樹長得太淺複雜度降低,雖然會很有效率,但是會很有可能造成 variance 太大,所給的答案是亂猜的。 那我們稍微來介紹一下什麼是 XGBoost。 Define: eXtreme Gradient Boosting 正如上次的介紹,我們每次在使用一個模型前,要稍微對模型有個了解。我們在上面稍微提到了,XGBoost 為 Ensembled Trees 的一種,因此它是背後的演算法也是基於一組 …

大家一起學 Python – (13) scikit-learn: Decision Trees

我們之前所學的基本 Python 的語法與套件都是為了這一刻吧… (不是變強嗎?)沒錯,我們要變超人了,也就是跳入機器學習/深度學習系列的 Python 套件/程式碼了~ 當然,這系列的文章並非機器學習的教學,因此在此不會先不考慮解釋一些理念的東西。有興趣的朋友都可以到這裡閱讀我其他的文章。在程式碼的部分,這系列的文章主要是為了要讓大家可以快速入門如何使用套件,不一定會是解決這些的問題的最佳方式。後面就只能靠大家的想像力了(讀多一點paper。 scikit-learn(a.k.a sklearn) 在入門機器學習時,我們通常都會先利用 scikit-learn 的套件來對現有的資料做一些快速的觀察。他集合了非常多機器學習/資料探勘所會用到的技術。而我們只需要呼叫 API 就可以了~ 感謝大大,讚歎大大~ 在機器學習裡面,對初學者來說最容易理解的分類模型就是決策樹(Decision Tree)。顧名思義,我們可以猜出這個模型就是透過資料中的屬性經過一系列的 if … else … 判斷式來找出標籤。而我們等等也會透過一些外掛套件來劃出我們的樹,並且再從中可以更理解我們呼叫的模組到底在做什麼。我們這次會使用在之前 Pandas 教學 裡面鐵達尼號的資料集,並且對這個資料集做出預測死亡的模型。 # 安裝 scikit-learn 模組 pip install scikit-learn # 下載資料集 curl http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic3.csv Prerequisites 下載完所需要套件以及資料集之後,我們就可以來開始寫 Code 了啦。 # 載入所需要的模組 from sklearn.metrics import classification_report from sklearn.model_selection import train_test_split …

深度學習 – 理論篇:(1) 什麼是學習?

深度學習在 2012 年 ImageNet 震撼了全世界,人工智慧與深度學習這個飛機已經停不下來了。而在這個人工智慧(AI)都被各行各業拿來當成騙人用的流行詞時,身為資管系的我們要知道什麼是 AI 才可以騙無知的愚民不會被騙。那麼我們先來探討一些詞。 名詞解釋 人工智慧(Artificial Intelligence, AI): 這個名詞主要是從 Alan Turing 1950 年在他的論文中所提出的一個問題: "I propose to consider the question, ‘Can machines think?’" 所激發出來的。後人就都把利用電腦(機器)來模擬人類 解決問題 和 經驗學習 統稱為人工智慧。有興趣的話可以再從一個更哲學的角度去探討這個問題。 "It is the science and engineering of making intelligent machines, especially intelligent computer program" — John McCarthy,人工智慧之父 機器學習(Machine Learning): 從人工智慧的定義中,我們很容易就可以推出機器學習是讓電腦在沒有明確的撰寫指令的情況下從過去的經驗中學習。學習的方式有很多種,例如:決策樹(Decision …

大家一起學 Python – (12) Pickle

就如醃黃瓜可以存放一段時間,我們也希望程式裡面的一些 Session,Data,甚至是學習結果,都可以存到冰箱裡面(蛤?沒錯,我們今天就要跟大家介紹 Python 的 Pickle 套件~ 環境安裝 pip install pickle 我們通常在使用 Pickle 的時候都會用 Pickling 這個詞;其實 Pickle 實際上是在對 Python 物件(Objects)做 Serialization/Deserialization。序列化基本上是將一個在記憶體裡的物件轉換成一個字節串流(byte stream)方便做儲存或存取。可序列化的東西有一些基本變數如:int,float,str,tuple,list,set,dict 和模組中的 top-level class/function。 看到 Serialization 的時候大家可能一時會想到 JSON,Pickle 跟 JSON 大致上是同樣的概念。只是差別在於 Pickle 是 Python 專屬的序列化,並且也沒有 JSON 的可讀性。 Pickling 大概知道 Serialization 的基本概念之後,我們來開始實作吧~ 我們在範例程式碼做的東西基本上就是開啓一個新的 .pickle 檔案開起來,並且將我們在上面初始化的 KNN 模型儲存到 knn.pickle 裏面。現在可以到程式目錄地下查看是否有這個檔案,並且如果用記事本打開的話會有亂碼。過了一個永恆, 如果要再呼叫這個模型的話,只需要開啓之前的 .pickle …

大家一起學 Python – (11) Matplotlib

我們在做一些做一些資料分析的時候,經常面對的是一堆完全無法理解的數字數據;就算你看得懂,你老闆也未必想要聽你慢慢解釋這些數據到底代表什麼東西。因此,如果我們可以做出來一個圖表,把這些數據做視覺化(data visualization)。這個時候就算你老闆不知道你在工三小,至少他可以一眼看得出來你有做一些數據整理。Matplotlib 就是在 Python 裡最常拿來做數據視覺化的套件;我們甚至可以用它來畫出一個 3D 的圖表哦~ 環境安裝 <span class="hljs-attr">pip</span> <span class="hljs-string">install matplotlib</span> 跟上一門 Pandas 的一樣,我們會在 notebook 上面做練習。這樣圖表可以直接在 code block 下面呈現出來,比較好看。我們主要都會用 matplotlib 裡面的 pyplot submodule,並把它匿名為 plt。之後會看到一個比較奇怪的指令 %matplotlib inline,這種 % 的指令是叫 magic function,只會在這種 .ipynb 系列的環境出現。而這個指令是讓 matplotlib 的圖表可以直接在環境裡顯示出來。 <span class="hljs-keyword">import</span> matplotlib.pyplot <span class="hljs-keyword">as</span> plt %matplotlib inline plt.plot() 我們首先來畫一個線型圖表。首先我們要透過 plt.plot() 方法宣告一條線,每次呼叫一次 plt.plot() 我們的圖表就會多一條線。並且傳入 …

大家一起學 Python – (10) Pandas

Pandas(不是熊貓)是 Python 裡很常用來做資料分析、處理和操作的 library。我們可以直接通過它內建的方法,將一個 .csv 或資料庫,並把它變成很像 excel 的東東(data frame)。那我們就趕快來進入主題吧~ 安裝環境 安裝指令: pip install pandas 我們在這次的教學環境會使用 Jupyter Notebook 來操作。如果在 VSCode 或者 Terminal 上操作的話有一些指令可能需要再包到 print() 裡才可以看到哦~ read_filetype() 我們通常在做資料分析的時候,會比較常碰到 .csv(comma-separated values) 檔。如果有興趣玩玩看一些 data 的話,可以到 kaggle 去申請一個帳號來玩玩。但為了這個教學比較有實作的感覺,我們就先到這裡下載很有名的鐵達尼號的資料集~ 感謝 Vanderbilt 大學無私貢獻 先將我們剛才下載的 titanic3.csv 放到跟我們程式碼同樣一個資料夾。我們再透過 pd.read_csv() 讀取 .csv 檔裡的資料成一個 data frame 物件。並且,我們可以透過 data frame 的內建方法 head() …