Andrew Ng機器學習(一):線性回歸

1.什么是線性回歸?

用線性關系去擬合輸入和輸出。

設輸入為x,則輸出y=ax+b。

對于多元的情況y=b×1+a1x1+a2x2+...+anxn

用θ表示系數,可以寫作:

其中,x0=1。

2.線性回歸有什么用?

對于連續輸入和輸出的問題,如果線性回歸可以較好的擬合輸入和輸出,那么可以用這個模型預測其它輸入時的輸出。

反過來想:如果線性回歸可以較好的擬合輸入和輸出,那么說明輸出和輸入有很強的線性相關性,可以識別輸入中的冗余信息。

3.怎么判斷是否較好的擬合?

初步考慮,就是當使用模型時的輸出、和真實的輸出有多大偏差,選擇一個方法量化這個偏差。

每個樣本輸入模型時,均會產生一個偏差。

線性回歸中,通過求這些偏差的平方平均值,來判斷偏差的程度。寫作:

其中實際輸出為y,模型輸出為h,上標i是指每個樣本。系數在平方平均值的基礎上除以2。

判斷偏差的這個方程起名叫 Cost Function。當偏差越小、即Cost Function的值越小時,擬合的越好。?

4.怎么訓練模型?

訓練模型的目的在于實現較好的擬合,也就是說使Cost Function的值盡量小。

訓練在這里,就是選擇一組系數θ(模型確定以后,模型的參數就是系數θ們),實現上面的目的。

微積分學過,可以對θ求偏導數等于0的點,直接得到極值點。

按照Andrew Ng的課件,當參數個數大于10000個時,直接求極值點時間太長,需要選擇別的辦法。

5.怎樣訓練模型:梯度下降。

顧名思義,就是沿著梯度下降。選擇一個合適的步長α,一步一步改變θ使Cost Function的值不斷減小。

其中,θj表示各個系數。:=前面的冒號表示每個θj同時改變。

走多少步?和怎么判斷模型訓練好了呢?最好是觀察每次θj改變后,J(θ)的值的變化。

最開始θj等于多少呢?最開始,隨便選一組值就可以。

步長α應該選多大呢?要通過手動嘗試,“找”到合適的值。

最后,經過多次迭代后,算法得到一組θ,使Cost Function的值比較小。

6.matlab實現一個線性回歸。

%一個特征的輸入參數
X1=[0.50,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25,2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50];
X0=ones(size(X1));
X=([X0;X1])';
y=([10, 22, 13, 43, 20, 22, 33, 50, 62, 48, 55, 75, 62, 73, 81, 76, 64, 82, 90, 93])';

%梯度下降參數設計
alpha=0.001;%當alpha大于1時就不收斂了
theta=[2;3];%選哪個點作為起點似乎對收斂速度影響不大
times=2000;%迭代次數

