欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python?Logistic邏輯回歸算法使用詳解

 更新時(shí)間:2024年04月30日 10:05:16   作者:Want595  
這篇文章主要介紹了Python?Logistic邏輯回歸算法使用的方法和原理,Logistic雖然不是十大經(jīng)典算法之一,但卻是數(shù)據(jù)挖掘中常用的有力算法,所以這里也專門進(jìn)行了學(xué)習(xí),需要的朋友可以參考下

相關(guān)導(dǎo)入

from google.colab import drive
drive.mount("/content/drive")

Mounted at /content/drive

Logistic回歸

優(yōu)點(diǎn):計(jì)算代價(jià)不高,易于理解和實(shí)現(xiàn)

缺點(diǎn):容易欠擬合,分類精度可能不高

適用數(shù)據(jù)類型:數(shù)值型和標(biāo)稱型數(shù)據(jù)

Sigmoid函數(shù)

訓(xùn)練算法-使用梯度上升找到最佳參數(shù)

def loadDataSet():
  dataMat = []
  labelMat = []
  fr = open('/content/drive/MyDrive/Colab Notebooks/MachineLearning/《機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》/Logistic回歸/Logistic回歸/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
from math import *
def sigmoid(inX):
  return 1.0/(1+exp(-inX))
from numpy import *
def gradAscent(dataMatIn, classLabels):
  dataMatrix = mat(dataMatIn)
  labelMat = mat(classLabels).transpose()
  m, n = shape(dataMatrix)
  alpha = 0.001
  maxCycles = 500
  weights = ones((n, 1))
  for k in range(maxCycles):
    h = sigmoid(dataMatrix * weights)
    error = (labelMat - h)
    weights = weights + alpha * dataMatrix.transpose() * error
  return weights

這是一個(gè)使用梯度上升算法進(jìn)行邏輯回歸的函數(shù)。主要步驟如下:

  • 導(dǎo)入numpy庫(kù),用于矩陣運(yùn)算。
  • 定義函數(shù)gradAscent,接受輸入?yún)?shù)dataMatIn和classLabels。
  • 將dataMatIn和classLabels轉(zhuǎn)化為矩陣,并進(jìn)行轉(zhuǎn)置,得到dataMatrix和labelMat。
  • 獲取dataMatrix的行數(shù)m和列數(shù)n。
  • 設(shè)置學(xué)習(xí)率alpha為0.001,并設(shè)定最大迭代次數(shù)maxCycles為500。
  • 初始化權(quán)重weights為全1的n行1列矩陣。
  • 進(jìn)行maxCycles次迭代:

a. 計(jì)算當(dāng)前權(quán)重對(duì)應(yīng)的預(yù)測(cè)結(jié)果h,通過(guò)sigmoid函數(shù)將dataMatrix與weights相乘得到。

b. 計(jì)算誤差error,即真實(shí)標(biāo)簽labelMat與預(yù)測(cè)結(jié)果h的差。

c. 更新權(quán)重weights,通過(guò)乘以學(xué)習(xí)率alpha,再乘以dataMatrix的轉(zhuǎn)置,再乘以誤差error。

  • 返回最終的權(quán)重weights。

總結(jié):該函數(shù)通過(guò)梯度上升算法求解邏輯回歸模型的權(quán)重參數(shù),其中使用了sigmoid函數(shù)作為激活函數(shù),并通過(guò)迭代優(yōu)化權(quán)重參數(shù),使得模型的預(yù)測(cè)結(jié)果與真實(shí)標(biāo)簽盡可能接近。最終返回的權(quán)重參數(shù)可以用于預(yù)測(cè)新的數(shù)據(jù)樣本的類別。

dataArr, labelMat = loadDataSet()

weights = gradAscent(dataArr, labelMat)

分析數(shù)據(jù)-畫出決策邊界

import matplotlib.pyplot as plt
def plotBestFit(weights):
  dataMat, labelMat = loadDataSet()
  dataArr = array(dataMat)
  n = shape(dataArr)[0]
  xcord1 = []
  ycord1 = []
  xcord2 = []
  ycord2 = []
  for i in range(n):
    if int(labelMat[i]) == 1:
      xcord1.append(dataArr[i,1])
      ycord1.append(dataArr[i,2])
    else:
      xcord2.append(dataArr[i,1])
      ycord2.append(dataArr[i,2])
  fig = plt.figure()
  ax = fig.add_subplot(111)
  ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')
  ax.scatter(xcord2, ycord2, s=30, c='green')
  x = arange(-3, 3, 0.1)
  y = (-weights[0]-weights[1]*x) / weights[2]
  ax.plot(x, y)
  plt.xlabel('X1')
  plt.ylabel('X2')
  plt.show()

