火爆GitHub:100天搞定機器學習編程(超讚信息圖+代碼+數據集)

問耕 栗子 發自 麥蒿寺

量子位 出品 | 公眾號 QbitAI

火爆GitHub:100天搞定機器學習編程(超讚信息圖+代碼+數據集)

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

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

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

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

火爆GitHub:100天搞定機器學習編程(超讚信息圖+代碼+數據集)

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

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

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

火爆GitHub:100天搞定機器學習編程(超讚信息圖+代碼+數據集)

這個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最鄰近算法、支持向量機、深度學習專項課程等,最新的內容已經講到決策樹及實現等。

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

第一天

火爆GitHub:100天搞定機器學習編程(超讚信息圖+代碼+數據集)

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

第一步:導入一些庫

火爆GitHub:100天搞定機器學習編程(超讚信息圖+代碼+數據集)

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

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

1 import numpy as np

2 import pandas as pd

第二步:導入數據集

火爆GitHub:100天搞定機器學習編程(超讚信息圖+代碼+數據集)

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

在Pandas庫裡面,用read_csv的方法,來讀取本地的CSV文件,每個文件是一個數據幀 (Data Frame) 。

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

1 dataset = pd.read_csv('Data.csv')

2 X = dataset.iloc[ : , :-1].values

3 Y = dataset.iloc[ : , 3].values

第三步:處理缺失數據

火爆GitHub:100天搞定機器學習編程(超讚信息圖+代碼+數據集)

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

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

1 from sklearn.preprocessing import Imputer

2 imputer = Imputer(missing_values = "NaN", strategy = "mean", axis = 0)

3 imputer = imputer.fit(X[ : , 1:3])

4 X[ : , 1:3] = imputer.transform(X[ : , 1:3])

第四步:編碼分類數據

火爆GitHub:100天搞定機器學習編程(超讚信息圖+代碼+數據集)

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

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

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

1 from sklearn.preprocessing import LabelEncoder, OneHotEncoder

2 labelencoder_X = LabelEncoder()

3 X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])

創建個虛擬變量:

1 onehotencoder = OneHotEncoder(categorical_features = [0])

2 X = onehotencoder.fit_transform(X).toarray()

3 labelencoder_Y = LabelEncoder()

4 Y = labelencoder_Y.fit_transform(Y)

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

火爆GitHub:100天搞定機器學習編程(超讚信息圖+代碼+數據集)

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

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

1 from sklearn.cross_validation import train_test_split

2 X_train, X_test, Y_train, Y_test = train_test_split( X , Y , test_size = 0.2, random_state = 0)

第六步:特徵縮放

火爆GitHub:100天搞定機器學習編程(超讚信息圖+代碼+數據集)

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

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

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

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

1 from sklearn.preprocessing import StandardScaler

2 sc_X = StandardScaler()

3 X_train = sc_X.fit_transform(X_train)

4 X_test = sc_X.fit_transform(X_test)

第二天

火爆GitHub:100天搞定機器學習編程(超讚信息圖+代碼+數據集)

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

火爆GitHub:100天搞定機器學習編程(超讚信息圖+代碼+數據集)

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

第一步:數據預處理

火爆GitHub:100天搞定機器學習編程(超讚信息圖+代碼+數據集)

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

· 導入一些庫

· 導入數據集

· 處理缺失數據

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

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

1 import pandas as pd

2 import numpy as np

3 import matplotlib.pyplot as plt

4

5 dataset = pd.read_csv('studentscores.csv')

6 X = dataset.iloc[ : , : 1 ].values

7 Y = dataset.iloc[ : , 1 ].values

8

9 from sklearn.cross_validation import train_test_split

10 X_train, X_test, Y_train, Y_test = train_test_split( X, Y, test_size = 1/4, random_state = 0)

第二步:擬合訓練集

火爆GitHub:100天搞定機器學習編程(超讚信息圖+代碼+數據集)

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

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

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

1 from sklearn.linear_model import LinearRegression

2 regressor = LinearRegression()

3 regressor = regressor.fit(X_train, Y_train)

第三步:預測結果

火爆GitHub:100天搞定機器學習編程(超讚信息圖+代碼+數據集)

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

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

1 Y_pred Y_pred == regressor.predict(X_test) regressor.predict(X_test)

第四步:可視化

火爆GitHub:100天搞定機器學習編程(超讚信息圖+代碼+數據集)

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

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')

兩件需要提醒的事

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

火爆GitHub:100天搞定機器學習編程(超讚信息圖+代碼+數據集)

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

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

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

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

火爆GitHub:100天搞定機器學習編程(超讚信息圖+代碼+數據集)

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

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

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

加油。

火爆GitHub:100天搞定機器學習編程(超讚信息圖+代碼+數據集)

誠摯招聘

量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回覆“招聘”兩個字。

量子位 QbitAI · 頭條號簽約作者

վ'ᴗ' ի 追蹤AI技術和產品新動態


分享到:


相關文章: