機器學習(一)梯度下降算法的實現及過程分析

機器學習(一)梯度下降算法

? ? ? ? 因為算法最好能應用到實際問題中才會讓讀者感到它的真實的用處,因此首先我來描述一個實際問題(梯度下降算法用以幫助解決該問題):給定一個指定的數據集,比如由若干某一地區的房屋面積和房屋價格這樣的數據對(area, price)組成的集合(吳恩達老師的課程是啟蒙課程所以舉該例子),我的目標是通過一個學習算法得到一個預測房價和房屋面積之間的函數,然后給定一個新的房屋面積,用這個函數來預測房價。如下圖所示:

?

我的解決思路大致如下:

1、我找了一個很小的數據集,有兩個特征X1,X2,一個輸出Y;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

2、根據我的數據假設我的預測函數是一個線性函數 h(x):

(為什么是線性函數一方面是因為通過我的數據點的分布可以預測我的預測函數模型,另一方面我希望通過一個不是很復雜的函數來幫助我先理解到梯度下降算法到底做了什么,這算一個線性回歸問題。)

3、此時我的目標是通過求得函數中的參數來得到預測函數 h (x), 合理的預測函數應該和實際值的差值越小越好,因此如果我能使預測函數值和實際值的差值越小那么說明我的預測函數越好,因此通過求使下面的 cost function J(Θ) 取得最小值的參數組合便能得到我的預測函數 h(x);

4、如何求 J(Θ) 的最小值呢,就是應用階梯下降算法。對于每一個參數都先設置一個初始點,然后按照下面的原則不斷的進行值的更新:

? ? ? ?

從表達式可以看出,通過對J(Θ) 求導,從Θ的初始點開始,相當于每次都朝著一個下降最快的方向更新值,其中 α 是 learning rate, 相當于求導選定下降方向,learning rate 決定下降步長, 從算法實現的結果你會發現不一樣的 α 會產生不一樣的結果,合適的步長才能得到最好的結果。通過將求導結果代入后得到:

因此接下來我們要做的就是對每個參數都進行迭代更新,直至收斂得到局部最優解:

接下來就是算法的實現了,通過實現得到參數的值然后得到預測函數最后進行預測。

這是我實現這一小塊的算法截圖:

其中會涉及到一些向量的計算,給定數據集以后將輸入 X 和輸出 Y 都用向量表示(這可得好好兒學學!)另外其中的 loss 是用來記錄每次迭代后得到的預測函數和實際值的差值,gradient 是用來記錄每次下降的梯度,這樣能更直觀的看到這個算法究竟在干啥!值得注意的還有迭代的次數 maxIteration , 它和 α 一起可以得到參數的最優解。

這是我的測試數據集,輸入的是X1和X2:

下面是我用不同的 α 值和 maxIteration 值測試后的結果:

α = ?0.05,maxIteration = 10;(因為我這次輸出的輔助信息多,所以只選了很少的迭代次數,給大家看一下過程)

你會發現,每次的loss值都在變大,參數值也變得越來越離譜,預測結果更是不敢恭維,僅僅10次就這么大了。我又冒死試了一下迭代1000次只輸出預測值,別的信息不輸出:

結果就是 nan。

然后我改變了一下我的?α 值,α =0.001 迭代10次輸出一些輔助信息:

你會清楚的看見 loss 在逐漸變小,gradient 下降的很合理,結果也令人比較滿意。迭代1000次看看結果吧:

嗯,可以接受,如果仔細的看看 上上.....圖,你會發現 loss 減小的速度很慢,這很有可能證明你的?α 值 太小了,所以逐漸增大?α 值 然后輸出結果:

?α = 0.005 ,maxIteration = 1000

?α = 0.01 ,maxIteration = 1000

α = 0.01 ,maxIteration = 2000

α = 0.01 ,maxIteration = 5000

? ? ? ? 到這就發現隨著迭代次數的增加,輸出已經不再改變了,這你應該能證明什么叫收斂了!

