GitHub機器學習100天自學專案,內容強大學了保證一生平安!

 

【我們為什麼挑選這篇文章】不少人下定決心在四個月內提升編程能力,但更多人半途就放棄。

自學路上孤單、寂寞覺得冷時,在 GitHub 上有人發起接力挑戰百日編程計畫,號召一群勤奮向學的人響應活動。

怕你勇氣下的不夠重,活動還規定每個參賽的人要公開打卡,讓大家一起督促你,在眾人面前宣示你的決心,讓你更有動力!(責任編輯:鄧天心)

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

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

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

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

開發者大大 2019 年一年平安
找出你的雲端技術優勢,做檢測>>點我<<

積跬步、至千里。


而且參加這個活動,還要使用#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做散點圖,給訓練集和測試集都做一下,看看預測結果是不是接近真實。

訓練集可視化:

1 plt.scatter(X_train , Y_train, plt.scatter(X_train , Y_train, colorcolor == ”redred”)
2 plt.plot(X_train , regressor.predict(X_train), ) plt.plot(X_train , regressor.p color =’blue’)
測試集可視化:

1 plt.scatter(X_test , Y_test, color = ‘red’)
2 plt.plot(X_test , regressor.predict(X_test), color =’blue’)

兩件需要提醒的事

總之,大概就是上面這個樣子。部分已經放出的信息圖集合如下,大家可以預覽一下。
如果你也想入門或者提升自己的機器學習能力,不妨試試跟著這個小哥一起學習進步。雖然這個項目全是英文,但並不晦澀高深,說不定還能順便提高一下英文水平,以後讀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天挑戰,有沒有你合適跟隨的,或者全新啟動你的挑戰。

__

(本文經合作夥伴 量子位 授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈火爆GitHub:100天搞定機器學習編程,超讚信息圖+代碼〉,圖片來源:Pixnio,CC licensed。)

延伸閱讀

「我寫不出 Code 了!」有沒有方法重新發現可憐工程師的生產力

給工程師的投資入門手冊:Python、R 哪個才是你最適合用來理財的程式語言?

10 萬名工程師的真心話:2018 最符合世界趨勢的程式語言是?