Andrew Ng經典機器學習課程的Python實現(第1部分)

摘要 本文講述瞭如何用Python實現Andrew Ng經典機器學習課程。

幾個月前,我在Coursera(免費大型公開在線課程項目)上完成Andrew Ng機器學習的MOOC教學。對於任何一個想進入人工智能和機器學習世界的人來說,這都是一個很好的入門課程,但其中的項目是用Octave語言編寫的。我一直想知道這門課如果用Python的話該有多麼神奇,最終我決定重做一遍,這次用Python來完成。

在這一系列的博文中,我打算用Python編寫程序。這麼做有以下幾個原因:

1、這會幫助那些想要Python版本課程的人;

2.、對於有些R語言愛好者來說,他們也願意學習熟悉的那些算法的Python實現,那會受益匪淺;

基礎知識

強烈建議你先看第1周的視頻講座,之後就應該對Python的體系結構有基本的瞭解。

在這一節中,我們將研究最簡單的機器學習算法。

僅有一個變量的線性迴歸

首先是關於場景的描述。在這裡,我們將僅用一個變量來執行線性迴歸以預測一個食品貨車的收益。假設你是一家餐廳的CEO,正在考慮在每個不同的城市開設一家分店,並且在各個城市都有貨車,你可以從這些分店獲得收益和顧客的相關數據。

ex1data1.txt文件包含了我們線性迴歸練習的數據集。第一列表示城市的人口,第二列是該城市的食品貨車的收益。如果收益為負則表示虧損。

首先,與執行任何機器學習任務一樣,我們需要導入一些庫

Andrew Ng經典機器學習課程的Python實現(第1部分)

讀取數據並進行可視化

在開始任何任務之前,通過可視化數據來理解數據通常來說是非常有用的。對於這個數據集,可以利用散點圖來可視化數據,然而它只有兩個屬性(收益和用戶)。

(在現實生活中我們遇到的許多問題都是多維的,不能僅僅用二維圖來表示。要創建多維的表達方式,必須要靈活地運用各種表現形式,如色彩、形狀、深度等。)

Andrew Ng經典機器學習課程的Python實現(第1部分)

Andrew Ng經典機器學習課程的Python實現(第1部分)

這裡我們使用了pandas的read_csv函數來讀取以逗號分隔的一組值。此外,我們還使用了head函數來查看數據的前幾行。

Andrew Ng經典機器學習課程的Python實現(第1部分)


Andrew Ng經典機器學習課程的Python實現(第1部分)


添加攔截項

在下面的代碼中,我們給數據添加另一個維度以適應攔截項(這麼做的原因已在視頻中進行了解釋)。我們還將參數theta初始化為0,並把學習率alpha初始化為0.01。

Andrew Ng經典機器學習課程的Python實現(第1部分)

使用np.newaxis可以將一維數組(shape: N elements)轉換為行向量(shape: N rows, 1 column)或列向量(shape: 1 row, N columns)。在這裡,我們將X和y重新排列到列向量裡。

下一步,我們將計算成本和梯度下降,Andrew Ng在視頻講座中很好地講解了這一操作過程。這裡我僅提供Andrew Ng在講座中使用的基於Python的偽代碼。

成本計算

Andrew Ng經典機器學習課程的Python實現(第1部分)

你應該期望看到成本的計算結果是32.07。

用梯度下降法求最優參數

Andrew Ng經典機器學習課程的Python實現(第1部分)

期望的theta值的範圍是[-3.6303, 1.1664]。

我們現在有了優化的theta值,利用上面的theta值來計算:

Andrew Ng經典機器學習課程的Python實現(第1部分)

上面的輸出應該會給你一個比32.07更好的結果:4.483。

繪製最佳擬合線圖

Andrew Ng經典機器學習課程的Python實現(第1部分)


Andrew Ng經典機器學習課程的Python實現(第1部分)


讓我們用擴展線性迴歸的思路來處理多個獨立的變量。

多元線性迴歸

情景描述:

假設你正在出售房子,你想知道近期比較好的市場價格。一個方式是首先收集最近房子買賣的信息,並創建一個房子價格模型。你的任務是基於其它的變量來預測房價:

文件ex1data2.txt包含一組俄勒岡州波特蘭市的房子價格數據。第一列是房子的面積,第二列是臥室的數量,第三列是房子的價格。

在前一節中你已經創建了必要的基礎環境,這些基礎環境也可以很方便地應用在本節中。在這裡,將使用我們在上一節中所給的公式進行計算。

Andrew Ng經典機器學習課程的Python實現(第1部分)

Andrew Ng經典機器學習課程的Python實現(第1部分)

正如在上面看到的那樣,我們正在處理的不止是一個獨立變量(你在前一節中所學習的概念也適用於這裡)。

特徵標準化

通過觀察這些數據,我們注意到房子的面積大約是臥室數量的1000倍。當特徵量級不同的時候,首先執行特徵比例縮放操作可以使梯度下降收斂地更快。

我們的任務是:

· 從數據集中減去每個特徵的平均值;

· 在減去平均值之後,再按各自的“標準偏差”縮放(分配)特徵值;

Andrew Ng經典機器學習課程的Python實現(第1部分)

增加攔截項和初始化參數

Andrew Ng經典機器學習課程的Python實現(第1部分)

成本計算

Andrew Ng經典機器學習課程的Python實現(第1部分)

你應該期望看到一個輸出的成本是65591548106.45744。

用梯度下降法求最優參數

Andrew Ng經典機器學習課程的Python實現(第1部分)

你的最優參數應該是 [[334302.06399328],[ 99411.44947359], [3267.01285407]]。

我們現在有了優化過的theta值,使用上面輸出的theta值。

Andrew Ng經典機器學習課程的Python實現(第1部分)

這應該會輸出一個比65591548106.45744好很多的值:2105448288.6292474。

現在你已經學會如何用一個或多個獨立變量執行線性迴歸了。

阿里云云棲社區組織翻譯。

文章原標題《Python Implementation of Andrew Ng’s Machine Learning Course (Part1)》

作者:Srikar

譯者:奧特曼,審校:袁虎。

相關推薦

推薦中...