自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何在Python中創(chuàng)建線性回歸機器學(xué)習(xí)模型?「入門篇」

開發(fā) 后端 機器學(xué)習(xí)
線性回歸和邏輯回歸是當(dāng)今很受歡迎的兩種機器學(xué)習(xí)模型。本文將教你如何使用 scikit-learn 庫在Python中創(chuàng)建、訓(xùn)練和測試你的第一個線性、邏輯回歸機器學(xué)習(xí)模型,本文適合大部分的新人小白。

 線性回歸和邏輯回歸是當(dāng)今很受歡迎的兩種機器學(xué)習(xí)模型。

[[331887]]

本文將教你如何使用 scikit-learn 庫在Python中創(chuàng)建、訓(xùn)練和測試你的第一個線性、邏輯回歸機器學(xué)習(xí)模型,本文適合大部分的新人小白。

線性回歸機器學(xué)習(xí)模型

1.要使用的數(shù)據(jù)集

由于線性回歸是我們在本文中學(xué)習(xí)的第一個機器學(xué)習(xí)模型,因此在本文中,我們將使用人工創(chuàng)建的數(shù)據(jù)集。這能讓你可以更加專注于學(xué)習(xí)理解機器學(xué)習(xí)的概念,并避免在清理或處理數(shù)據(jù)上花費不必要的時間。

更具體地說,我們將使用住房數(shù)據(jù)的數(shù)據(jù)集并嘗試預(yù)測住房價格。在構(gòu)建模型之前,我們首先需要導(dǎo)入所需的庫。

2.需要用到的Python庫

我們需要導(dǎo)入的第一個庫是 pandas,它是一個“panel data”的組合體,是處理表格數(shù)據(jù)比較流行的Python庫。

一般我們會用pd來命名該庫,你可以使用以下語句導(dǎo)入Pandas:

  1. import pandas as pd 

接下來,我們需要導(dǎo)入NumPy,這是一個很常用的數(shù)值計算庫。Numpy以其Numpy數(shù)組數(shù)據(jù)結(jié)構(gòu)以及非常有用的reshee、arange和append而聞名。

一般我們也會用np作為Numpy的別名,你可以使用以下語句進行導(dǎo)入:

  1. import numpy as np 

接下來,我們需要導(dǎo)入matplotlib,這是Python很受歡迎的數(shù)據(jù)可視化庫。

matplotlib通常以別名導(dǎo)入plt。你可以使用以下語句導(dǎo)入:

  1. import matplotlib.pyplot as plt 
  2.  
  3. %matplotlib inline 

該%matplotlib inline語句可以將我們的matplotlib可視化直接嵌入到我們的Jupyter Notebook中,更易于訪問和解釋。

最后,你還要導(dǎo)入seaborn,這是另一個Python數(shù)據(jù)可視化庫,你可以更輕松地使用matplotlib創(chuàng)建漂亮的可視化數(shù)據(jù)。

你可以使用以下語句導(dǎo)入:

  1. import seaborn as sns 

總結(jié)一下,這是本文必需的庫的導(dǎo)入:

  1. import pandas as pd 
  2.  
  3. import numpy as np 
  4.  
  5. import matplotlib.pyplot as plt 
  6.  
  7. %matplotlib inline 
  8.  
  9. import seaborn as sns 

導(dǎo)入數(shù)據(jù)集

如前所述,我們將使用住房信息數(shù)據(jù)集。在下面的URL鏈接中,有我們的.csv文件數(shù)據(jù)集:

  1. https://nickmccullum.com/files/Housing_Data.csv 

要將數(shù)據(jù)集導(dǎo)入到Jupyter Notebook中,首先要做的是通過將該URL復(fù)制并粘貼到瀏覽器中來下載文件。然后,將文件移到Jupyter Notebook的目錄下。

