1. 程式人生 > >sklearn分類器演算法:邏輯迴歸及案例分析

sklearn分類器演算法:邏輯迴歸及案例分析

分類演算法之邏輯迴歸

邏輯迴歸(Logistic Regression),簡稱LR。它的特點是能夠是我們的特徵輸入集合轉化為0和1這兩類的概率。一般來說,迴歸不用在分類問題上,因為迴歸是連續型模型,而且受噪聲影響比較大。如果非要應用進入,可以使用邏輯迴歸。瞭解過線性迴歸之後再來看邏輯迴歸可以更好的理解。

優點:計算代價不高,易於理解和實現

缺點:容易欠擬合,分類精度不高

適用資料:數值型和標稱型

邏輯迴歸

對於迴歸問題後面會介紹,Logistic迴歸本質上是線性迴歸,只是在特徵到結果的對映中加入了一層函式對映,即先把特徵線性求和,然後使用函式g(z)將最為假設函式來預測。g(z)可以將連續值對映到0和1上。Logistic迴歸用來分類0/1問題,也就是預測結果屬於0或者1的二值分類問題

對映函式為:

$$g\left({z}\right){=}\frac{1}{1+e^-z}$$

其中$$z{=}\theta{0}+\theta{1}{x{1}}+\theta{2}{x_{2}}{+...}$$

映射出來的效果如下如:

sklearn.linear_model.LogisticRegression

邏輯迴歸類

class sklearn.linear_model.LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='liblinear', max_iter=100, multi_class='ovr', verbose=0, warm_start=False, n_jobs=1)
  """
  :param C: float,預設值:1.0

  :param penalty: 特徵選擇的方式

  :param tol: 公差停止標準
  """
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_digits
from sklearn.linear_model import LogisticRegression
LR = LogisticRegression(C=1.0, penalty='l1', tol=0.01)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
LR.fit(X_train,y_train)
LR.predict(X_test)
LR.score(X_test,y_test)
0.96464646464646464
# c=100.0 0.96801346801346799

屬性

coef_

決策功能的特徵係數

Cs_

陣列C,即用於交叉驗證的正則化引數值的倒數

特點分析

線性分類器可以說是最為基本和常用的機器學習模型。儘管其受限於資料特徵與分類目標之間的線性假設,我們仍然可以在科學研究與工程實踐中把線性分類器的表現效能作為基準。

邏輯迴歸演算法案例分析

良/惡性乳腺癌腫瘤預測

資料預處理

import pandas as pd
import numpy as np

# 根據官方資料構建類別
column_names = ['Sample code number','Clump Thickness','Uniformity of Cell Size','Uniformity of Cell Shape','Marginal Adhesion','Single Epithelial Cell Size','Bare Nuclei','Bland Chromatin','Normal Nucleoli','Mitoses','Class'],

data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/',names = column_names)

# 將?替換成標準缺失值表示
data = data.replace(to_replace='?',value = np.nan)

# 丟棄帶有缺失值的資料(只要一個維度有缺失)
data = data.dropna(how='any')

data.shape

處理的缺失值後的樣本共有683條,特徵包括細胞厚度、細胞大小、形狀等九個維度

準備訓練測試資料

from sklearn.cross_validation import train_test_split

X_train,X_test,y_train,y_test = train_test_split(data[column_names[1:10]],data[column_names[10]],test_size=0.25,random_state=42)

# 檢視訓練和測試樣本的數量和類別分佈
y_train.value_counts()

y_test.value_counts()

使用邏輯迴歸進行良/惡性腫瘤預測任務

from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression


# 標準化資料,保證每個維度的特徵資料方差為1,均值為0。使得預測結果不會被某些維度過大的特徵值而主導
ss = StandardScaler()

X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_test)

# 初始化 LogisticRegression

lr = LogisticRegression(C=1.0, penalty='l1', tol=0.01)

# 跳用LogisticRegression中的fit函式/模組來訓練模型引數
lr.fit(X_train,y_train)

lr_y_predict = lr.predict(X_test)

效能分析

from sklearn.metrics import classification_report

# 利用邏輯斯蒂迴歸自帶的評分函式score獲得模型在測試集上的準確定結果
print '精確率為:',lr.score(X_test,y_test)

print classification_report(y_test,lr_y_predict,target_names = ['Benign','Maligant'])