? ? ? ? 對于大牛們來說這太小兒科了,但是對于新手上路來說,還是很開心的,也覺得很神奇。

? ? ? ? 最后如果您有什么建議的話我非常樂意接受,也希望可以一起學習!

? ? ? (奧對,如果你也想要和我一起學習算法、機器學習的內容,如果你也有奇思妙想的話,歡迎掃描下面的二維碼關注我的公眾號“說瘋話的小聾瞎”! 嘻嘻!)

注:原始數據集和測試數據集來自https://www.jianshu.com/p/9bf3017e2487#

微信掃一掃
關注該公眾號

轉載于:https://www.cnblogs.com/elsaSong/p/8620129.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539106.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539106.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539106.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

quick time不可用_那些校園中“不可言說”的鄙視鏈

原標題:那些校園中“不可言說”的鄙視鏈俗話說,有人的地方就有江湖,有江湖的地方總有人喜歡論論劍,分個高低,更何況是聚集了五湖四海人群的大學呢!今天小U總結出了一篇高校鄙視鏈大全,快來看看符…

select怎么設置默認值_20200817:詳細說下數據傾斜怎么解決?

福哥答案2020-08-17:數據傾斜是大數據領域繞不開的攔路虎,當你所需處理的數據量到達了上億甚至是千億條的時候,數據傾斜將是橫在你面前一道巨大的坎。很可能有幾周甚至幾月都要頭疼于數據傾斜導致的各類詭異的問題。數據傾斜是指:…

邢不行python資源_邢不行—數字貨幣python量化投資

本帖最后由 ynjie 于 2020-10-14 21:39 編輯課時1.1 什么是量化投資.mp4課時1.2 數字貨幣市場特點.mp4課時1.3 2018量化炒幣7大玩法復盤.mp4課時1.4 量化策略案例:Excel演示定投策略.mp4課時1.5 量化策略案例:Python演示定投策略.mp4課時1.6 量化策略案例…

數據庫查詢某一列大寫轉化小寫字母表示_基于MySQL數據庫下億級數據的分庫分表...

移動互聯網時代,海量的用戶數據每天都在產生,基于用戶使用數據的用戶行為分析等這樣的分析,都需要依靠數據都統計和分析,當數據量小時,數據庫方面的優化顯得不太重要,一旦數據量越來越大,系統響…

ASP.NET Core Docker Jenkins 零基礎持續集成實戰

