邏輯回歸
首先,邏輯回歸是一個分類算法而不是一個回歸算法,該算法可根據已知的一系列因變量估計離散數值(比方說二進制數值 0 或 1 ,是或否,真或假),它通過将資料拟合進一個 邏輯函數 來預估一個事件出現的機率。因為它預估的是機率,是以它的輸出值大小在 0 和 1 之間(正如所預計的一樣)。
[比利時的人口增長數量圖]
邏輯函數由于它的S形,有時也被稱為sigmoid函數。
通過一個簡單的例子來了解這個算法。
假設你的朋友讓你解開一個謎題。這隻會有兩個結果:你解開了或是你沒有解開(離散值)。想象你要解答很多道題來找出你所擅長的主題。這個研究的結果就會像是這樣:假設題目是一道十年級的三角函數題,你有 70% 的可能會解開這道題。然而,若題目是個五年級的曆史題,你隻有 30% 的可能性回答正确。這就是邏輯回歸能提供給你的資訊。
用途
邏輯回歸主要用于分類,比如郵件分類,是否惡性良性腫瘤、癌症診斷,使用者性别判斷,預測使用者購買産品類别,判斷評論是正面還是負面等。
邏輯回歸的數學模型和求解都相對比較簡潔,實作相對簡單。通過對特征做離散化和其他映射,邏輯回歸也可以處理非線性問題,是一個非常強大的分類器。是以在實際應用中,當我們能夠拿到許多低層次的特征時,可以考慮使用邏輯回歸來解決我們的問題。
加載資料(Data Loading)
我們假設輸入是一個特征矩陣或者 csv 檔案,我們使用 NumPy 來載入 csv 檔案。
以下是從 UCI 機器學習資料倉庫中下載下傳的資料。
import numpy as np
import urllib.request
# 加載資料
url = "http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
raw_data = urllib.request.urlopen(url)
# 把CSV檔案轉化為numpy matrix
dataset = np.loadtxt(raw_data, delimiter=",")
# 訓練集和結果
X = dataset[:, 0:7]
y = dataset[:, 8]
複制
資料歸一化(Data Normalization)與标準化
資料歸一化是指把數字變成(0,1)之間的小數。
資料的标準化是将資料按比例縮放,使之落入一個小的特定區間。
大多數機器學習算法中的梯度方法對于資料的縮放和尺度都是很敏感的,在開始跑算法之前,我們應該進行歸一化或者标準化的過程,這使得特征資料縮放到 0-1 範圍中。scikit-learn 提供了歸一化和标準化的方法:
from sklearn import preprocessing
# 歸一化
normalized_X = preprocessing.normalize(X)
# 标準化
standardized_X = preprocessing.scale(X)
複制
特征選擇(Feature Selection)
在解決一個實際問題的過程中,選擇合适的特征或者建構特征的能力特别重要。這成為特征選擇或者特征工程。
特征選擇時一個很需要創造力的過程,更多的依賴于直覺和專業知識,并且有很多現成的算法來進行特征的選擇。
下面的樹算法(Tree algorithms)計算特征的資訊量:
from sklearn import metrics
from sklearn.ensemble import ExtraTreesClassifier
model = ExtraTreesClassifier()
model.fit(X, y)
# 顯示每個屬性相對重要性
print(model.feature_importances_)
複制
關于特征提取
機器學習是一個過程,這樣的過程包括資料處理 + 模型訓練,而特征提取是資料進行中不可或缺的一環。
比如預測什麼樣的生活方式特征是引發冠心病 (CHD) 的危險因素?給定具有吸煙狀态、飲食、鍛煉、飲酒和 CHD 狀态度量的患者樣本,可以使用這四個生活方式變量建立一個模型,用于預測患者樣本中 CHD 的存在性。然後可使用此模型為每個因子推導幾率比估計值,進而獲知某些資訊,例如吸煙者比非吸煙者在何種程度上更易患 CHD。
算法選擇–邏輯回歸
大多數問題都可以歸結為二進制分類問題。這個算法的優點是可以給出資料所在類别的機率。
from sklearn import metrics
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X, y)
# 預測
expected = y
predicted = model.predict(X)
# 模型拟合概述
print(metrics.classification_report(expected, predicted))
print(metrics.confusion_matrix(expected, predicted))
複制
最後
以上 加載資料 -> 資料歸一化 -> 特征選擇 -> 算法選擇 既是機器學習的一般代碼邏輯。如果選擇其它算法,隻需要更改最後一步算法選擇即可。
代碼位址
參考文獻
- Logistic Regression 模型簡介
- Logistic 回歸
- scikit-learn的主要子產品和基本使用