機器學習---對數幾率回歸

1. 邏輯回歸

邏輯回歸(Logistic Regression)的模型是一個非線性模型,

sigmoid函數,又稱邏輯回歸函數。但是它本質上又是一個線性回歸模型,因為除去sigmoid映射函

數關系,其他的步驟,算法都是線性回歸的。

可以說,邏輯回歸,都是以線性回歸為理論支持的。

只不過,線性模型,無法做到sigmoid的非線性形式,sigmoid可以輕松處理0/1分類問題。

? ? ? ?首先,找一個合適的預測函數,一般表示為h函數,該函數就是需要找的分類函數,它用來預

測輸入數據的判斷結果。然后,構造一個Cost函數(損失函數),該函數表示預測的輸出(h)與

訓練數據類別(y)之間的偏差,可以是二者之間的差(h—y)或者是其他的形式。綜合考慮所有

訓練數據的“損失”,將Cost求和或者求平均,記為J(θ)函數,表示所有訓練數據預測值與實際類

別的偏差。顯然,J(θ)函數的值越小表示預測函數越準確(即h函數越準確),所以這一步需要

做的是找到J(θ)函數的最小值。找函數的最小值有不同的方法,Logistic Regression實現時有的

是梯度下降法(Gradient Descent )。

2. 二分類問題

二分類問題是指預測的y值只有兩個取值(0或1),二分類問題可以擴展到多分類問題。例如:我

們要做一個垃圾郵件過濾系統,x是郵件的特征,預測的y值就是郵件的類別,是垃圾郵件還是正常

郵件。對于類別我們通常稱為正類(positive class)和負類(negative class),垃圾郵件的例子

中,正類就是正常郵件,負類就是垃圾郵件。

應用舉例:是否垃圾郵件分類?是否腫瘤、癌癥診斷?是否金融欺詐?

3. logistic函數

如果忽略二分類問題中y的取值是一個離散的取值(0或1),我們繼續使用線性回歸來預測y的取

值。這樣做會導致y的取值并不為0或1。邏輯回歸使用一個函數來歸一化y值,使y的取值在區間

(0,1)內,這個函數稱為Logistic函數(logistic function),也稱為Sigmoid函數(sigmoid

function)。函數公式如下:

Logistic函數當z趨近于無窮大時,g(z)趨近于1;當z趨近于無窮小時,g(z)趨近于0。Logistic

函數的圖形如下:

線性回歸模型幫助我們用最簡單的線性方程實現了對數據的擬合,然而,這只能完成回歸任務,無

法完成分類任務,那么 logistics regression 就是在線性回歸的基礎上添磚加瓦,構建出了一種分類

模型。如果在線性模型的基礎上做分類,比如二分類任務,即:y取值{0,1},

最直觀的,可以將線性模型的輸出值再套上一個函數y = g(z),最簡單的就是“單位階躍函數”

(unit—step function),如下圖中紅色線段所示。

也就是把看作為一個分割線,大于 z 的判定為類別0,小于 z 的判定為類別1。

但是,這樣的分段函數數學性質不太好,它既不連續也不可微。通常在做優化任務時,目標函數最

好是連續可微的。這里就用到了對數幾率函數(形狀如圖中黑色曲線所示)。

它是一種"Sigmoid”函數,Sigmoid函數這個名詞是表示形式S形的函數,對數幾率函數就是其中最

重要的代表。這個函數相比前面的分段函數,具有非常好的數學性質,其主要優勢如下:使用該函

數做分類問題時,不僅可以預測出類別,還能夠得到近似概率預測。這點對很多需要利用概率輔助

決策的任務很有用。對數幾率函數是任意階可導函數,它有著很好的數學性質,很多數值優化算法

都可以直接用于求取最優解。

總的來說,模型的完全形式如下:,LR模型就是在擬合

這條直線,使得這條直線盡可能地將原始數據中的兩個類別正確的劃分開。

對于線性邊界的情況,邊界形式如下:

構造預測函數為:

h(x)的值有特殊的含義,它表示結果取1的概率,因此對于輸入x分類結果為類別1和類別0的概率分

別為:

正例(y=1)? ?

負例(y=0)? ?

4. 損失函數

對于任何機器學習問題,都需要先明確損失函數,LR模型也不例外,在遇到回歸問題時,通常我

們會直接想到如下的損失函數形式(平均誤差平方損失MSE):

但在LR模型要解決的二分類問題中,損失函數的形式是這樣的:

這個損失函數通常稱作為對數損失(logloss),這里的對數底為自然對數e,其中真實值 y 是有 0/1 兩

種情況,而推測值由于借助對數幾率函數,其輸出是介于0~1之間連續概率值。仔細查看,不難發

現,當真實值y=0時,第一項為0,當真實值y=1時,第二項為0,所以,這個損失函數其實在每次

計算時永遠都只有一項在發揮作用,那這就可以轉換為分段函數,分段的形式如下:

5. 優化求解?

現在我們已經確定了模型的損失函數,那么接下來就是根據這個損失函數,不斷優化模型參數從而

獲得擬合數據的最佳模型。

重新看一下損失函數,其本質上是 L 關于模型中線性方程部分的兩個參數 w?和 b 的函數:

?其中,

現在的學習任務轉化為數學優化的形式即為:

由于損失函數連續可微,我們可以借助梯度下降法進行優化求解,對于兩個核心參數的更新方式如

下:?

求得:

進而求得:

轉換為矩陣的計算方式為:

至此,?Logistic Regression模型的優化過程介紹完畢。

6. 梯度下降算法

梯度下降法求J(θ)的最小值,θ的更新過程:

要使得最大化,則運用梯度上升法,求出最高點:

# 梯度上升,主要是采用了最大似然的推導
def gradAscent(dataMatIn,classLabels):dataMatrix = mat(dataMatIn)labelMat = mat(classLabels).transpose()m,n = shape(dataMatrix)  # n=3alpha=0.001  # 學習率maxCycles=500  # 循環輪數theta = ones((n,1))for k in range(maxCycles):h=sigmoid(dataMatrix * theta)error = (labelMat - h)theta = theta + alpha * dataMatrix.transpose()*errorreturn theta

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35330.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35330.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35330.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從零開始,貪吃蛇小游戲系列專欄完美收官!

🎮 從零開始,貪吃蛇小游戲系列專欄完美收官! 🐍 各位游戲開發探索者們,大家好!我是[億元程序員],一位擁有8年游戲開發經驗的主程。經過一段時間的努力,我很高興地宣布,我…

阿里云預裝LAMP應用導致MySQL不顯示訪問密碼如何解決

😀前言 本篇博文是關于阿里云云服務器ECS部署MySQL過程中出現的一下坑,希望能夠幫助到您😊 🏠個人主頁:晨犀主頁 🧑個人簡介:大家好,我是晨犀,希望我的文章可以幫助到大家…

SUB-1G SOC芯片DP4306F 32 位 ARM Cortex-M0+內核替代CMT2380F32

DP4306F是一款高性能低功耗的單片集成收發機,集成MO核MCU,工作頻率可覆蓋200MHiz^ 1000MHz。 支持230/408/433/470/868/915頻段。該芯片集成了射頻接收器、射頻發射器、頻率綜合器、GFSK調制器、GFSK解調器等功能模塊。通過SPI接口可以對輸出功率、頻道選…

gitlab-Runner搭建

root wget https://packages.gitlab.com/runner/gitlab-runner/packages/fedora/29/gitlab-runner-12.6.0-1.x86_64.rpm/download.rpm rpm -ivh download.rpm ---- 安裝 rpm -Uvh download.rpm -----更新升級 然后運行: gitlab-runner register --url https://git…

RabbitMQ相關面試題

用到了哪些MQ?什么使用場景?MQ的組成部分?MQ宕機了怎么辦?如何進行持久化的? MQ的選型? Kafka:高吞吐量、低延遲的分布式消息隊列,主要用于大規模數據處理和流式處理 RocketMQ:RocketMQ是阿里巴巴開源的分布式消息隊列,具有高吞吐量、低延遲、高可靠性等特點 RabbitM…

【Go 基礎篇】Go語言浮點類型:探索浮點數的特點與應用

介紹 浮點數是計算機編程中用于表示實數的一種數據類型,用于處理具有小數部分的數值。Go語言(Golang)提供了兩種主要的浮點數類型:float32和float64,分別用于單精度和雙精度浮點數的表示。本篇博客將深入探討Go語言中…

38 | 浦發銀行股票分析案例

本文將通過一個浦發銀行股票分析案例,探討如何從多個維度對股票進行分析,包括基本面、技術面和市場環境等因素。我們將深入挖掘浦發銀行的財務數據、業務模式以及市場定位,以了解其內在價值和潛在風險。同時,我們還將考察技術面的指標,如價格走勢、均線形態等,以揭示市場…

linux 命令--常用關機命令