完成此操作后,以下Python語句可以將住房數(shù)據(jù)集導(dǎo)入到Jupyter Notebook中:

  1. raw_data = pd.read_csv('Housing_Data.csv'

該數(shù)據(jù)集具有許多功能,包括:

  • 房屋面積的平均售價
  • 該地區(qū)平均客房總數(shù)
  • 房子賣出的價格
  • 房子的地址

此數(shù)據(jù)是隨機生成的,因此你會看到一些可能沒有意義的細微差別(例如,在應(yīng)該為整數(shù)的數(shù)字之后的大量小數(shù)位)。

了解數(shù)據(jù)集

現(xiàn)在已經(jīng)在raw_data變量下導(dǎo)入了數(shù)據(jù)集,你可以使用該info方法獲取有關(guān)數(shù)據(jù)集的一些高級信息。具體來說,運行raw_data.info()可以得出:

  1. <class 'pandas.core.frame.DataFrame'
  2.  
  3. RangeIndex: 5000 entries, 0 to 4999 
  4.  
  5. Data columns (total 7 columns): 
  6.  
  7. Avg. Area Income                5000 non-null float64 
  8.  
  9. Avg. Area House Age             5000 non-null float64 
  10.  
  11. Avg. Area Number of Rooms       5000 non-null float64 
  12.  
  13. Avg. Area Number of Bedrooms    5000 non-null float64 
  14.  
  15. Area Population                 5000 non-null float64 
  16.  
  17. Price                           5000 non-null float64 
  18.  
  19. Address                         5000 non-null object 
  20.  
  21. dtypes: float64(6), object(1) 
  22.  
  23. memory usage: 273.6+ KB 

另一個有用的方法是生成數(shù)據(jù)。您可以為此使用seaborn方法pairplot,并將整個DataFrame作為參數(shù)傳遞。通過下面的一行代碼進行說明:

  1. sns.pairplot(raw_data) 

該語句的輸出如下:

如何在Python中創(chuàng)建線性回歸機器學(xué)習(xí)模型?「入門篇」

接下來,讓我們開始構(gòu)建線性回歸模型。

建立機器學(xué)習(xí)線性回歸模型

我們需要做的第一件事是將我們的數(shù)據(jù)分為一個x-array(包含我們將用于進行預(yù)測y-array的數(shù)據(jù))和一個(包含我們正在嘗試進行預(yù)測的數(shù)據(jù))。

首先,我們應(yīng)該決定要包括哪些列,你可以使用生成DataFrame列的列表,該列表raw_data.columns輸出:

  1. Index(['Avg. Area Income''Avg. Area House Age''Avg. Area Number of Rooms'
  2.  
  3.        'Avg. Area Number of Bedrooms''Area Population''Price''Address'], 
  4.  
  5.       dtype='object'

x-array除了價格(因為這是我們要預(yù)測的變量)和地址(因為它僅包含文本)之外,我們將在所有這些變量中使用。

讓我們創(chuàng)建x-array并將其分配給名為的變量x。

  1. x = raw_data[['Avg. Area Income''Avg. Area House Age''Avg. Area Number of Rooms'
  2.  
  3.        'Avg. Area Number of Bedrooms''Area Population']] 

接下來,讓我們創(chuàng)建我們的代碼y-array并將其分配給名為的變量y。

  1. y = raw_data['Price'

我們已經(jīng)成功地將數(shù)據(jù)集劃分為和x-array(分別為模型的輸入值)和和y-array(分別為模型的輸出值)。在下一部分中,我們將學(xué)習(xí)如何將數(shù)據(jù)集進一步分為訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)。

將我們的數(shù)據(jù)集分為訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)

scikit-learn 可以很容易地將我們的數(shù)據(jù)集分為訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)。為此,我們需要 train_test_split 從中的 model_selection 模塊導(dǎo)入函數(shù) scikit-learn。

這是執(zhí)行此操作的完整代碼:

  1. from sklearn.model_selection import train_test_split 

該train_test_split數(shù)據(jù)接受三個參數(shù):

  • x-array
  • y-array
  • 測試數(shù)據(jù)的期望大小

有了這些參數(shù),該 train_test_split 功能將為我們拆分數(shù)據(jù)!如果我們想讓測試數(shù)據(jù)占整個數(shù)據(jù)集的30%,可以使用以下代碼:

  1. x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3) 

讓我們解開這里發(fā)生的一切。

train_test_split 函數(shù)返回長度為4的Python列表,其中列表中的每個項分別是x_train、x_test、y_train和y_test。然后我們使用列表解包將正確的值賦給正確的變量名。

現(xiàn)在我們已經(jīng)正確地劃分了數(shù)據(jù)集,是時候構(gòu)建和訓(xùn)練我們的線性回歸機器學(xué)習(xí)模型了。

