精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

機器學習實戰(zhàn)之logistic回歸

454398 ? 來源:itpub技術棧 ? 作者:itpub技術棧 ? 2020-09-29 15:17 ? 次閱讀

logistic回歸是一種廣義的線性回歸,通過構造回歸函數(shù),利用機器學習來實現(xiàn)分類或者預測。

原理

上一文簡單介紹了線性回歸,與邏輯回歸的原理是類似的。

預測函數(shù)(h)。該函數(shù)就是分類函數(shù),用來預測輸入數(shù)據的判斷結果。過程非常關鍵,需要預測函數(shù)的“大概形式”, 比如是線性還是非線性的。 本文參考機器學習實戰(zhàn)的相應部分,看一下數(shù)據集。

// 兩個特征

-0.017612 14.053064 0

-1.395634 4.662541 1

-0.752157 6.538620 0

-1.322371 7.152853 0

0.423363 11.054677 0

0.406704 7.067335 1

如上圖,紅綠代表兩種不同的分類。可以預測分類函數(shù)大概是一條直線。Cost函數(shù)(損失函數(shù)):該函數(shù)預測的輸出h和訓練數(shù)據類別y之間的偏差,(h-y)或者其他形式。綜合考慮所有訓練數(shù)據的cost, 將其求和或者求平均,極為J函數(shù), 表示所有訓練數(shù)據預測值和實際值的偏差。

顯然,J函數(shù)的值越小,表示預測的函數(shù)越準確(即h函數(shù)越準確),因此需要找到J函數(shù)的最小值。有時需要用到梯度下降。

具體過程

構造預測函數(shù)

邏輯回歸名為回歸,實際為分類,用于兩分類問題。 這里直接給出sigmoid函數(shù)。

接下來確定分類的邊界,上面有提到,該數(shù)據集需要一個線性的邊界。 不同數(shù)據需要不同的邊界。

確定了分類函數(shù),將其輸入記做z ,那么

向量x是特征變量, 是輸入數(shù)據。此數(shù)據有兩個特征,可以表示為z = w0x0 + w1x1 + w2x2。w0是常數(shù)項,需要構造x0等于1(見后面代碼)。 向量W是回歸系數(shù)特征,T表示為列向量。 之后就是確定最佳回歸系數(shù)w(w0, w1, w2)。cost函數(shù)

綜合以上,預測函數(shù)為:

這里不做推導,可以參考文章 Logistic回歸總結

有了上述的cost函數(shù),可以使用梯度上升法求函數(shù)J的最小值。推導見上述鏈接。

綜上:梯度更新公式如下:

接下來是python代碼實現(xiàn):

# sigmoid函數(shù)和初始化數(shù)據

def sigmoid(z):

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

def init_data():

data = np.loadtxt(‘data.csv’)

dataMatIn = data[:, 0:-1]

classLabels = data[:, -1]

dataMatIn = np.insert(dataMatIn, 0, 1, axis=1) #特征數(shù)據集,添加1是構造常數(shù)項x0

return dataMatIn, classLabels

復制代碼

// 梯度上升

def grad_descent(dataMatIn, classLabels):

dataMatrix = np.mat(dataMatIn) #(m,n)

labelMat = np.mat(classLabels).transpose()

m, n = np.shape(dataMatrix)

weights = np.ones((n, 1)) #初始化回歸系數(shù)(n, 1)

alpha = 0.001 #步長

maxCycle = 500 #最大循環(huán)次數(shù)

for i in range(maxCycle):

h = sigmoid(dataMatrix * weights) #sigmoid 函數(shù)

weights = weights + alpha * dataMatrix.transpose() * (labelMat - h) #梯度

return weights

// 計算結果

if __name__ == ‘__main__’:

dataMatIn, classLabels = init_data()

r = grad_descent(dataMatIn, classLabels)

print(r)

輸入如下:

[[ 4.12414349]

[ 0.48007329]

[-0.6168482 ]]

上述w就是所求的回歸系數(shù)。w0 = 4.12414349, w1 = 0.4800, w2=-0.6168 之前預測的直線方程0 = w0x0 + w1x1 + w2x2, 帶入回歸系數(shù),可以確定邊界。 x2 = (-w0 - w1*x1) / w2

畫出函數(shù)圖像:

def plotBestFIt(weights):

dataMatIn, classLabels = init_data()

n = np.shape(dataMatIn)[0]

xcord1 = []

ycord1 = []

xcord2 = []

ycord2 = []

for i in range(n):

if classLabels[i] == 1:

xcord1.append(dataMatIn[i][1])

ycord1.append(dataMatIn[i][2])

