使用估值神器
Using the Estimator in a Real-World Program
前言叨B叨
大家上周末剁手開心哇? 來來來, 為了更開心得剁手認真學習.
本章包含以下內容:
1. 用新的數據來估價
2. 用新的數據來訓練分類器
3. 然后呢?
正文
1.用新的數據來估
現在我們已經訓練和測試了我們的模型,讓我們正式將其投入使用。打開make_predictions.py。在我們過這個例子的時候,你會注意到,即使這個文件包含估計房屋價值所需的所有邏輯,實際的代碼也只有幾行。這是因為所有的邏輯都已經由機器學習算法創建并保存在我們的模型中了。我們只需要加載模型,傳入數據并運行。
from sklearn.externals import joblib
# Load the model we trained previously
model = joblib.load('trained_house_classifier_model.pkl')
首先,我們加載之前訓練過的梯度增強模型。我們只是調用joblib.load并傳入文件名。接下來,我們列出了我們想要評估的特定房屋的所有屬性。
# For the house we want to value, we need to provide the features in the exact same
# arrangement as our training data set.
house_to_value = [
# House features
2006, # year_built
1, # stories
4, # num_bedrooms
3, # full_bathrooms
0, # half_bathrooms
2200, # livable_sqft
2350, # total_sqft
...
True, # has_central_heating
True, # has_central_cooling
# Garage type: Choose only one
0, # attached
0, # detached
1, # none
# City: Choose only one
0, # Amystad
1, # Brownport
0, # Chadstad
0, # Clarkberg
...
0, # West Gregoryview
0, # West Lydia
0 # West Terrence
]
# scikit-learn assumes you want to predict the values for lots of houses at once, so it expects an array.
# We just want to look at a single house, so it will be the only item in our array.
homes_to_value = [
house_to_value
]
我們需要按照與我們用來訓練模型的訓練數據完全相同的順序創建一個具有相同特征的數組。這意味著這里的數據需要反映我們所做的任何特征工程(feature engineering )變更。所以我們刪除的字段和我們用one-hot編碼添加的字段在這里反映出來。我已經提前定義了2006年建造的一個假想房屋的所有參數,包括它的基本特征,車庫的類型以及它所在的城市。接下來,我們需要創建一系列的房屋值。 Scikit-learn假定你想要一次對多個項目進行預測,所以它期望一系列的房屋價值。
由于我們現在只想給一個房子估價,所以我們只創建了一組值house_to_value,然后放入這個homes_to_value數組。為了預測數據,我們調用model.predict并傳入特征數組。
# Run the model and make a prediction for each house in the homes_to_value array
predicted_home_values = model.predict(homes_to_value)
# Since we are only predicting the price of one house, just look at the first prediction returned
predicted_value = predicted_home_values[0]
print("This house has an estimated value of ${:,.2f}".format(predicted_value))
結果是一個包含每個房屋的價格預測的數組。由于我們剛剛只傳入了一個房子的信息,所以只需要拿第一個索引的值然后打印。
對于這個房子,它預測587,000美元的價格。但是,讓我們看看如果我們改變一些特征值會發生什么。
現在讓我們來回顧一下2006年到1973年建成的一年?,F在讓我們重新運行它,看看如何改變價值。右鍵單擊運行,現在我們可以看到價值下降到$ 454,000。看起來房子齡很重要。現在如果我們改變一些其他的屬性呢?如果我們說這個房子有一個附加的車庫,現在讓我們重新運行它,看看如何改變價值?,F在價值達到了49萬美元。
那城市呢?讓我們改變房子的城市,重新運行?,F在房子的價值大幅下降到386,000美元??雌饋淼乩砦恢煤苤匾?。您可以嘗試自己調整這些值,看看它是如何影響最終價格的。現在我們有一個完整的工作體系。如果我們用一個很好的用戶界面來替換這個腳本,我們會有一個非常酷的真實產品。
2.用新的數據來訓練分類器
我們剛剛完成了建立和使用機器學習模型。恭喜!但請記住,我們的機器學習模型只與我們所使用的數據匹配。由于房價總是在變化,隨著市場的變化,這個模型很快就會過時。所以當底層數據發生變化時,我們需要重新訓練模型。我們可以使用之前使用的trainmodel.py文件重新訓練我們的模型。我們只需要提供一個更新的數據集與更近的房屋銷售數據。
讓我們來看看。首先,我們在用原始數據集訓練估計器時得到的準確性結果。測試集的錯誤是$ 59,000左右。讓我們看看當我們用更新的數據集重新訓練模型時會發生什么?,F在,讓我們改變我們正在使用的數據集。我們只需要更新我們正在加載的數據文件的名稱。我提供了第二個數據文件叫做ml_house_data_set_updated.csv。這個數據集已經更新了房價。讓我們重新運行腳本,看看我們用這個數據集得到的結果。執行了這個數據集,測試錯誤就更高了。大概是63,000美元。如果我們回頭看,以前只有59,000美元。這是一個約4000美元的錯誤增加。
在現實世界的系統中,對天氣或交通等頻繁變化的事物進行建模,通常會建立一個自動化的訓練流程然后定期運行,如每天或每周。這使得系統隨著數據的變化而保持最新。但在更換舊模型之前,檢查新模型的準確性是非常重要的。
有時訓練數據變化很大,以至于舊的模型不再有效。您的自動化訓練過程應檢查新模型的錯誤率,并提醒您在新模型執行得有問題的時候進行干預。
3.然后呢?
我建議大家嘗試使用自己的數據覆蓋的概念。 之后,您可以嘗試使用本課程中使用的梯度增強算法之外的不同機器學習算法。 支持向量回歸機是另一個可以在scikit-learn中進行實驗的流行算法。 如果您將機器學習用于解決大規模問題,則可以嘗試xgboost庫。 Xgboost是Python和其他幾種編程語言的附加庫,它提供了梯度提升的快速實現,可以在多臺計算機上分布。 最后,無論您使用哪種編程語言,本課程中的所有基本概念都適用于任何機器學習庫或工具包。
Amazon AWS和Microsoft Azure等云服務提供商現在提供機器學習工具,可以讓您在云中構建模型。
結語
自此, 機器學習與人工智能基礎:價值估算就全部講完, 之后我會物色更多的相關教程, 敬請期待!
你的 關注-收藏-轉發 是我繼續分享的動力!