關於Kaggle
Kaggle是一個2010年創立的社群,專門舉辦各種資料科學方面的競賽。在資料科學、機器學習行業內影響力極大。去年(2017年)谷歌把它收購了。
(圖為Kaggle網站)
Kaggle上有大量競賽。既然是從零開始,那當然挑簡單的上手了。
Kaggle上的一個房價預測專案比較適合新手,我們下面就以這個專案為例。
https://www.kaggle.com/c/house-prices-advanced-regression-techniques
開啟上面的網頁,你會看到這樣一個頁面:
那這個專案的基本情況上面都列出來了,我這裡就不重複了。注意,它上面提到你需要有一些R或Python的經驗,也瞭解機器學習的基本知識。所以,雖然說是“從零開始”,還是需要一些預備知識的。注意左側有一個Tutorials欄目,裡面除了Kaggle的說明以外,還有Python和R的一些教程,有必要的話你可以溫習一下。
其中有3個檔案最重要:
我們使用Python的Pandas庫
import pandas as pd
df_train = pd.read_csv("train.csv", index_col="Id")
注意上面我們用`df`作為變數名字首,這是因為pandas把資料載入為DataFrame
我們用類似的方法載入訓練資料:
df_test = pd.read_csv("test.csv", index_col="Id")
我們用了`df_train`和`df_test`,不過Pandas可沒有這麼智慧,從變數名就能猜出哪個是訓練資料,哪個是測試資料,所以我們需要告訴它:
df_train["training_set"] = True
df_test["training_set"] = False
設定目標:
target = df_train["SalePrice"]
不過實際上訓練集中已經包含房價了,所以我們先剔除它,因為這是我們房價是需要預測的:
df_train = df_train.drop("SalePrice", axis=1)
然後連線訓練資料和測試資料,並進行更多的預處理:
df_full = pd.concat([df_train, df_test])
df_full = df_full.interpolate()
df_full = pd.get_dummies(df_full)
df_train = df_full[df_full["training_set"]==True]
df_train = df_train.drop("training_set", axis=1)
df_test = df_full[df_full["training_set"]==False]
df_test = df_test.drop("training_set", axis=1)
之後我們就可以應用模型到資料了,這裡我們用隨機森林(n_jobs取-1表示利用所有的CPU核心):
f = RandomForestRegressor(n_estimators=100, n_jobs=-1)
然後就是在訓練集上進行擬合:
rf.fit(df_train, target)
擬合模型之後進行預測:
predictions = rf.predict(df_test)
撒花,大功告成了!
當然,最後我們還需要把結果提交給Kaggle,我們需要把預測轉換成csv格式,然後提交。
result = pd.DataFrame({"Id": df_test.index, "SalePrice": predictions})
result.to_csv("submission.csv", index=False)
到Kaggle網站上提交submission.csv即可。
關於Kaggle
Kaggle是一個2010年創立的社群,專門舉辦各種資料科學方面的競賽。在資料科學、機器學習行業內影響力極大。去年(2017年)谷歌把它收購了。
(圖為Kaggle網站)
Kaggle上有大量競賽。既然是從零開始,那當然挑簡單的上手了。
Kaggle上的一個房價預測專案比較適合新手,我們下面就以這個專案為例。
https://www.kaggle.com/c/house-prices-advanced-regression-techniques
預備知識開啟上面的網頁,你會看到這樣一個頁面:
那這個專案的基本情況上面都列出來了,我這裡就不重複了。注意,它上面提到你需要有一些R或Python的經驗,也瞭解機器學習的基本知識。所以,雖然說是“從零開始”,還是需要一些預備知識的。注意左側有一個Tutorials欄目,裡面除了Kaggle的說明以外,還有Python和R的一些教程,有必要的話你可以溫習一下。
其中有3個檔案最重要:
train.csv 訓練資料test.csv 測試資料data_description.txt 關於資料的描述預備資料我們使用Python的Pandas庫
import pandas as pd
df_train = pd.read_csv("train.csv", index_col="Id")
注意上面我們用`df`作為變數名字首,這是因為pandas把資料載入為DataFrame
我們用類似的方法載入訓練資料:
df_test = pd.read_csv("test.csv", index_col="Id")
我們用了`df_train`和`df_test`,不過Pandas可沒有這麼智慧,從變數名就能猜出哪個是訓練資料,哪個是測試資料,所以我們需要告訴它:
df_train["training_set"] = True
df_test["training_set"] = False
設定目標:
target = df_train["SalePrice"]
不過實際上訓練集中已經包含房價了,所以我們先剔除它,因為這是我們房價是需要預測的:
df_train = df_train.drop("SalePrice", axis=1)
然後連線訓練資料和測試資料,並進行更多的預處理:
df_full = pd.concat([df_train, df_test])
df_full = df_full.interpolate()
df_full = pd.get_dummies(df_full)
df_train = df_full[df_full["training_set"]==True]
df_train = df_train.drop("training_set", axis=1)
df_test = df_full[df_full["training_set"]==False]
df_test = df_test.drop("training_set", axis=1)
模型之後我們就可以應用模型到資料了,這裡我們用隨機森林(n_jobs取-1表示利用所有的CPU核心):
f = RandomForestRegressor(n_estimators=100, n_jobs=-1)
然後就是在訓練集上進行擬合:
rf.fit(df_train, target)
擬合模型之後進行預測:
predictions = rf.predict(df_test)
撒花,大功告成了!
提交結果當然,最後我們還需要把結果提交給Kaggle,我們需要把預測轉換成csv格式,然後提交。
result = pd.DataFrame({"Id": df_test.index, "SalePrice": predictions})
result.to_csv("submission.csv", index=False)
到Kaggle網站上提交submission.csv即可。