else:

xcord2.append(dataMatIn[i][1])

ycord2.append(dataMatIn[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 = np.arange(-3, 3, 0.1)

y = (-weights[0, 0] - weights[1, 0] * x) / weights[2, 0] #matix

ax.plot(x, y)

plt.xlabel(‘X1’)

plt.ylabel(‘X2’)

plt.show()

如下:

算法改進

隨機梯度上升

上述算法中,每次循環(huán)矩陣都會進行m * n次乘法計算,時間復雜度是maxCycles* m * n。當數(shù)據量很大時, 時間復雜度是很大。 這里嘗試使用隨機梯度上升法來進行改進。 隨機梯度上升法的思想是,每次只使用一個數(shù)據樣本點來更新回歸系數(shù)。這樣就大大減小計算開銷。 算法如下:

def stoc_grad_ascent(dataMatIn, classLabels):

m, n = np.shape(dataMatIn)

alpha = 0.01

weights = np.ones(n)

for i in range(m):

h = sigmoid(sum(dataMatIn[i] * weights)) #數(shù)值計算

error = classLabels[i] - h

weights = weights + alpha * error * dataMatIn[i]

return weights

進行測試:

隨機梯度上升的改進

def stoc_grad_ascent_one(dataMatIn, classLabels, numIter=150):

m, n = np.shape(dataMatIn)

weights = np.ones(n)

for j in range(numIter):

dataIndex = list(range(m))

for i in range(m):

alpha = 4 / (1 + i + j) + 0.01 #保證多次迭代后新數(shù)據仍然有影響力

randIndex = int(np.random.uniform(0, len(dataIndex)))

h = sigmoid(sum(dataMatIn[i] * weights)) # 數(shù)值計算

error = classLabels[i] - h

weights = weights + alpha * error * dataMatIn[i]

del(dataIndex[randIndex])

return weights

可以對上述三種情況的回歸系數(shù)做個波動圖。 可以發(fā)現(xiàn)第三種方法收斂更快。 評價算法優(yōu)劣勢看它是或否收斂,是否達到穩(wěn)定值,收斂越快,算法越優(yōu)。

總結

這里用到的梯度上升和梯度下降是一樣的,都是求函數(shù)的最值, 符號需要變一下。 梯度意味著分別沿著x, y的方向移動一段距離。(cost分別對x, y)的導數(shù)。

完整代碼請查看: github: logistic regression

參考文章: 機器學習之Logistic回歸與Python實現(xiàn)

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機器學習
    +關注

    關注

    66

    文章

    8377

    瀏覽量

    132409
  • Logistic
    +關注

    關注

    0

    文章

    11

    瀏覽量

    8847
  • 線性回歸
    +關注

    關注

    0

    文章

    41

    瀏覽量

    4300
收藏 人收藏

    評論

    相關推薦

    什么是機器學習?通過機器學習方法能解決哪些問題?

    來源:Master編程樹“機器學習”最初的研究動機是讓計算機系統(tǒng)具有人的學習能力以便實現(xiàn)人工智能。因為沒有學習能力的系統(tǒng)很難被認為是具有智能的。目前被廣泛采用的
    的頭像 發(fā)表于 11-16 01:07 ?230次閱讀
    什么是<b class='flag-5'>機器</b><b class='flag-5'>學習</b>?通過<b class='flag-5'>機器</b><b class='flag-5'>學習</b>方法能解決哪些問題?

    NPU與機器學習算法的關系

    在人工智能領域,機器學習算法是實現(xiàn)智能系統(tǒng)的核心。隨著數(shù)據量的激增和算法復雜度的提升,對計算資源的需求也在不斷增長。NPU作為一種專門為深度學習機器
    的頭像 發(fā)表于 11-15 09:19 ?307次閱讀

    什么是回歸測試_回歸測試的測試策略

    ? 1、什么是回歸測試 回歸測試(Regression testing) 指在發(fā)生修改之后重新測試先前的測試以保證修改的正確性。理論上,軟件產生新版本,都需要進行回歸測試,驗證以前發(fā)現(xiàn)和修復的錯誤
    的頭像 發(fā)表于 11-14 16:44 ?126次閱讀

    人工智能、機器學習和深度學習存在什么區(qū)別

    人工智能指的是在某種程度上顯示出類似人類智能的設備。AI有很多技術,但其中一個很大的子集是機器學習——讓算法從數(shù)據中學習
    發(fā)表于 10-24 17:22 ?2445次閱讀
    人工智能、<b class='flag-5'>機器</b><b class='flag-5'>學習</b>和深度<b class='flag-5'>學習</b>存在什么區(qū)別

    【「時間序列與機器學習」閱讀體驗】時間序列的信息提取

    個重要環(huán)節(jié),目標是從給定的時間序列數(shù)據中提取出有用的信息和特征,以支持后續(xù)的分析和預測任務。 特征工程(Feature Engineering)是將數(shù)據轉換為更好地表示潛在問題的特征,從而提高機器學習
    發(fā)表于 08-17 21:12

    【「時間序列與機器學習」閱讀體驗】+ 鳥瞰這本書

    的交織中不斷成長。 讀者對這本書的評價普遍很高。他們稱贊作者用通俗易懂的語言將復雜的概念解釋得透徹清晰,即使是初學者也能輕松入門。同時,書中豐富的案例和詳細的步驟指導也讓讀者快速積累經驗,提高實戰(zhàn)技能。甚至有讀者表示,這本書已經成為時間序列分析、機器
    發(fā)表于 08-12 11:28

    【「時間序列與機器學習」閱讀體驗】+ 簡單建議

    這本書以其系統(tǒng)性的框架和深入淺出的講解,為讀者繪制了一幅時間序列分析與機器學習融合應用的宏偉藍圖。作者不僅扎實地構建了時間序列分析的基礎知識,更巧妙地展示了機器學習如何在這一領域發(fā)揮巨
    發(fā)表于 08-12 11:21

    不同類型神經網絡在回歸任務中的應用

    神經網絡是一種強大的機器學習模型,可以用于各種任務,包括回歸。在本文中,我們將討論不同類型的神經網絡,以及它們在回歸任務中的應用。 基本的神經網絡 基本的神經網絡,也稱為多層感知器(M
    的頭像 發(fā)表于 07-11 10:27 ?1063次閱讀

    機器學習算法原理詳解

    機器學習作為人工智能的一個重要分支,其目標是通過讓計算機自動從數(shù)據中學習并改進其性能,而無需進行明確的編程。本文將深入解讀幾種常見的機器學習
    的頭像 發(fā)表于 07-02 11:25 ?774次閱讀

    深度學習與傳統(tǒng)機器學習的對比

    在人工智能的浪潮中,機器學習和深度學習無疑是兩大核心驅動力。它們各自以其獨特的方式推動著技術的進步,為眾多領域帶來了革命性的變化。然而,盡管它們都屬于機器
    的頭像 發(fā)表于 07-01 11:40 ?1192次閱讀

    機器學習的經典算法與應用

    關于數(shù)據機器學習就是喂入算法和數(shù)據,讓算法從數(shù)據中尋找一種相應的關系。Iris鳶尾花數(shù)據集是一個經典數(shù)據集,在統(tǒng)計學習機器學習領域都經常被
    的頭像 發(fā)表于 06-27 08:27 ?1576次閱讀
    <b class='flag-5'>機器</b><b class='flag-5'>學習</b>的經典算法與應用

    機器學習8大調參技巧

    今天給大家一篇關于機器學習調參技巧的文章。超參數(shù)調優(yōu)是機器學習例程中的基本步驟之一。該方法也稱為超參數(shù)優(yōu)化,需要搜索超參數(shù)的最佳配置以實現(xiàn)最佳性能。
    的頭像 發(fā)表于 03-23 08:26 ?565次閱讀
    <b class='flag-5'>機器</b><b class='flag-5'>學習</b>8大調參技巧

    深入探討線性回歸與柏松回歸

    或許我們所有人都會學習的第一個機器學習算法就是線性回歸算法,它無疑是最基本且被廣泛使用的技術之一——尤其是在預測分析方面。
    的頭像 發(fā)表于 03-18 14:06 ?587次閱讀
    深入探討線性<b class='flag-5'>回歸</b>與柏松<b class='flag-5'>回歸</b>

    如何使用TensorFlow構建機器學習模型

    在這篇文章中,我將逐步講解如何使用 TensorFlow 創(chuàng)建一個簡單的機器學習模型。
    的頭像 發(fā)表于 01-08 09:25 ?914次閱讀
    如何使用TensorFlow構建<b class='flag-5'>機器</b><b class='flag-5'>學習</b>模型

    javaweb從入門到實戰(zhàn)

    JavaWeb是一門使用Java語言開發(fā)Web應用程序的技術,它廣泛應用于各種網站和在線應用程序的開發(fā)。對于想要學習和使用JavaWeb技術的開發(fā)者來說,從入門到實戰(zhàn)這條路并不是很容易,需要有系統(tǒng)性
    的頭像 發(fā)表于 12-03 11:44 ?1479次閱讀