農林漁牧網

您現在的位置是:首頁 > 農業

如何在 Python 中建立和訓練線性和 logistic 迴歸 ML 模型?

2023-01-06由 雷峰網leiphone 發表于 農業

logistic優勢比率是什麼

字幕組雙語原文:如何在 Python 中建立和訓練線性和 logistic 迴歸 ML 模型?

英語原文:How to Build and Train Linear and Logistic Regression ML Models in Python

翻譯:雷鋒字幕組(Key、君思)

如何在 Python 中建立和訓練線性和 logistic 迴歸 ML 模型?

線性迴歸與logistic迴歸,是目前最流行的兩個機器學習模型。

在我的上一篇教程裡,你們已經學習了線性迴歸機器學習演算法背後的歷史和理論。

本教程的主題是:如何用Python中的scikit-learn庫,建立、訓練和測試你的第一個線性迴歸機器學習模型。

第1節:線性迴歸

本教程中將使用的資料集

由於線性迴歸是我們在本課程中學習的第一種機器學習模型,在本教程中我們將使用人工建立的資料集。因為這樣我們可以專注於學習機器學習的概念,避免在清洗和處理資料上浪費不必要的時間。

具體來說,我們將使用住房資料的資料集並嘗試預測住房價格。在建立模型之前,我們首先要匯入所需的庫。

本教程中將使用的庫

我們將匯入的第一個庫是pandas,它是源於“panel data”(面板資料)的複合詞,是處理表格資料最受歡迎的Python庫。

按照慣例,以別名pd匯入pandas。你可以使用以下語句匯入pandas:

“>

import pandas as pd

接下來,我們需要匯入NumPy,一個流行的數值計算庫。 Numpy因其NumPy array型資料結構,以及reshape,arrange,append這些非常實用的方法而聞名。

按照慣例,以別名np匯入NumPy。你可以使用以下語句匯入numpy:

”>

“>

import numpy as np

接下來,我們需要匯入matplotlib,Python中最受歡迎的資料視覺化庫。matplotlib通常以別名plt匯入, 你可以使用以下語句匯入matplotlib:

”>

import matplotlib。pyplot as plt%matplotlib inline

語句%matplotlib inline將使我們的matplotlib視覺化效果直接嵌入到Jupyter Notebook中,使它們更易於訪問和解釋。

最後,匯入seaborn,這是另一個Python資料視覺化庫,可以讓我們更輕鬆地使用matplotlib建立美觀的視覺化結果。

你可以使用以下語句匯入seaborn:

“>

import seaborn as sns

總結一下,以下是本教程中需要匯入的所有庫:

”>

import pandas as pdimport numpy as npimport matplotlib。pyplot as plt%matplotlib inlineimport seaborn as sns

在以後的課程中,我會說明必需匯入哪些庫,但不會再像這樣進行詳細的解釋。

匯入資料集

正如之前所提到的,我們將用到一個房屋資訊的資料集。資料集已經以csv檔案的形式上傳到我的個人網站,連結如下:

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

要向你的Jupyter Notebook中匯入資料集,首先複製上述連結,貼上到你的瀏覽器中進行下載。然後,將該檔案移動到與你的Jupyter Notebook相同的資料夾下。

完成這一步後,輸入以下Python指令將向你的Jupyter Notebook匯入房屋資料集:

raw_data = pd。read_csv(‘Housing_Data。csv’)

這一資料集有著一系列特徵,包括:

該區域居住人口的平均收入

該區域房屋的平均房間個數

房屋的出售價格

房屋的具體地址

這些資料都是隨機生成的,所以你會發現一些不太合理的細節(如某個數字本應該是整數,卻有著多個小數位數)。

瞭解資料集

現在,資料集已被匯入並存儲為名為raw_data的變數。你可以用名為info的方法(method)得到該資料集的一些大致資訊。具體來說,執行指令raw_data。info()將得到:

