機器學習入坑指南(五):邏輯迴歸

1、邏輯迴歸簡介

邏輯迴歸用於解決「二分類」問題,好比判斷明天是晴是雨,判斷一封郵件是不是垃圾郵件,判斷腫瘤是不是惡性的等等。python

讓咱們舉個例子來講明爲何這類問題適合用邏輯迴歸而不是線性迴歸來解決。git

假如咱們想用腫瘤的大小判斷它是否爲惡性,根據樣本,獲得以下的線性迴歸模型:github

看起來這條線擬合地並非很使人滿意,但彷佛仍是可以解決問題的,咱們把輸出的中值做爲閾值,就能夠獲得正確的分類結果。算法

但若是在右側再加入一個樣本,直線會發生如下改變:dom

很明顯出現了矛盾。這個時候,假如咱們用於預測的模型長下面這樣:函數

好像問題就迎刃而解了呢!那麼什麼函數長這樣呢?通過一些科學的設想與推導(參考「阿拉丁吃米粉的文章 - 邏輯迴歸的簡單解釋」),咱們發現 Sigmoid 函數,即測試

$$S(x) = \frac{1}{1 + e^{-\theta x}}$$.net

很是符合這個特性,並且與咱們須要解決的問題的思路——經過機率來判斷分類的狀況相統一。code

接下來,問題變成了求 $\theta$ 的值,與線性迴歸同樣,咱們能夠找出損失函數,再使用梯度降低法(參考「邏輯迴歸詳解」「如何理解梯度降低法」)來求得 $\theta$。orm

對有多元輸入的狀況,則須要求出 $\theta^T$。

2、Python 代碼實現

示例數據地址:GitHub - Avik-Jain/100-Days-Of-ML-Code/datasets

1 數據預處理

# 導入庫
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# 導入數據
dataset = pd.read_csv('Social_Network_Ads.csv')
X = dataset.iloc[:, [2, 3]].values
y = dataset.iloc[:, 4].values
# 分割
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)
# 特徵縮放
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

2 邏輯迴歸模型

# 擬合邏輯迴歸模型
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression()
classifier.fit(X_train, y_train)

3 預測與評價

這裏咱們使用「混淆矩陣」來評估預測的結果。混淆矩陣就是將預測的結果與測試集中實際的結果進行對比,好比矩陣

$$\begin{bmatrix}12
& 1\ 2
& 14
\end{bmatrix}$$

是指預測爲第 1 類,實際也爲第 1 類的結果有 12 個,預測爲第 2 類,實際爲第 1 類的結果有 1個;

預測爲第 1 類,實際爲第 2 類的有 2 個,預測爲第 2 類,實際也爲第 2 類的有14 個。

# 使用測試集預測
y_pred = classifier.predict(X_test)
# 構建混淆矩陣
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)

能夠看出,實際應用時使用的代碼很是簡單。可是咱們只有理解了算法自己,才能更好地利用它。

歡迎關注 Evan 的博客

相關文章
相關標籤/搜索