短訊!機器學習--Logistic回歸分類算法及應用

2022-12-08 10:09:22 來源:51CTO博客

1. Lineage邏輯回歸分類算法


(相關資料圖)

1.1 概述

Lineage邏輯回歸是一種簡單而又效果不錯的分類算法

什么是回歸:比如說我們有兩類數據,各有50十個點組成,當我門把這些點畫出來,會有一條線區分這兩組數據,我們擬合出這個曲線(因為很有可能是非線性),就是回歸。我們通過大量的數據找出這條線,并擬合出這條線的表達式,再有新數據,我們就以這條線為區分來實現分類。

下圖是一個數據集的兩組數據,中間有一條區分兩組數據的線。

顯然,只有這種線性可分的數據分布才適合用線性邏輯回歸

1.2 算法思想

Lineage回歸分類算法就是將線性回歸應用在分類場景中

在該場景中,計算結果是要得到對樣本數據的分類標簽,而不是得到那條回歸直線

1.2.1 算法圖示

1)算法目標()?

大白話:計算各點的y值到擬合線的垂直距離,如果

距離>0, 分為類A

距離<0, 分為類B

2)如何得到擬合線呢?

大白話:只能先假設,因為線或面的函數都可以表達成

y(擬合)=w1*x1 + w2*x2 + w3*x3 + ...

其中的w是待定參數

而x是數據的各維度特征值

因而上述問題就變成了 樣本y(x) - y(擬合) >0 ? A : B

3)如何求解出一套最優的w參數呢?

基本思路:代入“先驗數據”來逆推求解

但針對不等式求解參數極其困難

通用的解決辦法,將對不等式的求解做一個轉換:

a.將“樣本y(x) - y(擬合) ”的差值壓縮到一個0~1的小區間,

b.然后代入大量的樣本特征值,從而得到一系列的輸出結果;

c.再將這些輸出結果跟樣本的先驗類別比較,并根據比較情況來調整擬合線的參數值,從而是擬合線的參數逼近最優

從而將問題轉化為逼近求解的典型數學問題

1.2.2 sigmoid函數

上述算法思路中,通常使用sigmoid函數作為轉換函數

l函數表達式:

注:此處的x是向量

l函數曲線:

之所以使用sigmoid函數,就是讓樣本點經過運算后得到的結果限制在0~1之間,壓縮數據的巨幅震蕩,從而方便得到樣本點的分類標簽(分類以sigmoid函數的計算結果是否大于0.5為依據)

1.3 算法實現分析

1.3.1 實現思路

算法思想的數學表述

把數據集的特征值設為x1,x2,x3......

求出它們的回歸系數wi

設z=w1*x1+w2*x2.....,然后將z值代入sigmoid函數并判斷結果,即可得到分類標簽

問題在于如何得到一組合適的參數wi?

通過解析的途徑很難求解,而通過迭代的方法可以比較便捷地找到最優解

簡單來說,就是不斷用樣本特征值代入算式,計算出結果后跟其實際標簽進行比較,根據差值來修正參數,然后再代入新的樣本值計算,循環往復,直到無需修正或已到達預設的迭代次數

注:此過程用梯度上升法來實現。

1.3.2梯度上升算法

梯度上升是指找到函數增長的方向。在具體實現的過程中,不停地迭代運算直到w的值幾乎不再變化為止。

如圖所示:

2. Lineage邏輯回歸分類Python實戰

2.1 需求

對給定的先驗數據集,使用logistic回歸算法對新數據分類

2.2 python實現

2.2.1定義sigmoid函數

?def loadDataSet():

dataMat = []; labelMat = []

fr = open("d:/testSet.txt")

for line in fr.readlines():

lineArr = line.strip().split()

dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])

labelMat.append(int(lineArr[2]))

return dataMat,labelMat

def sigmoid(inX):

return 1.0/(1+exp(-inX))?

2.2.2 返回回歸系數

對應于每個特征值,for循環實現了遞歸梯度上升算法。

?def gradAscent(dataMatIn, classLabels):

dataMatrix = mat(dataMatIn) #將先驗數據集轉換為NumPy 矩陣

labelMat = mat(classLabels).transpose() #將先驗數據的類標簽轉換為NumPy 矩陣

m,n = shape(dataMatrix)

alpha = 0.001#設置逼近步長調整系數

maxCycles = 500#設置最大迭代次數為500

weights = ones((n,1))#weights即為需要迭代求解的參數向量

for k in range(maxCycles): #heavy on matrix operations

h = sigmoid(dataMatrix*weights)#代入樣本向量求得“樣本y”sigmoid轉換值

error = (labelMat - h) #求差

weights = weights + alpha * dataMatrix.transpose()* error #根據差值調整參數向量

return weights?

我們的數據集有兩個特征值分別是x1,x2。在代碼中又增設了x0變量。

結果,返回了特征值的回歸系數:

[[ 4.12414349]

[ 0.48007329]

[-0.6168482 ]]

我們得出x1和x2的關系(設x0=1),0=4.12414349+0.48007329*x1-0.6168482*x2

2.2.3 線性擬合線

畫出x1與x2的關系圖——線性擬合線

標簽: 回歸系數 上升算法 機器學習

上一篇:全球微速訊:#yyds干貨盤點# LeetCode程序員面試金典:返回倒數第 k 個節點
下一篇:機器學習--決策樹分類算法及應用