plotBestFit(weights.getA()) 

訓(xùn)練算法-隨機(jī)梯度上升

def stocGradAscent0(dataMatrix, classLabels):
  m, n = shape(dataMatrix)
  alpha = 0.01
  weights = ones(n)
  for i in range(m):
    h = sigmoid(sum(dataMatrix[i] * weights))
    error = classLabels[i] - h
    weights = weights + alpha * error * dataMatrix[i]
  return weights
dataArr, labelMat = loadDataSet()
weights = stocGradAscent0(array(dataArr), labelMat)

改進(jìn)算法-優(yōu)化梯度算法

def stocGradAscent1(dataMatrix, classLabels, numIter=150):
  m, n = shape(dataMatrix)
  weights = ones(n)
  for j in range(numIter):
    dataIndex = list(range(m))
    for i in range(m):
      alpha = 4/(1+j+i)+0.01
      randIndex = int(random.uniform(0, len(dataIndex)))
      h = sigmoid(sum(dataMatrix[randIndex] * weights))
      error = classLabels[randIndex] - h
      weights = weights + alpha * error * dataMatrix[randIndex]
      del(dataIndex[randIndex])
  return weights

這段代碼實(shí)現(xiàn)了邏輯回歸的隨機(jī)梯度上升算法。邏輯回歸是一種二分類的機(jī)器學(xué)習(xí)算法,用于預(yù)測(cè)二分類問(wèn)題的結(jié)果。該算法通過(guò)最大化似然函數(shù)來(lái)更新權(quán)重,從而使得模型的預(yù)測(cè)結(jié)果與實(shí)際結(jié)果最接近。

算法的輸入包括數(shù)據(jù)集的特征矩陣(dataMatrix)、數(shù)據(jù)集的標(biāo)簽(classLabels)和迭代次數(shù)(numIter),默認(rèn)為150次。其中,特征矩陣是一個(gè)m行n列的矩陣,m表示樣本的數(shù)量,n表示特征的數(shù)量;標(biāo)簽是一個(gè)長(zhǎng)度為m的向量,表示每個(gè)樣本的分類標(biāo)簽。

算法的輸出是更新后的權(quán)重(weights),這些權(quán)重用于預(yù)測(cè)新樣本的分類結(jié)果。

算法的主要步驟如下:

  • 初始化權(quán)重為一個(gè)長(zhǎng)度為n的向量,每個(gè)元素的初始值為1。
  • 對(duì)于給定的迭代次數(shù),重復(fù)以下步驟:

a. 初始化一個(gè)包含樣本索引的列表(dataIndex)。

b. 對(duì)于每個(gè)樣本,重復(fù)以下步驟:

i. 計(jì)算學(xué)習(xí)率(alpha),其中alpha的值隨著迭代次數(shù)和樣本的索引i和j的變化而變化。這里使用的是固定的學(xué)習(xí)率,并加上一個(gè)小的常數(shù)以避免除零錯(cuò)誤。

ii. 從dataIndex中隨機(jī)選擇一個(gè)樣本的索引(randIndex)。

iii. 計(jì)算樣本的預(yù)測(cè)概率(h)。這里使用的是sigmoid函數(shù)將線性組合轉(zhuǎn)換為[0, 1]之間的概率值。

iv. 計(jì)算誤差(error),即實(shí)際標(biāo)簽(classLabels)與預(yù)測(cè)概率(h)之間的差值。

v. 更新權(quán)重(weights)。根據(jù)梯度上升算法,使用學(xué)習(xí)率(alpha)乘以誤差(error)乘以樣本的特征值(dataMatrix[randIndex]),然后將得到的結(jié)果加到權(quán)重(weights)上。

vi. 從dataIndex中刪除已經(jīng)使用過(guò)的樣本索引(randIndex)。

  • 返回更新后的權(quán)重。

該算法每次迭代都使用一個(gè)隨機(jī)的樣本來(lái)更新權(quán)重,因此被稱為隨機(jī)梯度上升算法。相比于批量梯度上升算法,隨機(jī)梯度上升算法的計(jì)算效率更高,但收斂速度較慢,并且對(duì)于噪聲數(shù)據(jù)更敏感。