1.使用shutdown命令 shutdown命令是Linux系統下最常用的關機命令之一。它可以讓系統在指定時間內進行關機或者重啟操作。例如,下面的命令可以讓系統在5分鐘后進行關機操作: sudo shutdown -h5其中,“-h”表示關機,“5”表示5分鐘…

ThinkPHP8命名規范-ThinkPHP8知識詳解

本文主要講解thinkphp8的命名規范,主要包括:遵循PHP自身的PSR-2命名規范和PSR-4自動加載規范、目錄和文件命名規范、函數和類、屬性命名規范、常量和配置命名規范、數據表和字段命名規范、不能使用PHP保留字。 在使用thinkphp8開發項目之前,…

C#使用OpenCv(OpenCVSharp)圖像全局二值化處理實例

本文實例演示C#語言中如何使用OpenCv(OpenCVSharp)對圖像進行全局二值化處理。 目錄 圖像二值化原理 函數原型 參數說明 實例 效果 圖像二值化原理

線程轉換狀態,傻傻分不清等待和阻塞嗎?你還在暴力的停止線程嗎?

線程切換 線程創建之后,調用start()方法開始運行。當線程執行wait()方法之后,線程進入等待狀態。進入等待狀態的線程需要依靠其他線程的通知才能夠返回到運行狀態,而超時等待狀態相當于在等待狀態的基礎上增加了超時限制,也就是超…

騰訊云服務器競價實例是什么?適用于什么行業?有啥優惠?

騰訊云服務器CVM計費模式分為包年包月、按量計費和競價實例,什么是競價實例?競價實例和按量付費相類似,優勢是價格更劃算,缺點是云服務器實例有被自動釋放風險,騰訊云服務器網來詳細說下什么是競價實例?以及…

GUI、多線程編程、網絡編程簡介

GUI、多線程編程、網絡編程簡介 文章目錄 GUI簡介什么是GUIGUI有什么用使用方法 多線程編程什么是多線程編程多線程編程有什么用提高程序的響應能力提高程序的性能實現異步編程并發數據訪問和共享資源實現復雜的算法和任務分解 進行多線程編程的步驟 網絡編程什么是網絡編程網絡…

JMeter處理接口簽名之BeanShell實現MD5加密

項目A需要給項目B提供一個接口,這個接口加密了,現在需要測試這個接口,需要怎么編寫腳本呢?實現接口簽名的方式有兩種:BeanShell實現MD5加密和函數助手實現MD5加密,之前已經分享過了函數助手實現MD5加密&…

React如何配置env環境變量

React版本: "react": "^18.2.0" 1、在package.json平級目錄下創建.env文件 2、在‘.env’文件里配置環境變量 【1】PUBLIC_URL 描述:編譯時文件的base-href 官方描述: // We use PUBLIC_URL environment variable …

從KM到Cure Models:常用生存分析方法的優缺點

一、引言 生存分析是一種用于研究個體生命長度或事件發生時間的統計方法。在許多領域中,如醫學、社會學、經濟學和工程學等,生存分析被廣泛應用于分析個體的生存時間,并研究相關因素對生存時間的影響。通過生存分析,我們可以評估特…

交換排序——選擇排序和冒泡排序的區別是什么?

今天重溫一下算法,其實剛開始我覺得冒泡排序和選擇排序是一樣的,因為他們排序過程中都是通過相鄰的數據比較找到最小/最大的數據,通過不斷思考和學習才明白,兩者還是有區別的。 冒泡排序 概念 冒泡排序(Bubble Sort)&#xff0…

SpringBoot使用thymeleaf模版引擎配置自定義錯誤頁面

1、要在Spring Boot項目中配置自定義的錯誤頁面&#xff0c;你可以遵循以下步驟&#xff1a; 1.1、pom.xml引入thymeleaf <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId><…

【正版系統】2023熱門短劇SAAS版開源 | 小程序+APP+公眾號H5

當我們在刷百度、D音、K手等各種新聞或短視頻時經常會刷到劇情很有吸引力的短劇廣告&#xff0c;我們點擊廣告鏈接即可進入短劇小程序&#xff0c;小程序運營者通過先免費看幾集為誘耳然后在情節高潮時彈出充值或開VIP會員才能繼續看的模式來賺錢&#xff0c;以超級贅婿、鄉村小…

VS Code中C++程序的調試(Debug)功能

有一個.vscode文件&#xff0c;存放當前工作區相關配置文件的目錄。 launch.json {"version": "0.2.0","configurations": [{"name": "gcc.exe - 生成和調試活動文件", // 該調試任務的名字&#xff0c;啟動調試時會在待…