日本在线看黄a美女久草|日本动漫亚洲在线一区|日韩人妻无码免费视频|A√有码中文字幕|日韩一级片视频热久久久|一区二区三区四区精品无码在线|亚洲AV成人无码一二三app|亚洲综合图片绯色|91极品人妻在线网站|国产成人精品一区二三区四区五区

您正在使用IE低版瀏覽器,為了您的雷峰網賬號安全和更好的產品體驗,強烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預覽,將在時失效
人工智能開發(fā)者 正文
發(fā)私信給AI研習社-譯站
發(fā)送

2

房價會崩盤嗎?教你用 Keras 預測房價!(附代碼)

本文作者: AI研習社-譯站 2018-06-04 10:19
導語:本文將展示如何在使用 Keras 時編寫 R 中的自定義損失函數,并展示如何使用不同的方法對不同類型的數據集有利

雷鋒網按:本文為雷鋒字幕組編譯的技術博客,原文 Custom Loss functions for Deep Learning: Predicting Home Values with Keras for R ,作者 Ben Weber 。

 翻譯 | 宥佑 林驍     整理 |  凡江

房價會崩盤嗎?教你用 Keras 預測房價?。ǜ酱a)

我最近在讀「深度學習與 R」,R 對于深度學習的支持著實讓我驚艷!

書中其中一個應用例子就是用于預測波士頓的房價,這是一個有趣的問題,因為房屋的價值變化非常大。這是一個機器學習的問題,可能最適用于經典方法,如 XGBoost,因為數據集是結構化的而不是感知的。然而,這也是一個數據集,深度學習提供了一個非常有用的功能,就是編寫一個新的損失函數,有可能提高預測模型的性能。這篇文章的目的是來展示深度學習如何通過使用自定義損失函數來改善淺層學習問題。

我在處理財務數據時遇到過幾次的問題之一是,經常需要構建預測模型,其中輸出可以具有各種不同的值,且在不同的數量級上。例如,預測房價時可能會發(fā)生這種情況,其中一些住房的價值為 10 萬美元,其他房屋的價值為 1000 萬美元。如果您在這些問題(如線性回歸或隨機森林)中使用標準機器學習方法,那么通常該模型會過擬合具有最高值的樣本,以便減少諸如平均絕對誤差等度量。然而,你可能真正想要的是用相似的權重來處理樣本,并使用錯誤度量如相對誤差來降低擬合具有最大值的樣本的重要性。

房價會崩盤嗎?教你用 Keras 預測房價!(附代碼)

實際上,你可以在 R 中使用非線性最小二乘法(nls)等軟件包明確地做到這一點。上面的代碼示例演示了如何使用內置優(yōu)化器來構建線性回歸模型,該優(yōu)化器將使用大標簽值對樣本進行超重,并介紹如何對預測值和標簽執(zhí)行對數轉換的 nls 方法,這將會給樣品比較相等的重量。第二種方法的問題是,你必須明確說明如何使用模型中的特征,從而產生特征工程問題。這種方法的另一個問題是,它不能直接應用于其他算法,如隨機森林,而無需編寫自己的似然函數和優(yōu)化器。這是針對特定的場景,您希望將錯誤術語放在日志轉換之外,而不是只需將日志轉換應用于標簽和所有輸入變量的場景。

深度學習提供了一個優(yōu)雅的解決方案來處理這類問題,替代了編寫自定義似然函數和優(yōu)化器,您可以探索不同的內置和自定義損失函數,這些函數可以與提供的不同優(yōu)化器一起使用。本文將展示如何在使用 Keras 時編寫 R 中的自定義損失函數,并展示如何使用不同的方法對不同類型的數據集有利。

下面的圖片是我將要用做文章預覽封面的,它顯示了根據波士頓房價數據集訓練的四種不同 Keras 模型的培訓歷史。每個模型使用不同的損失函數,但是在相同的性能指標上評估,即平均絕對誤差。對于原始數據集,自定義損失函數不會提高模型的性能,但基于修改后的數據集,結果更喜人。

房價會崩盤嗎?教你用 Keras 預測房價?。ǜ酱a)

對原始房價數據集執(zhí)行 4 項損失函數。所有模型均使用 MAE 作為性能指標。