一.本系列教程說明 源代碼管理工具:Gogs 持續集成工具:Jenkins 容器:Docker 二.git管理軟件的選擇 沒有采用gitlab,因為gitlab比較吃配置,至少得2核4G的配置。采用go語言開發的gogs來代替,搭建方便(不到10分…

vs 啟動調用的目標發生異常_協程中的取消和異常 | 取消操作詳解

在日常的開發中,我們都知道應該避免不必要的任務處理來節省設備的內存空間和電量的使用——這一原則在協程中同樣適用。您需要控制好協程的生命周期,在不需要使用的時候將它取消,這也是結構化并發所倡導的,繼續閱讀本文來了解有關…

java http 下載文件_JAVA通過HttpURLConnection 上傳和下載文件的方法

本文介紹了JAVA通過HttpURLConnection 上傳和下載文件的方法,分享給大家,具體如下:HttpURLConnection文件上傳HttpURLConnection采用模擬瀏覽器上傳的數據格式,上傳給服務器上傳代碼如下:package com.util;import java…

mkdir-yum-tree命令應用案例

案例: 請用一條命令完成目錄創建/hello/world/test 解答: mkdir -p /hello/world/test -p 遞歸創建目錄,沒有子目錄創建。 案例: 打印hello/目錄的結構 [roothello110 ~]# tree hello/ -bash: tree: command not found 發…

pytorch 圖像分割的交并比_Segmentation101系列-最簡單的卷積網絡語義分割(1)-PASCAL VOC圖像分割...

作者:陳洪瀚 /洪瀚筆記知乎專欄摘要:介紹了使用PyTorch和torchvision加載訓練好的全卷積網絡FCN或DeepLab模型,并對PASCAL VOC圖像進行分割并顯示結果。網址:github代碼鏈接, 碼云代碼鏈接陳洪瀚?www.zhihu.com一. 準備實驗數據下…

python selenium chrome獲取每個請求內容_python+selenium調用chrome打開網址獲取內容

通過selenium庫,python可以調用chrome打開指定網頁并獲取網頁內容或者模擬登陸獲取網頁內容1,安裝selenium和配置chromedriver安裝seleniumC:\Users\cord> pip install selenium配置chromedriver該下載什么版本根據瀏覽器版本以及附錄的版本對照表下載…

系統目錄結構 ls命令 文件類型 alias命令

2019獨角獸企業重金招聘Python工程師標準>>> 2.1/2.2 系統目錄結構 /bin:bin是Binary的縮寫,該目錄下存放的是最常用的命令。 /boot:該目錄下存放的是啟動Linux時使用的一些核心文件,包括一些連接文件以及鏡像文件。 …

運維老鳥教你安裝centos6.5如何選擇安裝包

原文:http://oldboy.blog.51cto.com/2561410/1564620 ------------------------------------------------------------------------------ 近來發現越來越多的運維小伙伴們都有最小化安裝系統的潔癖,因此,找老男孩來咨詢,這個“潔癖”好習慣…

服務器centos怎么部署_我什么都不會,怎么擁有自己的個人博客呢

博客每個人都想擁有一個屬于自己的博客,可以分享自己的心得、技術等,可以很好地展示自己的作品,但是自己又什么都不會怎么才能擁有自己的個人博客呢?一、搭建個人博客需要什么呢(1)購買服務器,個人博客可以購買香港服務…

java 過濾器 過濾文件中的文件_Java 使用FileFilter過濾器對文件進行搜索

FileFilter概述java.io.FileFilter是一個接口,是File的過濾器。該接口的對象可以傳遞給File類的listFiles(FileFilter filter)作為參數,FileFilter接口中只有一個方法。boolean accept(File pathname):測試pathname是否應該包含在當前File目錄中&#xf…

修改yum的鏡像服務器為阿里云

1、進入阿里云鏡像網站 http://mirrors.aliyun.com/ 2、選擇centos---help 3、安裝help里的步驟進行操作 1、備份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2、下載新的CentOS-Base.repo 到/etc/yum.repos.d/ CentOS 5 wget -O /e…

面試記錄

東信北郵 智能終端開發工程師 筆試部分 首先去做了一套筆試題,前面選擇題都是android基礎,后面是sql語句。 有一個問題說的是runtime exception,有四個選項: a. ArithmeticException b. lllegalArgumentException c. NullPointerE…

python有類似mybatis的框架_為什么感覺國內比較流行的 mybatis 在國外好像沒人用的樣子?...

892019-03-30 21:23:21 08:00 1看了這么多回復。忍不住了!1. hibernate 歷史悠久并不代表過時,mybatis 這種方式就是未來嗎?肯定不是。數據庫就是用來存數據的,聯表查詢一大堆只能說明數據結構設計是有問題的,只是不…

c# 模擬登陸 webbrowser 抓取_《VR+電力——更換絕緣子培訓》已登陸Pico Neo 2

原標題:《VR電力——更換絕緣子培訓》已登陸Pico Neo 2

java instanceof 繼承_Java中的instanceof關鍵字

Java中,instanceof運算符的前一個操作符是一個引用變量,后一個操作數通常是一個類(可以是接口),用于判斷前面的對象是否是后面的類,或者其子類、實現類的實例。如果是返回true,否則返回false。也就是說:使用…

中文導致Mybatis無效的列索引

<!-- 普鐵 --><select id"selectTrainSceneThrough" parameterType"HashMap" resultType"HashMap">select ROUND(("普鐵用戶專網總流量KB""普鐵用戶公網總流量KB")/1024/1024,3) as total_dataflow,"普鐵用…