回覆列表
  • 1 # 論智

    關於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即可。

  • 中秋節和大豐收的關聯?
  • 葡萄早熟有哪些品種?