最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2024年04月30日 10:05:16   作者:Want595  
這篇文章主要介紹了Python?Logistic邏輯回歸算法使用的方法和原理,Logistic雖然不是十大經(jīng)典算法之一,但卻是數(shù)據(jù)挖掘中常用的有力算法,所以這里也專(zhuān)門(mén)進(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):容易欠擬合,分類(lèi)精度可能不高

適用數(shù)據(jù)類(lèi)型:數(shù)值型和標(biāo)稱(chēng)型數(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ù)樣本的類(lèi)別。

dataArr, labelMat = loadDataSet()

weights = gradAscent(dataArr, labelMat)

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

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ī)梯度上升算法。邏輯回歸是一種二分類(lèi)的機(jī)器學(xué)習(xí)算法,用于預(yù)測(cè)二分類(lèi)問(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è)樣本的分類(lèi)標(biāo)簽。

算法的輸出是更新后的權(quán)重(weights),這些權(quán)重用于預(yù)測(cè)新樣本的分類(lèi)結(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)重,因此被稱(chēng)為隨機(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)文章

  • 釘釘群自定義機(jī)器人消息Python封裝的實(shí)例

    釘釘群自定義機(jī)器人消息Python封裝的實(shí)例

    今天小編就為大家分享一篇釘釘群自定義機(jī)器人消息Python封裝的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • python time.strptime格式化實(shí)例詳解

    python time.strptime格式化實(shí)例詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于python time.strptime格式化實(shí)例詳解內(nèi)容,對(duì)此有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-02-02
  • Python入門(mén)教程(十四)Python的集合

    Python入門(mén)教程(十四)Python的集合

    這篇文章主要介紹了Python入門(mén)教程(十四)Python的集合,Python是一門(mén)非常強(qiáng)大好用的語(yǔ)言,也有著易上手的特性,本文為入門(mén)教程,需要的朋友可以參考下
    2023-04-04
  • Pytorch實(shí)現(xiàn)LSTM案例總結(jié)學(xué)習(xí)

    Pytorch實(shí)現(xiàn)LSTM案例總結(jié)學(xué)習(xí)

    這篇文章主要介紹了Pytorch實(shí)現(xiàn)LSTM案例總結(jié)學(xué)習(xí),文章通過(guò)構(gòu)建網(wǎng)絡(luò)層、前向傳播forward()展開(kāi)主題介紹,需要的小伙吧可以參考一下
    2022-07-07
  • Django MEDIA的配置及用法詳解

    Django MEDIA的配置及用法詳解

    這篇文章主要介紹了Django MEDIA的配置及用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python編程快速上手——強(qiáng)口令檢測(cè)算法案例分析

    Python編程快速上手——強(qiáng)口令檢測(cè)算法案例分析

    這篇文章主要介紹了Python強(qiáng)口令檢測(cè)算法,結(jié)合實(shí)例形式分析了Python針對(duì)密碼口令強(qiáng)度檢測(cè)的相關(guān)算法實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2020-02-02
  • 探討python??pandas.DataFrame.to_json?函數(shù)

    探討python??pandas.DataFrame.to_json?函數(shù)

    這篇文章主要介紹了python??pandas.DataFrame.to_json?函數(shù)示例詳解,to_json?函數(shù)提供了靈活的參數(shù)設(shè)置,使得?pandas?數(shù)據(jù)框能夠以多種格式導(dǎo)出為?JSON?文件,需要的朋友可以參考下
    2024-07-07
  • Python使用openpyxl模塊處理Excel文件

    Python使用openpyxl模塊處理Excel文件

    這篇文章介紹了Python使用openpyxl模塊處理Excel文件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Python利用lxml模塊爬取豆瓣讀書(shū)排行榜的方法與分析

    Python利用lxml模塊爬取豆瓣讀書(shū)排行榜的方法與分析

    這篇文章主要給大家介紹了關(guān)于Python爬蟲(chóng)利用lxml模塊爬取豆瓣讀書(shū)排行榜的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Python中格式化字符串的四種實(shí)現(xiàn)

    Python中格式化字符串的四種實(shí)現(xiàn)

    這篇文章主要介紹了Python中格式化字符串的四種實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評(píng)論

开阳县| 贺兰县| 五莲县| 碌曲县| 阳信县| 环江| 松江区| 新闻| 望奎县| 临汾市| 手机| 石泉县| 基隆市| 太谷县| 宝清县| 道真| 剑川县| 缙云县| 新乡市| 阜阳市| 民和| 北宁市| 江门市| 象州县| 布尔津县| 孟村| 香港 | 台东县| 温泉县| 南昌市| 福鼎市| 元氏县| 乐亭县| 扶绥县| 莱阳市| 宣武区| 内黄县| 山东省| 崇礼县| 闻喜县| 秭归县|