機器學習 logistic回歸

2021-08-03 15:54:37 字數 4220 閱讀 9939

統計機器學習有兩種常見的機器學習演算法:logistic回歸和svm,這兩種演算法都涉及到優化問題,是非常重要的兩種機器學習演算法,尤其是logistic回歸可能是工程上用的最廣泛的機器學習演算法了。在logistic回歸中訓練分類器就是尋找最佳擬合引數,使用的是最簡單常見優化演算法 - 梯度下降法。

logistic回歸的核心是給每個特徵xi訓練出乙個最佳回歸係數wi,得到w'x,帶入到sigmoid函式,然後sigmoid函式輸出的值與0.5作比較,進行分類,而最佳回歸係數的確定就是兩部分:極大似然估計,梯度下降

此處僅僅寫了大概過程,詳細的推導過程,見本人總結的文件:

1. 極大似然估計

極大似然估計是一種引數估計方法,在logistic回歸中被用來估計模型的引數w。簡單的講就是每個樣本的概率密度連乘積最大。

2. 梯度下降

梯度下降用來優化引數,使模型最優。

3. 向量化

將梯度下降的過程向量化,就很容易實現logistic演算法。

4. 梯度下降的優化 - sgd

在梯度下降中,哪怕更新乙個回歸係數,所有的樣本也得參與運算, 因此我們每次迭代只選擇乙個樣本或者乙個*****(當然label與之保持一致)來參與運算。收斂速度會大大提公升。

5. logistic回歸的優缺點

優點:1)本質上是線性模型,計算簡單,訓練速度快。

2)引入了sigmoid函式來進行分類,因此能夠近似的把輸出結果看做乙個概率(當然絕對不是概率),因此其輸出結果比較直觀。

缺點:1)線性,分類精度簡單,容易欠擬合。

6. 實現logistic回歸

# -*- coding: utf-8 -*-

import numpy as np

import matplotlib.pyplot as plt

import time

import random

random.seed

def timing(f):

""" 裝飾器計時, 梯度下降和隨機梯度下降的時間 """

def fun(*args, **kwargs):

begin = time.clock()

returnval = f(*args, **kwargs)

print("執行時間為: ".format(f.__name__, time.clock() - begin))

return returnval

return fun

def load_data():

""" 1. 匯入testset.txt的資料 """

train_data =

with open("testset.txt", "r") as f:

for line in f.readlines():

train_data = np.array(train_data, np.float)

train_x = np.concatenate((np.ones((len(train_data),1)), train_data[:, 0:2]), axis=1)

train_y = train_data[:, 2].astype(int)

return train_x, train_y

def sigmoid(x):

""" 計算sigmoid(x)的值, numpy的exp能夠直接操作矩陣 """

return 1 / (1 + np.exp(-x))

@timing

def gradientascent(train_x, train_y, max_iter, step = 0.001):

""" 2. 梯度下降進行訓練 """

train_x = np.mat(train_x)

train_y = np.mat(train_y).t

rows, cols = train_x.shape

weights = np.ones((cols,1))

for i in range(max_iter):

# 內部每個樣本都參與了計算

value = sigmoid(train_x * weights)

error = train_y - value

weights = weights + step * train_x.t * error

return weights

@timing

def randomgradientascent(train_x, train_y, max_iter, initstep = 0.001, batchsize = 10):

""" 3. 隨機梯度下降訓練 """

rows, cols = train_x.shape

weights = np.ones((cols, ))

length = len(train_x)

for i in range(max_iter):

# 選取乙個batch進行迭代

sampleindex = random.sample(range(length), batchsize)

step = initstep + 2 / (i + 1)

value = sigmoid(np.dot(train_x[sampleindex], weights))

error = train_y[sampleindex] - value

weights = weights + step * np.dot(train_x[sampleindex].t, error)

return weights

def drawresult(train_x, train_y, weigths, title):

""" 4. 繪製分類結果 """

7. 注意

1)logistic回歸使用之前要對特徵進行歸一化,最好使其滿足0均值,單位方差。處理方式是對每一維特徵減去均值除以方差。

2)可以將標準線性回歸改為ridge,lasso形式,再應用到sigmoid函式。

參考書籍:《機器學習實戰》,《統計學習方法》

機器學習之logistic回歸

機器學習 回歸 在 機器學習之線性回歸模型 一章中,我們學習了如何使用線性模型進行回歸學習。如果要將線性模型用來分類,就要用到該章結尾介紹的廣義線性模型了。logistic回歸模型採用logistic函式來將線性回歸產生的 值z wtx b 轉化為乙個接近0或1的 y 值 y 11 e z 1 由此...

機器學習實戰 Logistic回歸

11 e z 1 1 e zz w 0x0 w1x1 w2x 2 wn xxz w 0x0 w1x1 w2x 2 wn xx z wt x z w tx 在每個特徵上都乘以乙個回歸係數,然後把所有結果值相加,將這個總和代入sigmoid函式中,進而得到乙個範圍在0 1直接的數值。1類 大於0.5 0...

機器學習logistic回歸學習總結

在說logistic回歸演算法的開始我們先來介紹一下二分分類,所謂的二分分類就是在影象識別中,輸入一張,比如做貓的識別,要麼這張輸入圖是貓,輸出y 1,要麼輸入的不輸入貓則輸出的y 0,這就表示乙個二分分類 我們在做的識別或者二分分類的時候 需要將輸入的進行轉換,轉換成乙個特徵向量,作為輸入x,我們...