成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一文講透深入理解邏輯回歸

發(fā)布于 2025-6-17 06:35
瀏覽
0收藏

什么是邏輯回歸

本文討論邏輯回歸的基礎(chǔ)知識(shí)及其在Python中的實(shí)現(xiàn)。邏輯回歸基本上是一種有監(jiān)督分類算法。在分類問(wèn)題中,目標(biāo)變量(或輸出)y 對(duì)于給定的一組特征(或輸入)X ,且X只能取離散值。
有一點(diǎn)與流行的看法相反地是,我認(rèn)為邏輯回歸是一種回歸模型。該模型建立一個(gè)回歸模型來(lái)預(yù)測(cè)給定數(shù)據(jù)條目屬于編號(hào)為“1”的類別的概率。就像線性回歸假設(shè)數(shù)據(jù)遵循線性函數(shù)一樣,邏輯回歸只是使用sigmoid函數(shù)對(duì)數(shù)據(jù)建模。

一文講透深入理解邏輯回歸-AI.x社區(qū)

一文講透深入理解邏輯回歸-AI.x社區(qū)

僅當(dāng)將決策閾值引入時(shí),邏輯回歸才成為一種分類技術(shù)。閾值的設(shè)置是Logistic回歸的一個(gè)很重要的方面,依賴于分類問(wèn)題本身。

閾值的取值主要受精確率和召回率的影響。理想情況下,我們希望精確率和召回率都為1,但這種情況很少發(fā)生。

高低精度/召回情況

在Precision-Recall平衡的情況下,我們使用以下參數(shù)來(lái)決定閾值:

  1. 低精度/高召回率:在我們一定要報(bào)出來(lái)但精度不要求高的應(yīng)用中,我們選擇具有低精度/高召回率的模型。例如,在癌癥診斷應(yīng)用程序中,我們不希望任何受影響的患者被歸類為未受影響,而無(wú)需過(guò)多注意患者是否被錯(cuò)誤診斷為癌癥。這是因?yàn)闆](méi)有癌癥可以通過(guò)進(jìn)一步的醫(yī)學(xué)疾病檢測(cè)到,但不能漏篩,如果漏篩會(huì)對(duì)患者造成嚴(yán)重后果,精度保證可以接著后續(xù)檢查得出。
  2. 高精度/低召回率:在我們想要預(yù)測(cè)準(zhǔn)的場(chǎng)景下,我們要選擇具有高精度/低召回率的模型。例如,如果我們要對(duì)客戶進(jìn)行分類,判斷他們對(duì)個(gè)性化廣告的反應(yīng)是積極還是消極,我們希望絕對(duì)確定客戶會(huì)對(duì)廣告做出積極反應(yīng),否則錯(cuò)誤預(yù)測(cè)消極反應(yīng)可能會(huì)導(dǎo)致潛在銷(xiāo)售損失顧客。

根據(jù)類別的數(shù)量,邏輯回歸可以分為:

  1. 二項(xiàng)式:目標(biāo)變量只能有兩種可能的類型:“0”或“1”,可能代表“贏”與“輸”、“通過(guò)”與“失敗”、“死”與“活”等。
  2. 多項(xiàng)式:目標(biāo)變量可以有 3 種或更多可能的類型,這些類型沒(méi)有順序(即類型沒(méi)有數(shù)量意義),如“疾病 A”、“疾病 B”和“疾病 C”。
  3. 序數(shù):它處理具有有序類別的目標(biāo)變量。例如,考試成績(jī)可以分為:“很差”、“差”、“好”、“很好”。在這里,可以為每個(gè)類別分配一個(gè)分?jǐn)?shù),例如 0、1、2、3。

舉個(gè)栗子

首先,我們探索邏輯回歸的最簡(jiǎn)單形式,即二項(xiàng)式邏輯回歸。考慮一個(gè)示例數(shù)據(jù)集,它將學(xué)習(xí)的小時(shí)數(shù)與考試結(jié)果進(jìn)行映射。結(jié)果只能取兩個(gè)值,即 passed(1) 或 failed(0):

小時(shí)(x)  通過(guò)(y)
0.50  0
0.75  0
1.00  0
1.25  0
1.50  1
1.75  0
2.00  1
2.25  1
2.50  1
2.75  1
3.00  0
3.25  0
3.50  0
3.75  1
4.00  0
4.25  0
4.50  1
4.75  0
5.00  0
5.50  0

所以,我們有

一文講透深入理解邏輯回歸-AI.x社區(qū)

即 y 是一個(gè)分類目標(biāo)變量,它只能采用兩種可能的類型:“0”或“1”。 

為了推廣我們的模型,我們假設(shè): 

該數(shù)據(jù)集具有“p”個(gè)特征變量和“n”個(gè)觀測(cè)值。特征矩陣表示為:

一文講透深入理解邏輯回歸-AI.x社區(qū)

一文講透深入理解邏輯回歸-AI.x社區(qū)

一文講透深入理解邏輯回歸-AI.x社區(qū)

一文講透深入理解邏輯回歸-AI.x社區(qū)

一文講透深入理解邏輯回歸-AI.x社區(qū)

然后,以更緊湊的形式,

一文講透深入理解邏輯回歸-AI.x社區(qū)

一文講透深入理解邏輯回歸-AI.x社區(qū)

所以,

一文講透深入理解邏輯回歸-AI.x社區(qū)

稱為邏輯函數(shù)sigmoid函數(shù)。 

這是顯示 g(z) 的圖:

一文講透深入理解邏輯回歸-AI.x社區(qū)

從上圖我們可以推斷:

