Python中怎么創(chuàng)建線性回歸機(jī)器學(xué)習(xí)模型

Python中怎么創(chuàng)建線性回歸機(jī)器學(xué)習(xí)模型,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問題。

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),鶴崗企業(yè)網(wǎng)站建設(shè),鶴崗品牌網(wǎng)站建設(shè),網(wǎng)站定制,鶴崗網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,鶴崗網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

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

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

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

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

2.需要用到的Python庫(kù)

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

一般我們會(huì)用pd來(lái)命名該庫(kù),你可以使用以下語(yǔ)句導(dǎo)入Pandas:

import pandas as pd

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

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

import numpy as np

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

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

import matplotlib.pyplot as plt  %matplotlib inline

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

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

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

import seaborn as sns

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

import pandas as pd  import numpy as np  import matplotlib.pyplot as plt  %matplotlib inline  import seaborn as sns

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

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

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

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

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

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

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

  • 房屋面積的平均售價(jià)

  • 該地區(qū)平均客房總數(shù)

  • 房子賣出的價(jià)格

  • 房子的地址

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

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

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

<class 'pandas.core.frame.DataFrame'>  RangeIndex: 5000 entries, 0 to 4999  Data columns (total 7 columns):  Avg. Area Income                5000 non-null float64  Avg. Area House Age             5000 non-null float64  Avg. Area Number of Rooms       5000 non-null float64  Avg. Area Number of Bedrooms    5000 non-null float64  Area Population                 5000 non-null float64  Price                           5000 non-null float64  Address                         5000 non-null object  dtypes: float64(6), object(1)  memory usage: 273.6+ KB

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

sns.pairplot(raw_data)

該語(yǔ)句的輸出如下:

Python中怎么創(chuàng)建線性回歸機(jī)器學(xué)習(xí)模型

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

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

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

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

Index(['Avg. Area Income', 'Avg. Area House Age', 'Avg. Area Number of Rooms',         'Avg. Area Number of Bedrooms', 'Area Population', 'Price', 'Address'],        dtype='object')

x-array除了價(jià)格(因?yàn)檫@是我們要預(yù)測(cè)的變量)和地址(因?yàn)樗鼉H包含文本)之外,我們將在所有這些變量中使用。

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

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

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

y = raw_data['Price']

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

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

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

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

from sklearn.model_selection import train_test_split

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

  • x-array

  • y-array

  • 測(cè)試數(shù)據(jù)的期望大小

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

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

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

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

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

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

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

from sklearn.linear_model import LinearRegression

接下來(lái),我們需要?jiǎng)?chuàng)建一個(gè)線性回歸Python對(duì)象的實(shí)例。我們將把它賦給一個(gè)名為model的變量。下面是代碼:

model = LinearRegression()

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

model.fit(x_train, y_train)

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

print(model.coef_)

輸出:

[2.16176350e+01 1.65221120e+05 1.21405377e+05 1.31871878e+03   1.52251955e+01]

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

print(model.intercept_)

輸出:

-2641372.6673013503

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

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

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

Python中怎么創(chuàng)建線性回歸機(jī)器學(xué)習(xí)模型

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

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

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

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

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

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

因?yàn)?predict 變量是用來(lái)進(jìn)行預(yù)測(cè)的,所以它只接受一個(gè) x-array 參數(shù),它將為我們生成y值!

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

predictions = model.predict(x_test)

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

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

plt.scatter(y_test, predictions)

這是代碼生成的散點(diǎn)圖:

Python中怎么創(chuàng)建線性回歸機(jī)器學(xué)習(xí)模型

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

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

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

plt.hist(y_test - predictions)

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

Python中怎么創(chuàng)建線性回歸機(jī)器學(xué)習(xí)模型

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

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

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

測(cè)試模型的性能

我們?cè)诒菊n程開始時(shí)就了解到,回歸機(jī)器學(xué)習(xí)模型使用了三個(gè)主要性能指標(biāo):

  • 平均絕對(duì)誤差

  • 均方誤差

  • 均方根誤差

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

from sklearn import metrics

平均絕對(duì)誤差(MAE)

可以使用以下語(yǔ)句計(jì)算Python中的平均絕對(duì)誤差:

metrics.mean_absolute_error(y_test, predictions)

均方誤差(MSE)

同樣,你可以使用以下語(yǔ)句在Python中計(jì)算均方誤差:

metrics.mean_squared_error(y_test, predictions)

均方根誤差(RMSE)

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

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

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

附完整代碼

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

import pandas as pd  import numpy as np  import matplotlib.pyplot as plt  import seaborn as sns  %matplotlib inline  raw_data = pd.read_csv('Housing_Data.csv')  x = raw_data[['Avg. Area Income', 'Avg. Area House Age', 'Avg. Area Number of Rooms',         'Avg. Area Number of Bedrooms', 'Area Population']]  y = raw_data['Price']  from sklearn.model_selection import train_test_split  x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3)  from sklearn.linear_model import LinearRegression  model = LinearRegression()  model.fit(x_train, y_train)  print(model.coef_)  print(model.intercept_)  pd.DataFrame(model.coef_, x.columns, columns = ['Coeff'])  predictions = model.predict(x_test)  # plt.scatter(y_test, predictions)  plt.hist(y_test - predictions)  from sklearn import metrics  metrics.mean_absolute_error(y_test, predictions)  metrics.mean_squared_error(y_test, predictions)  np.sqrt(metrics.mean_squared_error(y_test, predictions))

看完上述內(nèi)容,你們掌握Python中怎么創(chuàng)建線性回歸機(jī)器學(xué)習(xí)模型的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

分享名稱:Python中怎么創(chuàng)建線性回歸機(jī)器學(xué)習(xí)模型
分享網(wǎng)址:http://muchs.cn/article2/gdsooc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、外貿(mào)建站、網(wǎng)站改版、商城網(wǎng)站、營(yíng)銷型網(wǎng)站建設(shè)、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)