RangeIndex: 5000 entries, 0 to 4999Data columns (total 7 columns):Avg。 Area Income 5000 non-null float64Avg。 Area House Age 5000 non-null float64Avg。 Area Number of Rooms 5000 non-null float64

另一個有效獲取資料集資訊的途徑,是生成散點圖矩陣。你可以用seaborn庫中的pairplot方法,並傳入整個資料框作為該方法的引數。完整指令如下:

sns。pairplot(raw_data)

該指令的輸入如下:

如何在 Python 中建立和訓練線性和 logistic 迴歸 ML 模型?

下一步,就讓我們開始建立我們的線性迴歸模型吧。

建立機器學習的線性迴歸模型

我們要做的第一件事,是將我們的資料分為一個x陣列(包含我們用於預測的所有資料)以及一個y陣列(包含我們試圖預測的所有資料)。

首先,我們要選擇包含哪幾列。你可以透過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陣列將包含以上的大部分變數,只排除Price(因為這就是我們試圖預測的一列)和Address(因為它只有文字資訊)。

讓我們建立x陣列,並將它儲存為變數x:

x = raw_data[[‘Avg。 Area Income’, ‘Avg。 Area House Age’, ‘Avg。 Area Number of Rooms’, ‘Avg。 Area Number of Bedrooms’, ‘Area Population’]]

然後,建立y陣列,並存儲為變數y:

y = raw_data[‘Price’]

於是,我們便成功地將資料集分成了一個x陣列(即模型的輸入值)與一個y陣列(即模型的輸出值)。在下一節,我們將學習如何進一步將資料集劃分為訓練資料與測試資料。

劃分資料集為訓練資料和測試資料

scikit-learn庫令我們可以很簡單地將我們的資料集劃分為訓練資料和測試資料。要做到這一步,我們需要從scikit-learn的model_selection模組匯入train_test_split函式:

from sklearn。model_selection import train_test_split

train_test_split函式需要三個輸入值:

我們的x陣列

我們的y陣列

我們想要的測試資料大小

有了這些引數,train_test_split函式便會為我們劃分資料了!如果我們希望我們的測試資料佔全部資料的30%,可以透過以下程式碼來實現:

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0。3)

讓我們開啟黑箱,看看裡面到底發生了什麼。

train_test_split函式返回了一個長度為4的Python列表,其中的元素分別為x_train,x_test,y_train和y_test。然後,我們便可以透過Python的列表解包,將這些變數分配到各自對應的變數名下。現在,我們已經很好地劃分了我們的資料集,是時候建立和訓練機器學習的線性迴歸模型了。

建立和訓練模型

首先,我們需要從scikit-learn庫中匯入LinearRegression估計器。其Python指令如下:

from sklearn。linear_model import LinearRegression

然後,我們需要建立LinearRegression這個Python物件的一個例項。我們將它儲存為變數model。相應程式碼如下:

model = LinearRegression()

我們可以用scikit-learn庫的fit方法,在我們的訓練資料上訓練這個模型。

model。fit(x_train, y_train)

現在,我們已經將這個模型訓練好了。你可以透過以下指令檢視這個模型的每個引數:

print(model。coef_)

上述指令將輸出:

[2。16176350e+01 1。65221120e+05 1。21405377e+05 1。31871878e+03 1。52251955e+01]

類似地,也可以透過以下指令檢視所得迴歸方程的截距:

print(model。intercept_)

上述指令將輸出:

-2641372。6673013503

還有一個更好的方法來檢視所有引數,那就是將它們一併放進一個數據框裡。這一步可以透過以下指令完成:

pd。DataFrame(model。coef_, x。columns, columns = [‘Coeff’])

這裡的輸出就好理解多了:

如何在 Python 中建立和訓練線性和 logistic 迴歸 ML 模型?

“>

讓我們花點時間,來看看這些引數分別是什麼意思。我們具體檢視變數Area Population,其引數大概為15。”>

這一數字表示,若其他所有變數保持不變,而Area Population增加了1個單位的話,那麼我們預測的變數——在這裡是Price——將增加15個單位。“>

換句話說,一個變數有著很大的引數,說明它對你試圖預測的變數有著很大的影響。而一個有著小引數的變數,其影響也同樣較小。”>

現在我們已經建立了我們的第一個“>機器學習線性迴歸模型,是時候用這個模型去為我們的測試資料做預測了。

根據我們的模型做出預測

scikit-learn 使從機器學習模型進行預測變得非常容易。您只需要 在 我們之前建立的模型變數上呼叫 預報方法 。

由於 預測 變數旨在進行預測,因此它僅接受 x陣列 引數。它將 為您生成 y值!

”>

這是您需要使用predict 方法從我們的模型生成預測的程式碼 :

“>

predictions = model。predict(x_test)

x_test 特徵值 儲存在 predictions 預測變數中。由於我們使用 train_test_split 方法將實際 值儲存 在 y_test中,因此下一步要做的是將 預測 陣列的值與y_test的值進行 比較。

”>

一種簡單的方法是使用散點圖繪製兩個陣列。 使用 plt。scatter 方法很容易構建

“>

plt。scatter(y_test, predictions)

這是此程式碼生成的散點圖:

如何在 Python 中建立和訓練線性和 logistic 迴歸 ML 模型?

”>

如您所見,我們的預測值非常接近資料集中觀測值的實際值。該散點圖中的一條完美的對角線將表明我們的模型完美地預測了 y陣列 值。

直觀地評估模型效能的另一種方法是繪製其 殘差,即實際 y陣列 值與預測 y陣列 值之間的差。

“>

下面的語句是實現此目的簡單方法:

”>

plt。hist(y_test - predictions)

這是此程式碼生成的視覺化效果:

如何在 Python 中建立和訓練線性和 logistic 迴歸 ML 模型?

“>

這是我們的機器學習模型殘差的直方圖。

您可能會注意到,我們的機器學習模型中的殘差似乎呈正態分佈。這是一個很好的訊號!

”>

它表明我們已經選擇了適當的模型型別(在這種情況下為線性迴歸)來根據我們的資料集進行預測。在本課程的後面,我們將詳細瞭解如何確保使用正確的模型。

測試模型的效能

在本課程開始時,我們瞭解到,迴歸機器學習模型使用了三個主要效能指標:

平均絕對誤差

均方誤差

均方根誤差

“>

現在,我們將看到如何為本教程中構建的模型計算這些指標中的每一個。在繼續之前,請在Jupyter Notebook中執行以下import語句:

”>

from sklearn import metrics

平均絕對誤差(MAE)

“>

您可以使用以下語句在Python中計算平均絕對錯誤:

”>

metrics。mean_absolute_error(y_test, predictions)

均方誤差(MSE)

“>

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

”>

metrics。mean_squared_error(y_test, predictions)

均方根誤差(RMSE)

與均值絕對誤差和均方誤差不同, scikit-learn 實際上沒有內建的方法來計算均方根誤差。

“>

幸運的是,它確實不需要。由於均方根誤差只是均方根誤差的平方根,因此您可以使用NumPy的 sqrt 方法輕鬆地進行計算:

”>

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

本教程的完整程式碼

“>

這是此Python線性迴歸機器學習教程的全部程式碼。您也可以在此GitHub儲存庫中檢視它 。

”>

import pandas as pdimport numpy as npimport matplotlib。pyplot as pltimport seaborn as sns%matplotlib inlineraw_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_splitx_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0。3)from sklearn。linear_model import LinearRegressionmodel = 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 metricsmetrics。mean_absolute_error(y_test, predictions)metrics。mean_squared_error(y_test, predictions)np。sqrt(metrics。mean_squared_error(y_test, predictions))

第2節:logistic 迴歸

注意-如果到目前為止您已經在本教程中進行編碼,並且已經建立了線性迴歸模型,則在繼續之前,您需要開啟一個新的Jupyter Notebook(其中沒有程式碼)。

我們將在本教程中使用的資料集

泰坦尼克號資料集是非常著名的資料集,其中包含有關泰坦尼克號上乘客的特徵。它通常用作logistic迴歸問題的入門資料集。

在本教程中,我們將結合泰坦尼克號資料集和Python logistic迴歸模型來預測乘客是否在泰坦尼克號墜機事故中倖免。

在 原來的泰坦尼克號資料集是公開的上 Kaggle。com,這是一個網站,主機的資料集和資料科學競賽。

為了使您本課程的學生更輕鬆,我們將使用Titanic資料集的半清潔版本,這將節省您在資料清潔和處理上的時間。

實際上,已清理的Titanic資料集已可供您使用。您可以透過單擊以下連結下載資料檔案:

泰坦尼克號資料

下載此檔案後, 在同一工作目錄中開啟 Jupyter Notebook,我們可以開始構建 logistic迴歸模型。

我們將在本教程中使用的匯入

“>

和以前一樣,本教程中將使用多個開源軟體庫。這是我透過Python Logistic迴歸模型進行編碼時需要遵循的匯入:

”>

import pandas as pdimport numpy as npimport matplotlib。pyplot as plt%matplotlib inlineimport seaborn as sns

“>

接下來,我們需要將Titanic資料集匯入到我們的Python指令碼中。

透過探索性資料分析瞭解我們的資料集

每個分類類別的普遍性

在使用機器學習技術對分類問題進行建模時,瞭解類別之間的比率始終是一個好主意。對於此特定問題,檢視我們的訓練資料中有多少倖存者與非倖存者是有用的。

”>

一種簡單的視覺化方法是使用 seaborn plot countplot。在此示例中,您可以 使用以下Python程式碼建立適當的 seasborn繪圖:

“>

sns。countplot(x=‘Survived’, data=titanic_data)

這將生成以下圖:

如何在 Python 中建立和訓練線性和 logistic 迴歸 ML 模型?

”>

如您所見,與倖存者相比,非倖存者的發病率要高得多。

性別之間的成活率

“>

比較相對於某些其他資料特徵的生存率也很有用。例如,我們可以 使用以下Python程式碼來比較Sex的Male 和 Female 值 之間的生存率 :

”>

sns。countplot(x=‘Survived’, hue=‘Sex’, data=titanic_data)

這將生成以下圖:

如何在 Python 中建立和訓練線性和 logistic 迴歸 ML 模型?

“>

如您所見, 性別 為 男性的 乘客比性別 為 女性的乘客更有可能是非倖存者 。

旅客艙位之間的成活率

我們可以使用Pclass 變數執行類似的分析, 以檢視哪個旅客類別最有(和最少)可能有幸存者。

”>

這是執行此操作的程式碼:

“>

sns。countplot(x=‘Survived’, hue=‘Pclass’, data=titanic_data)

這將生成以下圖:

如何在 Python 中建立和訓練線性和 logistic 迴歸 ML 模型?

”>

“>

從該圖中最明顯的觀察結果是, 當泰坦尼克號墜毀時,Pclass 值為 3的乘客-表示最便宜,最不豪華的第三等艙的乘客 更有可能死亡。

從我們的資料集中刪除空資料

”>

首先,讓我們檢查資料集中包含缺失資料的位置。為此,請執行以下命令:

“>

titanic_data。isnull()

這將生成一個布林值的DataFrame,如果該單元格 為空值,則該單元格包含 True,否則為 False 。這是它的樣子的影象:

如何在 Python 中建立和訓練線性和 logistic 迴歸 ML 模型?

”>

評估此資料集中缺失資料的一種更為有用的方法是建立快速視覺化。為此,我們可以使用 seaborn 視覺化庫。這是快速命令,可用於 使用 seaborn 庫建立 熱圖:

“>

sns。heatmap(titanic_data。isnull(), cbar=False)

這是生成的視覺化效果:

如何在 Python 中建立和訓練線性和 logistic 迴歸 ML 模型?

”>

在此視覺化中,白線表示資料集中缺少的值。您會看到“ 年齡” 和“ 機艙”列包含“泰坦尼克號”資料集中大部分丟失的資料。

