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

  • 2020 年 7 月 13 日
  • AI

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

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


線性回歸與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 pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns

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


導入數據集

正如之前所提到的,我們將用到一個房屋資訊的數據集。數據集已經以csv文件的形式上傳到我的個人網站,鏈接如下:

//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)

該指令的輸入如下:


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


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

我們要做的第一件事,是將我們的數據分為一個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'])

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

讓我們花點時間,來看看這些參數分別是什麼意思。我們具體查看變數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)

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

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

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

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

plt.hist(y_test - predictions)

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

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

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

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


測試模型的性能

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

  • 平均絕對誤差

  • 均方誤差

  • 均方根誤差

現在,我們將看到如何為本教程中構建的模型計算這些指標中的每一個。在繼續之前,請在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 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))


第2節:logistic 回歸

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


我們將在本教程中使用的數據集

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

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

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

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

實際上,已清理的Titanic數據集已可供您使用。您可以通過單擊以下鏈接下載數據文件:

下載此文件後, 在同一工作目錄中打開  Jupyter Notebook,我們可以開始構建 logistic回歸模型。


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

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

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

接下來,我們需要將Titanic數據集導入到我們的Python腳本中。


通過探索性數據分析了解我們的數據集

每個分類類別的普遍性

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

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

sns.countplot(x='Survived', data=titanic_data)

這將生成以下圖:

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


性別之間的成活率

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

sns.countplot(x='Survived', hue='Sex', data=titanic_data)

這將生成以下圖:

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


旅客艙位之間的成活率

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

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

sns.countplot(x='Survived', hue='Pclass', data=titanic_data)

這將生成以下圖:

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


從我們的數據集中刪除空數據

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

titanic_data.isnull()

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

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

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

這是生成的可視化效果:

在此可視化中,白線表示數據集中缺少的值。您會看到「  年齡」  和「  機艙」列包含「泰坦尼克號」數據集中大部分丟失的數據。

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

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

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

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

sns.boxplot(titanic_data['Pclass'], titanic_data['Age'])

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

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

#Pclass value 1
titanic_data[titanic_data['Pclass'] == 1]['Age'].mean()
#Pclass value 2
titanic_data[titanic_data['Pclass'] == 2]['Age'].mean()
#Pclass 3
titanic_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'])

如您所見,這將創建兩個新列:  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現在具有以下外觀:

如您所見,該數據集中的每個欄位現在都是數字,這使其成為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       267
weighted avg       0.80      0.80      0.80       267

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

from sklearn.metrics import confusion_matrix
print(confusion_matrix(y_test_data, predictions))

這將產生以下輸出:

[[145  22]
 [ 30  70]]


本教程的完整程式碼

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

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
#Import the data set
titanic_data = pd.read_csv('titanic_train.csv')
#Exploratory data analysis
sns.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 function
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
#Impute the missing Age data
titanic_data['Age'] = titanic_data[['Age', 'Pclass']].apply(impute_missing_age, axis = 1)
#Reinvestigate missing data
sns.heatmap(titanic_data.isnull(), cbar=False)
#Drop null data
titanic_data.drop('Cabin', axis=1, inplace = True)
titanic_data.dropna(inplace = True)
#Create dummy variables for Sex and Embarked columns
sex_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 data
titanic_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 set
titanic_data.head()
#Split the data set into x and y data
y_data = titanic_data['Survived']
x_data = titanic_data.drop('Survived', axis = 1)
#Split the data set into training data and test data
from sklearn.model_selection import 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)
#Create the model
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
#Train the model and create predictions
model.fit(x_training_data, y_training_data)
predictions = model.predict(x_test_data)
#Calculate performance metrics
from sklearn.metrics import classification_report
print(classification_report(y_test_data, predictions))
#Generate a confusion matrix
from sklearn.metrics import confusion_matrix
print(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、阿里、百度等知名企業,北大、清華、港大、中科院、南卡羅萊納大學、早稻田大學等海內外高校研究所。

了解字幕組請聯繫微信:tlacttlact

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

雷鋒網雷鋒網雷鋒網

Tags: