每日最新頭條.有趣資訊

火爆GitHub:100天搞定機器學習編程

問耕 栗子 發自 麥蒿寺

量子位 出品 | 公眾號 QbitAI

你是想喝一輩子糖水,還是想用AI改變世界?

但怎麽想是一回事,怎麽做往往是另一回事。學習和健身一樣,不少人都停留在口頭上,有各種借口不曾付諸實施。

為此,YouTube網紅Siraj Raval發起了一個挑戰賽:#100DaysOfMLCode。

這個挑戰賽意在號召大家行動起來,從參與活動的那天起,每天至少花費1小時的時間來學習提升或者應用編程,連續堅持100天,從而更好的理解和掌握機器學習這個強大的工具。積跬步、至千里。

而且參加這個活動,還要使用#100DaysOfMLCode這個標簽,在社交平台每日“打卡”,公開記錄自己的工作。

你想在這100天裡學到什麽,或者完成一個項目全憑自主決定。大家的選擇五花八門,其中有一個小哥的學習計劃,很快引發大家的關注。

這個小哥名叫Avik Jain(重名的不少),他的百天計劃,是從機器學習的基礎概念起步,逐層遞進,內容比較適合初學者。

這個100天搞定機器學習編程的項目,現在已經是爆紅GitHub,很快累積了3000多標星,在Twitter上,也有一大票人熱捧這個項目。

同是百天計劃,這個有什麽特別之處?三點:

1、超讚的學習圖片

2、配套的代碼

3、相應的數據集

對這個項目的評價,多以awesome、great、fantastic、outstanding、perfect等評價,大家紛紛表示感謝(並祝樓主好人一生平安)。

項目地址在此:

https://github.com/Avik-Jain/100-Days-Of-ML-Code

請你一定收藏好。

目前作者的100天計劃,已經進行到第25天,已有的內容包括:

數據預處理、線性回歸、邏輯回歸、K最鄰近算法、支持向量機、深度學習專項課程等,最新的內容已經講到決策樹及實現等。

量子位摘錄其中的部分內容,做個示例。

第一天

看上去,真是美好的一天。

第一步:導入一些庫

Numpy和Pandas這兩個,是非常重要的庫。

Numpy裡面有各種數學函數,Pandas是用來導入數據集、管理數據集的。

第二步:導入數據集

數據集通常是.csv格式。CSV檔案,是把表格數據,存儲成純文本。每一行是一個數據記錄 (Data Record) 。

在Pandas柯瑞面,用read_csv的方法,來讀取本地的CSV檔案,每個檔案是一個數據幀 (Data Frame) 。

給每個數據幀裡的自變量和因變量,分別做矩陣和向量。

第三步:處理缺失數據

我們獲取的數據,通常是異構數據。導致缺失數據 (Missing Data) 的原因有很多,需要處理一下,模型的表現才不會減損。

可以把缺失的數據,用整列數據的平均值或者中位數代替。拿sklearn.preprocessing裡的Imputer來處理。

第四步:編碼分類數據

分類數據 (Categorical Data) 裡的變量,不包含數值,隻包含分類標簽

比如,是/否,性別,婚姻狀態,這樣的變量,是沒辦法當成數值直接運算的。

所以,才需要把它們編碼成能夠運算的數值。用sklearn.preprocessing裡面的LabelEncoder就可以了。

創建個虛擬變量:

第五步:分開訓練集和測試集

要把數據集分成兩半,一個當訓練集,另一個當測試集。

一般來說,可以按80/20這樣分,訓練集大一些。用sklearn.crossvalidation裡面的train_test_split()來分,就行了。

第六步:特徵縮放

大部分機器學習算法,都會拿兩個數據點之間的歐幾裡得距離 (Euclidean Distance) 做計算。

這樣一來,如果一個特徵比其他特徵的範圍值更大,這個特徵值就會成為主導。

而我們希望其他特徵,也得到同等的重視,所以用特徵標準化(Feature Standardization) 來解決這個問題。

sklearn.preprocessing裡面的StandardScalar,就派上用場了。

第二天

今天,要做的是簡單線性回歸(Simple Linear Regression) 。

就是拿已知的那些 (x,y) 數據點,做出一條線性的趨勢,來預測其他x值,對應的y。

第一步:數據預處理

其實,就是把第一天做過的事情,複習一下:

· 導入一些庫

· 導入數據集

· 處理缺失數據

· 把數據集分成訓練集和測試集

· 特徵縮放的話,交給庫了

第二步:擬合訓練集

要把數據集,擬合到簡單線性回歸模型裡面去,可以用sklearn.linear_model裡面的LinearRegression來解決。

LinearRegression裡面,建一個叫做regressor的對象。

然後,把regressor擬合到數據集裡去,用fit()就行了。

第三步:預測結果

現在,用測試集來預測一下。

把輸出存到一個向量Y_pred裡面。然後,用LinearRegression裡面的預測方法,來支配上一步訓練過的regressor

第四步:可視化

最後一步,就是給預測結果做個可視化。

matplotlib.pyplot做散點圖,給訓練集和測試集都做一下,看看預測結果是不是接近真實。

訓練集可視化:

測試集可視化:

兩件需要提醒的事

總之,大概就是上面這個樣子。部分已經放出的資訊圖集合如下,大家可以預覽一下。

如果你也想入門或者提升自己的機器學習能力,不妨試試跟著這個小哥一起學習進步。雖然這個項目全是英文,但並不晦澀高深,說不定還能順便提高一下英文水準,以後讀paper也用得到~

還有兩件事,需要提醒一下。

1、這個項目已經開始漢化了

@zhyongquan 在GitHub上已經開始嘗試中文版,效果如下圖所示。

不過目前隻進行了第一天內容的漢化。如果你感興趣,可以持續關注,或者加入漢化的行動中。地址在此:

https://github.com/Avik-Jain/100-Days-Of-ML-Code/issues/8

2、項目內容不能盲信

盡信書不如無書。這個學習項目,也不是百分百完全正確,比如第四天講邏輯回歸時的右下角配圖,就被指出存在錯誤。

作者也承諾將更新改正這個問題。

就醬。

最後,再發一次這個項目的地址:

https://github.com/Avik-Jain/100-Days-Of-ML-Code

請你一定收藏好,如果能開始學習那就更好啦。

如果這種偏入門的內容不適合你,還有更多進階或者具體項目實現的100天計劃可供參考,希望能幫助你精進。

比方#100DaysOfMLCode挑戰賽發起人Siraj Raval,就選擇了在100天裡,使用機器學習技術,根據氣溫、降水、植被變化等因素,預測每周的登革熱疫情,改善防疫的研究計劃和資源分配。

你也可以選擇其他項目,或者在Twitter、GitHub等看看別人的100天挑戰,有沒有你合適跟隨的,或者全新啟動你的挑戰。

對了Siraj Raval還在GitHub和YouTube上發布過很多其他機器學習課程,例如三個月學習機器學習,六周入門深度學習等。

相關地址在此:

https://github.com/llSourcell

總之,原則就是每天進步一點點。

加油。

獲得更多的PTT最新消息
按讚加入粉絲團