特別是“ 年齡”列包含的缺失量很小,我們可以使用某種形式的數學來填充缺失資料。另一方面, 機艙 資料缺少足夠的資料,因此我們有可能將其完全從模型中刪除。

用其餘資料集中的平均資料填充缺失資料的過程稱為 歸因。現在,我們將使用 插補 來填充“ 年齡” 列中的缺失資料 。

估算的最基本形式是 用 整個資料集中的平均年齡值 填充缺失的 年齡資料 。但是,有更好的方法。

“>

我們將 使用 該乘客所屬 的特定Pclass乘客艙的平均Age值來 填充缺少的 Age值 。要了解為什麼這樣做有用,請考慮以下箱線圖:

sns。boxplot(titanic_data[‘Pclass’], titanic_data[‘Age’])

如何在 Python 中建立和訓練線性和 logistic 迴歸 ML 模型?

”>

如您所見, Pclass 值為 1 (最昂貴的乘客艙)的乘客往往是最老的,而Pclass 值為 3 (最便宜的乘客)的乘客 往往是最年輕的。這是非常符合邏輯的,所以我們將使用的平均 年齡 不同範圍內的值 Pclass 資料 imputate 我們丟失的資料 年齡 列。

“>

對像泰坦尼克號資料集這樣的資料集執行插補的最簡單方法 是構建自定義函式。首先,我們需要確定 每個 Pclass 值的平均 Age值。

”>

#Pclass value 1titanic_data[titanic_data[‘Pclass’] == 1][‘Age’]。mean()#Pclass value 2titanic_data[titanic_data[‘Pclass’] == 2][‘Age’]。mean()#Pclass 3titanic_data[titanic_data[‘Pclass’] == 2][‘Age’]。mean()

“>

這是我們將用來估算 缺少的 Age 變數的最終函式 :

def impute_missing_age(columns): age = columns[0] passenger_class = columns[1] if pd。isnull(age): if(passenger_class == 1): return titanic_data[titanic_data[‘Pclass’] == 1][‘Age’]。mean() elif(passenger_class == 2): return titanic_data[titanic_data[‘Pclass’] == 2][‘Age’]。mean() elif(passenger_class == 3): return titanic_data[titanic_data[‘Pclass’] == 3][‘Age’]。mean() else: return age

”>

現在,該插補功能已經完成,我們需要將其應用於titanic_data DataFrame 中的每一行 。Python的 apply 方法是一個出色的工具:

“>

titanic_data[‘Age’] = titanic_data[[‘Age’, ‘Pclass’]]。apply(impute_missing_age, axis = 1)

”>

既然我們已經 對每一行執行了 估算以處理丟失的 Age 資料,那麼讓我們研究一下原始箱形圖:

“>

sns。heatmap(titanic_data。isnull(), cbar=False)

您會 發現我們的熊貓DataFrame 的Age列中不再缺少任何資料 !

您可能想知道為什麼我們要花費大量時間 專門處理“ 年齡”列中的丟失資料 。這是因為考慮到年齡 對大多數災難和疾病生存的影響, 在我們的資料集中,該變數可能具有很高的預測價值。

”>

現在我們已經瞭解了該資料集的結構並刪除了缺失的資料,讓我們開始構建logistic迴歸機器學習模型。

建立logistic迴歸模型

現在是時候刪除我們的logistic迴歸模型了。

刪除缺少太多資料的列

“>

首先,我們刪除“ Cabin” 列。正如我們所提到的,此列中丟失資料的普遍性意味著 對丟失資料進行估算是不明智的 ,因此我們將使用以下程式碼將其完全刪除:

”>

titanic_data。drop(‘Cabin’, axis=1, inplace = True)

“>

接下來,讓我們使用pandas dropna() 方法刪除包含丟失資料的所有其他列 :

”>

titanic_data。dropna(inplace = True)

使用虛擬變數處理分類資料