用深度學習改進淺層問題 

深度學習的一個重要特征是它可以應用于感知數據的深層問題,(如音頻和視頻)以及結構化數據的淺層問題。對于淺層學習(經典 ML)問題,你通??梢酝ㄟ^使用自定義損耗函數來查看淺層方法的改進,從而提供有用的信號。

然而,并非所有淺層問題都可以從深度學習中受益。我發(fā)現自定義損失函數在建立需要為不同數量級的數據創(chuàng)建預測的回歸模型時非常有用。例如,在一個價值可以顯著變化的地區(qū)預測房價。為了說明實踐中是如何工作的,我們將使用由 Keras 提供的波士頓房屋數據集:

數據集-Keras 文件 

數據集來自 IMDB 的 25000 條電影評論,用標簽(正面或負面)對其進行標記。評論已經被處理過。

該數據集包括 20 世紀 70 年代波士頓郊區(qū)的房價。每個記錄有 13 個屬性對家庭進行描述,訓練數據集中有 404 條記錄,測試數據集中有 102 條記錄。在 R 中,可以按如下方式加載數據集: dataset_boston_housing()。價格分布直方圖顯示在下面的左邊,其中價格分布從 5 千美元到五萬美元不等。原始數據集中不同的價格區(qū)間有相似的需求,因此自定義損失函數可能對擬合該數據太大用處。右側的直方圖顯示有受益于使用自定義丟失的標簽轉換。右側的直方圖展示了經過標簽轉換之后的直方圖,將損失函數運用到這些標簽上將會獲得更好地效果。

房價會崩盤嗎?教你用 Keras 預測房價!(附代碼)

波士頓數據集包括原始價格和轉換后的價格

對于如何將價格進行轉換,我將標簽轉換成絕對價格,將結果平方,然后除以大的因子。這產生了一個數據集,其中最高價格和最低價格之間的差異不是 10 倍而是 100 倍。我們現在有一個可以從使用自定義損失函數中獲益的預測問題。生成這些圖的 R 代碼如下所示。

房價會崩盤嗎?教你用 Keras 預測房價!(附代碼)

Keras 中的損失函數

Keras中包含許多用于訓練深度學習模型的有用損失函數。例如: mean_absolute_error() 就適用于數值在某種程度上相等的數據集。還有一些函數可能更適合轉換后的住房數據,例如:mean_squared_logarithmic_error() 。 下面是由R為Keras提供的損失函數接口:

房價會崩盤嗎?教你用 Keras 預測房價?。ǜ酱a)

損失函數。R 是指 Python 當中的函數,為了真正理解這些函數是如何工作的,我們需要先了解到 Python 的損失函數代碼。我們要研究的第一個損失函數是下面定義的均方誤差。該函數計算預測值與實際值之間的差值,然后將結果平方 (使所有的值均為正),最后計算平均值。注意,該函數使用張量進行計算,而不是 Python 原語。當在 R 中定義自定義損失函數時將使用相同的方法。

房價會崩盤嗎?教你用 Keras 預測房價?。ǜ酱a)

我們將探討的下一個內置損失函數是根據預測值與目標值的之間自然對數的差來計算誤差。它在此處定義并在下面寫出。該函數使用 clip 操作來確保負值不會傳遞到日志函數,并且向 clip 后的結果+1,這可確保所有對數轉換的輸入都具有非負數結果。這個函數與我們在 R 中定義的函數類似。

房價會崩盤嗎?教你用 Keras 預測房價?。ǜ酱a)

我們將探討的兩個自定義損失函數在下面的 R 代碼段中定義。第一個函數,mean log absolute error(MLAE),計算預測值和實際值的對數變換之間的差值,然后對計算結果進行平均。與上面的內置函數不同,這種方法不能糾正錯誤。與上述對數函數的另一個區(qū)別是,該函數將顯式比例的因子應用到數據當中,將房屋價格轉換回原始值(5,000 至 50,0000)而不是(5,50)。這是有用的,因為它減少了+1 對預測值和實際值的影響。

房價會崩盤嗎?教你用 Keras 預測房價!(附代碼)