for i=1:times
delta=X*theta-y;%求偏導數
theta=theta-alpha.*(X'*delta);%梯度下降
J(i)=delta'*delta;%求此時的Cost Function值
end


%觀察Cost Function值隨迭代次數的變化
% plot(J);
%觀察擬合情況
stem(X1,y);
p2=X*theta;
hold on;
plot(X1,p2);

?

7.實際使用

實際使用線性回歸時,先對輸入數據進行優化。包括:1.將冗余的和無關的變量去掉;2.對于非線性關系,采用多項式擬合,將一個變量變為多個變量;3.將輸入范圍歸一化。


?

小結

線性回歸開始假設輸入和輸出存在線性關系,

然后使用線性回歸模型h=θTx,用Cost Function J(θ)評價擬合程度,

通過對J(θ)應用梯度下降算法逼近一組好的參數θ,從而得到一個適用的模型h。

?

線性回歸的使用建立在“輸入和輸出存在線性關系”這一假設基礎上,把一組特征映射到一個值。

使用起來,也許因為模型太簡單,感覺不到“機器學習”的感覺。選用時也需要很多先驗知識、針對特定情況,就像一般的編程處理問題一樣。

在使用梯度下降的算法時,迭代的過程,有點“學習”的感覺。

轉載于:https://www.cnblogs.com/sumr/p/9746649.html

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

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

相關文章

c++虛析構函數

1.為什么基類的析構函數是虛函數&#xff1f; 在實現多態時&#xff0c;當用基類操作派生類&#xff0c;在析構時防止只析構基類而不析構派生類的狀況發生。 下面轉自網絡&#xff1a;源地址 http://blog.sina.com.cn/s/blog_7c773cc50100y9hz.html a.第一段代碼 #include<i…

ICMP(Internet Control Message Protocol)網際控制報文協議初識

ICMP是&#xff08;Internet Control Message Protocol&#xff09;Internet控制報文協議。它是TCP/IP協議族的一個子協議&#xff0c;用于在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息雖然并不傳輸用…

Linux設置RSA密鑰登錄

一、怎么實現雙向免密登錄 前提 所有服務器/etc/ssh/sshd_config文件的以下三行未被注釋 RSAAuthentication yesPubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys舉例&#xff1a; 兩臺服務器&#xff1a;192.168.100.134 192.168.1.140免密碼登錄是分用戶的…

python面向對象__str__和__repr__方法

__str__方法 class Animal:def __init__(self,name,color):self.namenameself.colorcolordef __str__(self):resself.name的顏色是self.colorreturn res batAnimal(蝙蝠,黑色) print(蝙蝠的特征:%s % bat) # 蝙蝠的特征:蝙蝠的顏色是黑色 對象輸出或者打印就會執行__str__方法…

函數sprintf真好用

描述&#xff1a;C 庫函數 int sprintf(char *str, const char *format, ...) 發送格式化輸出到 str 所指向的字符串。 聲明&#xff1a; int sprintf(char *str, const char *format, ...) 參數&#xff1a; str -- 這是指向一個字符數組的指針&#xff0c;該數組存儲了 C 字符…

oracle 刪除主鍵_大數據量刪除的思考 4

譯者 湯健 沃趣科技數據庫技術專家出品 沃趣科技在本系列的前一期文章中&#xff0c;我制作了一些圖&#xff0c;突出顯示了按表掃描執行大量刪除操作和按索引范圍掃描執行大量刪除之間的主要區別。根據所涉及的數據模式&#xff0c;選擇正確的策略可能對隨機I/Os的數量、生…

redis 持久化 + 主從復制+ 集群

2019獨角獸企業重金招聘Python工程師標準>>> 一、 Linux 下的 Redis 安裝 && 啟動 && 關閉 && 卸載 http://blog.csdn.net/zgf19930504/article/details/51850594 注&#xff1a;設置 redis.conf bind***.***.*.(127.0.0.1) redis啟動&…

怎么運行c語言_C語言 原來是這樣調用硬件的

大家都知道我們可以使用C語言寫一段程序來控制硬件工作&#xff0c;但你知道其工作原理嗎&#xff1f;網友北極C語言在實際運行中&#xff0c;都是以匯編指令的方式運行的&#xff0c;由編譯器把C語言編譯成匯編指令&#xff0c;CPU直接執行匯編指令。所以這個問題就變成&#…

四、元祖、字典

一、元祖(tuple)&#xff1a;tu(11,"hello",(0,1),[11,"111"],33,) 元祖的特點&#xff1a;元祖中一級元素不可被修改&#xff0c;不能被增加或刪除&#xff0c;多級元素可以被修改&#xff0c;一般寫元祖的時候&#xff0c;推薦在后面添加逗號“&#xff…

PHP編程效率的20個要點

用單引號代替雙引號來包含字符串&#xff0c;這樣做會更快一些。因為PHP會在雙引號包圍的字符串中搜尋變量&#xff0c;單引號則 不會&#xff0c;注意&#xff1a;只有echo能這么做&#xff0c;它是一種可以把多個字符串當作參數的“函數”(譯注&#xff1a;PHP手冊中說echo是…

ubuntu運行python ide_打造vim中的python IDE

首先先介紹幾個常用的插件&#xff1a;1&#xff0c;ctags和taglist&#xff0c;這個大家估計都很常用&#xff0c;在ubuntu下只要安裝exuberant-ctags即可啦&#xff0c;另外tagbar支持面向對象語言的展示" toggle Tagbar displaymap :TagbarToggle" autofocus on T…

更新和插入的并發問題_mysql經典面試題:如何讀寫分離?主從原理是啥?同步的延時問題...

面試題你有沒有做 MySQL 讀寫分離&#xff1f;如何實現 MySQL 的讀寫分離&#xff1f;MySQL 主從復制原理的是啥&#xff1f;如何解決 MySQL 主從同步的延時問題&#xff1f;考點分析高并發這個階段&#xff0c;肯定是需要做讀寫分離的&#xff0c;啥意思&#xff1f;因為實際上…

php實現一個簡單的四則運算計算器

php實現一個簡單的四則運算計算器&#xff08;還不支持括號的優先級&#xff09;。利用棧這種數據結構來計算表達式很贊。 這里可以使用棧的結構&#xff0c;由于php的數組“天然”就有棧的特性&#xff0c;這里直接就利用了數組。當然可以使用棧結構寫&#xff0c;道理一樣的。…

Tcp與Ip協議的客戶端和服務器編程

Tcp與Ip協議的客戶端和服務器編程 本文就TCP和Ip協議的客戶端和服務器分別進行編程&#xff0c;實現了客戶端和服務端進行通信的功能&#xff0c;服務端對多個客戶端進行監聽&#xff0c;并能與多個客戶端通信。 服務器端代碼如下&#xff1a; using System; using System.Coll…

maven建立webapp項目時顯示Cannot change version of project facet Dynamic web module to 2.5

為什么80%的碼農都做不了架構師&#xff1f;>>> 網上查了很多東西都沒啥用&#xff0c;其實直接把這段代碼加到web.xml頭部&#xff0c;自然就不報錯了 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns:xsi"http://www.…

python數據結構算法 北京大學_北京大學公開課《數據結構與算法Python版》

之前我分享過一個數據結構與算法的課程&#xff0c;很多小伙伴私信我問有沒有Python版。看了一些公開課后&#xff0c;今天特向大家推薦北京大學的這門課程&#xff1a;《數據結構與算法Python版》。課程概述很多同學想要轉行機器學習&#xff0c;也確實掌握了一些機器學習模型…

20道C#練習題(一)1——10題

1.輸入三個整數&#xff0c;xyz&#xff0c;最終以從小到大的方式輸出。利用if嵌套。 Console.Write("請輸入x"); double x double.Parse(Console.ReadLine()); Console.Write("請輸入y"); double y double.Parse(Console.ReadLine()); Console.Write(&q…

fd 句柄_linux文件描述符fd(windows下的句柄)

在Linux系統中一切皆可以看成是文件&#xff0c;文件又可分為&#xff1a;普通文件、目錄文件、鏈接文件和設備文件fd&#xff1a;file descriptor文件描述符0,1,2分別給了標準輸入、標準輸出和錯誤輸出。ls -l /proc/pid/fd可以查看某個進程所使用的fd用lsof可以查看比如&…

Python——三級菜單

#三級菜單函數 menu {北京&#xff1a;&#xff5b;海淀&#xff1a;&#xff5b;五道口&#xff1a;&#xff5b;&#xff5d;中關村&#xff1a;&#xff5b;&#xff5d;上帝&#xff1a;&#xff5b;&#xff5d;&#xff5d;昌平&#xff1a;&#xff5b;&#xff5d;朝陽…

HTTPS 原理解析

http://www.cnblogs.com/zery/p/5164795.html 一 前言 在說HTTPS之前先說說什么是HTTP&#xff0c;HTTP就是我們平時瀏覽網頁時候使用的一種協議。HTTP協議傳輸的數據都是未加密的&#xff0c;也就是明文的&#xff0c;因此使用HTTP協議傳輸隱私信息非常不安全。為了保證這些隱…