建立和訓(xùn)練模型

我們需要做的第一件事是從scikit learn導(dǎo)入LinearRegression估計器。下面是Python語句:

  1. from sklearn.linear_model import LinearRegression 

接下來,我們需要創(chuàng)建一個線性回歸Python對象的實例。我們將把它賦給一個名為model的變量。下面是代碼:

  1. model = LinearRegression() 

我們可以使用 scikit-learn 中的 fit 方法在訓(xùn)練數(shù)據(jù)上訓(xùn)練該模型。

  1. model.fit(x_train, y_train) 

我們的模型現(xiàn)已訓(xùn)練完畢,可以使用以下語句檢查模型的每個系數(shù):

  1. print(model.coef_) 

輸出:

  1. [2.16176350e+01 1.65221120e+05 1.21405377e+05 1.31871878e+03 
  2.  
  3.  1.52251955e+01] 

類似地,下面是如何查看回歸方程的截距:

  1. print(model.intercept_) 

輸出:

  1. -2641372.6673013503 

查看系數(shù)的更好方法是將它們放在一個數(shù)據(jù)幀中,可以通過以下語句實現(xiàn):

  1. pd.DataFrame(model.coef_, x.columns, columns = ['Coeff']) 

這種情況下的輸出更容易理解:

如何在Python中創(chuàng)建線性回歸機器學(xué)習(xí)模型?「入門篇」

讓我們花點時間來理解這些系數(shù)的含義。讓我們具體看看面積人口變量,它的系數(shù)約為15。

這意味著,如果你保持所有其他變量不變,那么區(qū)域人口增加一個單位將導(dǎo)致預(yù)測變量(在本例中為價格)增加15個單位。

換言之,某個特定變量上的大系數(shù)意味著該變量對您試圖預(yù)測的變量的值有很大的影響。同樣,小值的影響也很小。

現(xiàn)在我們已經(jīng)生成了我們的第一個機器學(xué)習(xí)線性回歸模型,現(xiàn)在是時候使用該模型從我們的測試數(shù)據(jù)集進行預(yù)測了。

根據(jù)我們的模型做出預(yù)測

scikit-learn使得從機器學(xué)習(xí)模型做出預(yù)測變得非常容易,我們只需調(diào)用前面創(chuàng)建的模型變量的 predict 方法。

因為 predict 變量是用來進行預(yù)測的,所以它只接受一個 x-array 參數(shù),它將為我們生成y值!

以下是使用 predict 方法從我們的模型生成預(yù)測所需的代碼:

  1. predictions = model.predict(x_test) 

預(yù)測變量保存 x_test 中存儲的要素的預(yù)測值。 由于我們使用 train_test_split 方法將實際值存儲在y_test中,因此我們接下來要做的是將預(yù)測數(shù)組的值與 y_test 的值進行比較。

這里有一種簡單的方法是使用散點圖繪制兩個數(shù)組。 使用 plt.scatter 方法可以輕松構(gòu)建 matplotlib 散點圖。 以下為代碼:

  1. plt.scatter(y_test, predictions) 

這是代碼生成的散點圖:

如何在Python中創(chuàng)建線性回歸機器學(xué)習(xí)模型?「入門篇」

如圖所見,我們的預(yù)測值非常接近數(shù)據(jù)集中觀測值的實際值。在這個散點圖中一條完美的直線表明我們的模型完美地預(yù)測了 y-array 的值。

另一種直觀評估模型性能的方法是繪制殘差,即實際y數(shù)組值與預(yù)測 y-array 值之間的差異。

使用以下代碼語句可以輕松實現(xiàn):

  1. plt.hist(y_test - predictions) 

以下為代碼生成的可視化效果:

如何在Python中創(chuàng)建線性回歸機器學(xué)習(xí)模型?「入門篇」

這是我們的機器學(xué)習(xí)模型殘差的直方圖。

你可能會注意到,我們的機器學(xué)習(xí)模型中的殘差似乎呈正態(tài)分布。這正好是一個很好的信號!

它表明我們已經(jīng)選擇了適當(dāng)?shù)哪P皖愋?在這種情況下為線性回歸)來根據(jù)我們的數(shù)據(jù)集進行預(yù)測。在本課程的后面,我們將詳細了解如何確保使用了正確的模型。