像 Python 函數一樣,R 的自定義損失函數需要對張量(而不是 R 原語)進行操作。為了執(zhí)行這些操作,需要使用 backend() 獲取對后端的引用。在我的系統(tǒng)配置中,這返回了對 Tensorflow 的引用。

第二個函數計算日志錯誤的平方,與內置函數類似。主要區(qū)別在于我使用的是激活函數 relu 而不是 clip,并且對于特定的住房數據集,我進行價格縮放操作。

評估損失函數

我們現在有四種不同的損失函數,我們要用原始數據集和經過改造的住房數據集來對四種不同的損失函數的性能進行評估。本節(jié)將介紹如何設置 Keras,加載數據,編譯模型,擬合模型和評估性能。本節(jié)的完整代碼可在 Github 上找到。

首先,我們需要建立我們的深度學習環(huán)境。這可以通過 Keras 包和 install_keras 函數完成。

房價會崩盤嗎?教你用 Keras 預測房價?。ǜ酱a)

安裝完成后,我們將加載數據集并應用我們的轉換來改變住房價格。最后兩項操作可以注釋掉,使用原來的房價。

房價會崩盤嗎?教你用 Keras 預測房價!(附代碼)

接下來,我們將創(chuàng)建一個 Keras 模型來預測房價。我使用了「Deep Learning with R」中示例的網絡結構。該網絡包括兩層全連接層及其激勵函數 relu,以及一個沒有變換的輸出層。

房價會崩盤嗎?教你用 Keras 預測房價?。ǜ酱a)

為了編譯模型,我們需要指定優(yōu)化器,損失函數和度量。我們將對所有不同的損失函數使用相同的度量和優(yōu)化器。下面的代碼定義了損失函數列表,對于第一次迭代,模型使用均方誤差。

房價會崩盤嗎?教你用 Keras 預測房價?。ǜ酱a)

最后一步是擬合模型,然后評估性能。我使用了 100 個批次并且每個批次大小為 5,按照 20%的比例將分割出來的數據作為驗證集。在模型訓練完訓練集之后,模型的性能通過測試數據集上的平均絕對誤差來評估。

房價會崩盤嗎?教你用 Keras 預測房價!(附代碼)

我用不同的損失函數訓練了四種不同的模型,并將這種方法應用于原始房價和轉換后的房價當中。以下顯示了所有這些不同組合的結果。

房價會崩盤嗎?教你用 Keras 預測房價?。ǜ酱a)

房價數據集損失函數的表現

在原始數據集上,在損失函數中應用對數變換實際上增加了模型的誤差。由于數據在一個數量級內存在一定的正態(tài)分布,這并不令人驚訝。對于變換的數據集,平方對數誤差方法優(yōu)于均方誤差損失函數。這表明如果您的數據集不適合內置的損失函數,自定義損失函數可能值得探索。

下面顯示了轉換數據集上四種不同損失函數的模型訓練歷史。每個模型使用相同的錯誤度量(MAE),但是具有不同的損失函數。一個令人驚訝的結果是,對于所有的損失函數來說,應用日志轉換的方法驗證錯誤率要高得多。

房價會崩盤嗎?教你用 Keras 預測房價!(附代碼)

在轉換后的房價數據集上對 4 種損失函數測試各自的性能。所有模型都使用 MAE 作為性能指標。

深度學習可以成為淺層學習問題的有用工具,因為您可以定義自定義的損失函數,這些函數可能會顯著提高模型的性能。這不適用于所有問題,但如果預測問題不能很好地映射到標準損失函數,則可能會有用。

原文鏈接:https://towardsdatascience.com/custom-loss-functions-for-deep-learning-predicting-home-values-with-keras-for-r-532c9e098d1f

房價會崩盤嗎?教你用 Keras 預測房價!(附代碼)

雷鋒網雷鋒網

雷峰網原創(chuàng)文章,未經授權禁止轉載。詳情見轉載須知。

房價會崩盤嗎?教你用 Keras 預測房價?。ǜ酱a)

分享:
相關文章

知情人士

AI研習社(yanxishe.com)譯站頻道,傳播前沿人工智能知識,讓語言不再成為學習知識的門檻。(原雷鋒字幕組)
當月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經綁定,現在您可以設置密碼以方便用郵箱登錄
立即設置 以后再說