dataArr, labelMat = loadDataSet()
weights = stocGradAscent1(array(dataArr), labelMat, 500)
plotBestFit(weights)

到此這篇關(guān)于Python Logistic算法使用詳解的文章就介紹到這了,更多相關(guān)Python Logistic算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python遠(yuǎn)程登錄代碼

    python遠(yuǎn)程登錄代碼

    因?yàn)?python 已內(nèi)建了一個(gè) pop3 的函式庫(kù),所以我們直接用它來(lái)完成郵件的下載和處理。事實(shí)上, 如果我們不用 poplib 的話,我們還是可以完成那個(gè)例子中的所有作業(yè):就是通過(guò)模擬 telnet的協(xié)定。
    2008-04-04
  • 詳解Python中的數(shù)據(jù)精度問(wèn)題

    詳解Python中的數(shù)據(jù)精度問(wèn)題

    這篇文章主要為大家詳細(xì)介紹了Python中常常遇到的一些數(shù)據(jù)精度問(wèn)題以及它們的解決方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-10-10
  • 對(duì)pytorch中不定長(zhǎng)序列補(bǔ)齊的操作

    對(duì)pytorch中不定長(zhǎng)序列補(bǔ)齊的操作

    這篇文章主要介紹了對(duì)pytorch中不定長(zhǎng)序列補(bǔ)齊的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python列表切片操作實(shí)例總結(jié)

    Python列表切片操作實(shí)例總結(jié)

    這篇文章主要介紹了Python列表切片操作,結(jié)合實(shí)例形式總結(jié)分析了Python列表切片常見操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-02-02
  • Python3之外部文件調(diào)用Django程序操作model等文件實(shí)現(xiàn)方式

    Python3之外部文件調(diào)用Django程序操作model等文件實(shí)現(xiàn)方式

    這篇文章主要介紹了Python3之外部文件調(diào)用Django程序操作model等文件實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Python實(shí)現(xiàn)從Markdown到PDF的轉(zhuǎn)換的方法

    Python實(shí)現(xiàn)從Markdown到PDF的轉(zhuǎn)換的方法

    Markdown,以其簡(jiǎn)潔的語(yǔ)法和易于閱讀的特性,成為了許多作家、開發(fā)者和學(xué)生記錄思想、編寫教程或撰寫報(bào)告的首選格式,然而,在分享或打印這些文檔時(shí),Markdown的純文本形式可能無(wú)法滿足對(duì)版式和布局的專業(yè)需求,本文將介紹如何用Python代碼輕松實(shí)現(xiàn)從Markdown到PDF的轉(zhuǎn)換
    2024-07-07
  • python中圖片文件路徑格式如何使用

    python中圖片文件路徑格式如何使用

    這篇文章主要介紹了python中圖片文件路徑格式如何使用問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python-pip配置國(guó)內(nèi)鏡像源快速下載包的方法詳解

    Python-pip配置國(guó)內(nèi)鏡像源快速下載包的方法詳解

    pip如果不配置國(guó)內(nèi)鏡像源的話,下載包的速度非常慢,畢竟默認(rèn)的源在國(guó)外呢,這篇文章主要介紹了Python-pip配置國(guó)內(nèi)鏡像源快速下載包的方法詳解,需要的朋友可以參考下
    2024-01-01
  • Pytorch中的masked_fill基本知識(shí)操作

    Pytorch中的masked_fill基本知識(shí)操作

    本文主要介紹了PyTorch中的masked_fill函數(shù)的基本知識(shí)和使用方法,masked_fill函數(shù)接受一個(gè)輸入張量和一個(gè)布爾掩碼作為主要參數(shù),掩碼的形狀必須與輸入張量相同,掩碼操作根據(jù)掩碼中的布爾值在輸出張量中填充指定的值或保留輸入張量中的值
    2024-10-10
  • python全棧要學(xué)什么 python全棧學(xué)習(xí)路線

    python全棧要學(xué)什么 python全棧學(xué)習(xí)路線

    在本文中小編給大家整理了關(guān)于python全棧要學(xué)什么以及python全棧學(xué)習(xí)路線的知識(shí)點(diǎn)內(nèi)容,需要的朋友們參考下。
    2019-06-06

最新評(píng)論