測試模型的性能

我們在本課程開始時就了解到,回歸機器學(xué)習(xí)模型使用了三個主要性能指標:

  • 平均絕對誤差
  • 均方誤差
  • 均方根誤差

現(xiàn)在,我們來看看如何為本文中構(gòu)建的模型計算每個指標。在繼續(xù)之前,記得在Jupyter Notebook中運行以下import語句:

  1. from sklearn import metrics 

平均絕對誤差(MAE)

可以使用以下語句計算Python中的平均絕對誤差:

  1. metrics.mean_absolute_error(y_test, predictions) 

均方誤差(MSE)

同樣,你可以使用以下語句在Python中計算均方誤差:

  1. metrics.mean_squared_error(y_test, predictions) 

均方根誤差(RMSE)

與平均絕對誤差和均方誤差不同,scikit learn實際上沒有計算均方根誤差的內(nèi)置方法。

幸運的是,它真的不需要。由于均方根誤差只是均方根誤差的平方根,因此可以使用NumPy的sqrt方法輕松計算:

  1. np.sqrt(metrics.mean_squared_error(y_test, predictions)) 

附完整代碼

這是此Python線性回歸機器學(xué)習(xí)教程的全部代碼。

  1. import pandas as pd 
  2.  
  3. import numpy as np 
  4.  
  5. import matplotlib.pyplot as plt 
  6.  
  7. import seaborn as sns 
  8.  
  9. %matplotlib inline 
  10.  
  11. raw_data = pd.read_csv('Housing_Data.csv'
  12.  
  13. x = raw_data[['Avg. Area Income''Avg. Area House Age''Avg. Area Number of Rooms'
  14.  
  15.        'Avg. Area Number of Bedrooms''Area Population']] 
  16.  
  17. y = raw_data['Price'
  18.  
  19. from sklearn.model_selection import train_test_split 
  20.  
  21. x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3) 
  22.  
  23. from sklearn.linear_model import LinearRegression 
  24.  
  25. model = LinearRegression() 
  26.  
  27. model.fit(x_train, y_train) 
  28.  
  29. print(model.coef_) 
  30.  
  31. print(model.intercept_) 
  32.  
  33. pd.DataFrame(model.coef_, x.columns, columns = ['Coeff']) 
  34.  
  35. predictions = model.predict(x_test) 
  36.  
  37. # plt.scatter(y_test, predictions) 
  38.  
  39. plt.hist(y_test - predictions) 
  40.  
  41. from sklearn import metrics 
  42.  
  43. metrics.mean_absolute_error(y_test, predictions) 
  44.  
  45. metrics.mean_squared_error(y_test, predictions) 
  46.  
  47. np.sqrt(metrics.mean_squared_error(y_test, predictions)) 

 

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2017-10-24 14:32:48

2014-08-22 10:06:46

機器學(xué)習(xí)

2017-05-17 08:24:08

TensorFlow機器學(xué)習(xí)線性回歸

2022-06-02 15:42:05

Python機器學(xué)習(xí)

2017-10-23 15:46:37

2020-12-19 10:54:25

機器學(xué)習(xí)線性回歸算法

2020-12-20 20:31:56

Python機器學(xué)習(xí)多元線性回歸

2011-01-18 17:00:31

Postfix入門

2017-09-12 10:26:47

springbootmaven結(jié)構(gòu)

2022-03-15 07:55:09

JavaScript線性儀表圖開發(fā)

2020-11-10 08:37:05

Python線性回歸機器學(xué)習(xí)

2017-03-10 12:16:46

機器學(xué)習(xí)

2014-06-30 10:58:02

機器學(xué)習(xí)

2024-11-26 08:09:40

2017-10-18 09:48:13

深度學(xué)習(xí)TensorFlow入門篇

2019-09-03 15:45:31

Redis分片集群

2020-11-16 10:19:33

Java

2016-09-06 17:43:12

SwiftCloudKit開發(fā)

2009-06-09 13:02:30

NetBeans使用教程

2021-02-22 11:44:43

機器學(xué)習(xí)數(shù)據(jù)泄露學(xué)習(xí)
點贊
收藏

51CTO技術(shù)棧公眾號