我們需要處理的下一個任務是處理分類特徵。即,我們需要找到一種方法來對非自然數值的觀測值進行數值處理。

性別 列就是一個很好的例子,該 列具有兩個值: Male 和 Female。同樣,“ 登船”一 欄包含一個字母,表示該乘客離開的城市。

為了解決這個問題,我們將建立 偽變數。這些為非數值特徵的每個類別分配一個數值。

幸運的是, pandas 具有一個名為get_dummies()的內建方法 ,可輕鬆建立虛擬變數。該 get_dummies 方法確實有一個問題-它會在資料幀列中的每個值建立新列。

“>

讓我們考慮一個示例,以幫助您更好地理解這一點。如果我們 在Age 列上呼叫 get_dummies()方法, 則會得到以下輸出:

pd。get_dummies(titanic_data[‘Sex’])

如何在 Python 中建立和訓練線性和 logistic 迴歸 ML 模型?

”>

如您所見,這將建立兩個新列: female 和 male。這些列都將是彼此的完美預測,由於值 0 在 雌性列指示的值 1 在 雄性 柱,反之亦然。

“>

這稱為 多重共線性 ,它會大大降低演算法的預測能力。要刪除它,我們可以將引數drop_first = True新增 到 get_dummies 方法中,如下所示:

”>

pd。get_dummies(titanic_data[‘Sex’], drop_first = True)

“>

現在,讓我們為我們的虛擬變數列 性別 和 走上 列,並將它們分配給變數稱為 性 和 進發。

”>

sex_data = pd。get_dummies(titanic_data[‘Sex’], drop_first = True)embarked_data = pd。get_dummies(titanic_data[‘Embarked’], drop_first = True)

“>

還有就是要注意的一個重要的事情有關 走上 下面定義的變數。它有兩列: Q 和 S,但是由於我們已經刪除了另一列( C 列),因此其餘兩列都不是彼此的完美預測變數,因此 在修改後的新資料集中不存在多重共線性。

將虛擬變數新增到 pandas DataFrame

”>

Next we need to add our sex and embarked columns to the DataFrame。

“>

您可以 使用以下程式碼 將這些資料列連線到現有的 pandas DataFrame中:

”>

titanic_data = pd。concat([titanic_data, sex_data, embarked_data], axis = 1)

“>

現在,如果您執行命令 print(titanic_data。columns),那麼Jupyter Notebook將生成以下輸出:

”>

Index([‘PassengerId’, ‘Survived’, ‘Pclass’, ‘Name’, ‘Sex’, ‘Age’, ‘SibSp’, ‘Parch’, ‘Ticket’, ‘Fare’, ‘Embarked’, ‘male’, ‘Q’, ‘S’], dtype=‘object’)

的存在 男性, Q和 S 列顯示,我們的資料被成功地連線起來。

從資料集中刪除不必要的列

“>

這意味著我們現在可以 從DataFrame中刪除原始的 Sex 和 Embarked列。還有其他一些列(如 Name , PassengerId, Ticket)無法預測泰坦尼克號的撞車倖存率,因此我們也將其刪除。以下程式碼為我們處理了此問題:

”>

“>

titanic_data。drop([‘Name’, ‘Ticket’, ‘Sex’, ‘Embarked’], axis = 1, inplace = True)

如果您 現在列印 titanic_data。columns,那麼Jupyter Notebook將生成以下輸出:

”>