一文講透深入理解邏輯回歸-AI.x社區(qū)

Python代碼示例

import csv
import numpy as np
import matplotlib.pyplot as plt


def loadCSV(filename):
 '''
 function to load dataset
 '''
 with open(filename,"r") as csvfile:
  lines = csv.reader(csvfile)
  dataset = list(lines)
  for i in range(len(dataset)):
   dataset[i] = [float(x) for x in dataset[i]] 
 return np.array(dataset)


def normalize(X):
 '''
 function to normalize feature matrix, X
 '''
 mins = np.min(X, axis = 0)
 maxs = np.max(X, axis = 0)
 rng = maxs - mins
 norm_X = 1 - ((maxs - X)/rng)
 return norm_X


def logistic_func(beta, X):
 '''
 logistic(sigmoid) function
 '''
 return 1.0/(1 + np.exp(-np.dot(X, beta.T)))


def log_gradient(beta, X, y):
 '''
 logistic gradient function
 '''
 first_calc = logistic_func(beta, X) - y.reshape(X.shape[0], -1)
 final_calc = np.dot(first_calc.T, X)
 return final_calc


def cost_func(beta, X, y):
 '''
 cost function, J
 '''
 log_func_v = logistic_func(beta, X)
 y = np.squeeze(y)
 step1 = y * np.log(log_func_v)
 step2 = (1 - y) * np.log(1 - log_func_v)
 final = -step1 - step2
 return np.mean(final)


def grad_desc(X, y, beta, lr=.01, converge_change=.001):
 '''
 gradient descent function
 '''
 cost = cost_func(beta, X, y)
 change_cost = 1
 num_iter = 1
 
 while(change_cost > converge_change):
  old_cost = cost
  beta = beta - (lr * log_gradient(beta, X, y))
  cost = cost_func(beta, X, y)
  change_cost = old_cost - cost
  num_iter += 1
 
 return beta, num_iter


def pred_values(beta, X):
 '''
 function to predict labels
 '''
 pred_prob = logistic_func(beta, X)
 pred_value = np.where(pred_prob >= .5, 1, 0)
 return np.squeeze(pred_value)


def plot_reg(X, y, beta):
 '''
 function to plot decision boundary
 '''
 # labelled observations
 x_0 = X[np.where(y == 0.0)]
 x_1 = X[np.where(y == 1.0)]
 
 # plotting points with diff color for diff label
 plt.scatter([x_0[:, 1]], [x_0[:, 2]], c='b', label='y = 0')
 plt.scatter([x_1[:, 1]], [x_1[:, 2]], c='r', label='y = 1')
 
 # plotting decision boundary
 x1 = np.arange(0, 1, 0.1)
 x2 = -(beta[0,0] + beta[0,1]*x1)/beta[0,2]
 plt.plot(x1, x2, c='k', label='reg line')

 plt.xlabel('x1')
 plt.ylabel('x2')
 plt.legend()
 plt.show()
 

 
if __name__ == "__main__":
 # load the dataset
 dataset = loadCSV('dataset1.csv')
 
 # normalizing feature matrix
 X = normalize(dataset[:, :-1])
 
 # stacking columns with all ones in feature matrix
 X = np.hstack((np.matrix(np.ones(X.shape[0])).T, X))

 # response vector
 y = dataset[:, -1]

 # initial beta values
 beta = np.matrix(np.zeros(X.shape[1]))

 # beta values after running gradient descent
 beta, num_iter = grad_desc(X, y, beta)

 # estimated beta values and number of iterations
 print("Estimated regression coefficients:", beta)
 print("No. of iterations:", num_iter)

 # predicted labels
 y_pred = pred_values(beta, X)
 
 # number of correctly predicted labels
 print("Correctly predicted labels:", np.sum(y == y_pred))
 
 # plotting regression line
 plot_reg(X, y, beta)

最終結(jié)果:

估計(jì)回歸系數(shù):[[ 1.70474504 15.04062212 -20.47216021]]
迭代次數(shù):2612
正確預(yù)測(cè)標(biāo)簽:100

一文講透深入理解邏輯回歸-AI.x社區(qū)

本文轉(zhuǎn)載自??????沐白AI筆記??????,作者:楊沐白

收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦
主站蜘蛛池模板: 久久国产精品网 | 久久综合狠狠综合久久综合88 | 国产激情视频在线 | 国产精品无| 北条麻妃一区二区三区在线视频 | 欧美日本在线观看 | 一区二区片 | 精品一区二区三区在线观看国产 | 黄色大片在线免费观看 | 久久精品av麻豆的观看方式 | 亚洲视频一区在线 | 欧美精品1区2区3区 精品国产欧美一区二区 | 国产精品亚洲二区 | 亚洲性在线 | 成年人精品视频 | 黄色一级片在线播放 | 中文字幕亚洲精品 | 三级国产三级在线 | 波多野结衣中文字幕一区二区三区 | 一区二区日韩精品 | 91精品国产麻豆 | 日韩中文字幕视频在线观看 | 精品成人一区二区 | 国产成人综合久久 | 成人网在线 | 成人av一区二区三区 | av男人的天堂av | 久久久av一区 | 午夜视频在线观看视频 | a久久| 成人久久 | 中文字幕一区二区在线观看 | 欧美日本免费 | 国产传媒在线观看 | 国产一级片精品 | 亚洲欧洲色视频 | 欧美精品一| 蜜桃视频在线观看免费视频网站www | 午夜不卡一区二区 | 国产精品国产精品国产专区不卡 | 国产免费一区二区三区最新6 |