Index([‘Survived’, ‘Pclass’, ‘Age’, ‘SibSp’, ‘Parch’, ‘Fare’, ‘male’, ‘Q’, ‘S’], dtype=‘object’

DataFrame現在具有以下外觀:

如何在 Python 中建立和訓練線性和 logistic 迴歸 ML 模型?

“>

”>

如您所見,該資料集中的每個欄位現在都是數字,這使其成為logistic迴歸機器學習演算法的理想候選者。

建立培訓資料和測試資料

接下來,是時候將我們的 titanic_data 分為訓練資料和測試資料了。和以前一樣,我們將使用scikit-learn的內建功能 來執行此操作。

“>

首先,我們需要將我們的資料分為 x 值(我們將用於進行預測 的資料)和 y值(我們正在嘗試預測的資料)。以下程式碼處理此問題:

”>

y_data = titanic_data[‘Survived’]x_data = titanic_data。drop(‘Survived’, axis = 1)

“>

接下來,我們需要 從scikit-learn匯入 train_test_split函式 。以下程式碼執行此匯入:

”>

from sklearn。model_selection import train_test_split

“>

最後,我們可以 結合使用 train_test_split函式和列表解壓縮來生成我們的訓練資料和測試資料:

”>

x_training_data, x_test_data, y_training_data, y_test_data = train_test_split(x_data, y_data, test_size = 0。3)

請注意,在這種情況下,測試資料是引數test_size = 0。3指定的原始資料集的30% 。

“>

現在,我們為logistic迴歸模型建立了訓練資料和測試資料。我們將在本教程的下一部分中訓練我們的模型。

訓練logistic迴歸模型

”>

要訓練我們的模型,我們首先需要 使用以下命令從scikit-learn匯入適當的模型 :

“>

from sklearn。linear_model import LogisticRegression

”>

接下來,我們需要透過例項化LogisticRegression 物件的例項來建立模型 :

“>

model = LogisticRegression()

”>

要訓練模型,我們需要 在 剛剛建立的LogisticRegression物件上呼叫 fit方法, 並傳入 x_training_data 和 y_training_data 變數,如下所示:

“>

model。fit(x_training_data, y_training_data)

我們的模型現已訓練完畢。我們將在本教程的下一部分中開始使用此模型進行預測。

使用我們的Logistic迴歸模型進行預測

”>

讓我們使用 剛剛建立的模型logistic迴歸模型對測試資料進行一組預測 。我們將這些預測儲存在一個名為predictions的變數中 :

“>

predictions = model。predict(x_test_data)

我們已經做出了預測。接下來讓我們檢查模型的準確性。

”>

測量Logistic迴歸機器學習模型的效能

scikit-learn具有一個出色的內建模組,稱為分類 _報告 ,可輕鬆衡量分類機器學習模型的效能。我們將使用此模組來評估我們剛剛建立的模型的效能。

“>

首先,讓我們匯入模組:

”>

from sklearn。metrics import classification_report

“>

接下來,讓我們使用該模組為我們的logistic迴歸機器學習模組計算效能指標:

”>

classification_report(y_test_data, predictions)

“>

這是此命令的輸出:

”>

precision recall f1-score support 0 0。83 0。87 0。85 169 1 0。75 0。68 0。72 98 accuracy 0。80 267 macro avg 0。79 0。78 0。78 267weighted avg 0。80 0。80 0。80 267

“>

如果您有興趣檢視原始的混淆矩陣並手動計算效能指標,則可以使用以下程式碼進行操作:

”>

from sklearn。metrics import confusion_matrixprint(confusion_matrix(y_test_data, predictions))

“>

這將產生以下輸出:

”>

[[145 22] [ 30 70]]

本教程的完整程式碼

“>

您可以在GitHub儲存庫中檢視本教程的完整程式碼 。還將其貼上在下面以供您參考:

”>

import pandas as pdimport numpy as npimport matplotlib。pyplot as plt%matplotlib inlineimport seaborn as sns#Import the data settitanic_data = pd。read_csv(‘titanic_train。csv’)#Exploratory data analysissns。heatmap(titanic_data。isnull(), cbar=False)sns。countplot(x=‘Survived’, data=titanic_data)sns。countplot(x=‘Survived’, hue=‘Sex’, data=titanic_data)sns。countplot(x=‘Survived’, hue=‘Pclass’, data=titanic_data)plt。hist(titanic_data[‘Age’]。dropna())plt。hist(titanic_data[‘Fare’])sns。boxplot(titanic_data[‘Pclass’], titanic_data[‘Age’])#Imputation functiondef impute_missing_age(columns): age = columns[0] passenger_class = columns[1] if pd。isnull(age): if(passenger_class == 1): return titanic_data[titanic_data[‘Pclass’] == 1][‘Age’]。mean() elif(passenger_class == 2): return titanic_data[titanic_data[‘Pclass’] == 2][‘Age’]。mean() elif(passenger_class == 3): return titanic_data[titanic_data[‘Pclass’] == 3][‘Age’]。mean() else: return age#Impute the missing Age datatitanic_data[‘Age’] = titanic_data[[‘Age’, ‘Pclass’]]。apply(impute_missing_age, axis = 1)#Reinvestigate missing datasns。heatmap(titanic_data。isnull(), cbar=False)#Drop null datatitanic_data。drop(‘Cabin’, axis=1, inplace = True)titanic_data。dropna(inplace = True)#Create dummy variables for Sex and Embarked columnssex_data = pd。get_dummies(titanic_data[‘Sex’], drop_first = True)embarked_data = pd。get_dummies(titanic_data[‘Embarked’], drop_first = True)#Add dummy variables to the DataFrame and drop non-numeric datatitanic_data = pd。concat([titanic_data, sex_data, embarked_data], axis = 1)titanic_data。drop([‘Name’, ‘PassengerId’, ‘Ticket’, ‘Sex’, ‘Embarked’], axis = 1, inplace = True)#Print the finalized data settitanic_data。head()#Split the data set into x and y datay_data = titanic_data[‘Survived’]x_data = titanic_data。drop(‘Survived’, axis = 1)#Split the data set into training data and test datafrom sklearn。model_selection import train_test_splitx_training_data, x_test_data, y_training_data, y_test_data = train_test_split(x_data, y_data, test_size = 0。3)#Create the modelfrom sklearn。linear_model import LogisticRegressionmodel = LogisticRegression()#Train the model and create predictionsmodel。fit(x_training_data, y_training_data)predictions = model。predict(x_test_data)#Calculate performance metricsfrom sklearn。metrics import classification_reportprint(classification_report(y_test_data, predictions))#Generate a confusion matrixfrom sklearn。metrics import confusion_matrixprint(confusion_matrix(y_test_data, predictions))

總結

在本教程中,您學習瞭如何在Python中構建線性迴歸和logistic迴歸機器學習模型。

如果您想了解有關構建,培訓和部署前沿機器學習模型的更多資訊,我的電子書 實用機器學習將教您如何使用實際專案構建9種不同的機器學習模型。

您可以將程式碼從電子書部署到GitHub或個人投資組合,以向潛在僱主展示。這本書將於8月3日發行, 現在可以50%的價格預訂!

這是您從本文中學到的內容的簡短摘要:

如何匯入構建線性迴歸機器學習演算法所需的庫

如何使用scikit-learn將資料集分為訓練資料和測試資料

如何使用 scikit-learn 訓練線性迴歸模型並使用該模型進行預測

如何使用scikit-learn計算線性迴歸效能指標

為什麼Titanic資料集經常用於學習機器學習分類技術

處理分類機器學習問題的資料集時如何執行探索性資料分析

如何處理Pandas DataFrame中的缺失資料

什麼 歸集 手段,以及如何使用它來填補丟失的資料

如何為機器學習資料集中的分類資料建立虛擬變數

如何在Python中訓練Logistic迴歸機器學習模型

如何在Python中使用logistic迴歸模型進行預測

如何將 scikit-的 classification_report 為機器學習分類問題快速計算效能指標

雷鋒字幕組是由AI愛好者組成的志願者翻譯團隊;團隊成員有大資料專家、演算法工程師、影象處理工程師、產品經理、產品運營、IT諮詢人、在校師生;志願者們來自IBM、AVL、Adobe、阿里、百度等知名企業,北大、清華、港大、中科院、南卡羅萊納大學、早稻田大學等海內外高校研究所。

轉載請聯絡字幕組微信並註明出處:雷鋒字幕組

雷鋒網雷鋒網雷鋒網