自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用邏輯回歸來(lái)進(jìn)行分類

人工智能 機(jī)器學(xué)習(xí)
邏輯回歸是機(jī)器學(xué)習(xí)中經(jīng)常用到的一種方法,其屬于有監(jiān)督機(jī)器學(xué)習(xí),邏輯回歸的名字雖然帶有“回歸”二字,但實(shí)際上它卻屬于一種分類方法,本文就介紹一下如何用邏輯回歸進(jìn)行分類。

[[345345]]

邏輯回歸是機(jī)器學(xué)習(xí)中經(jīng)常用到的一種方法,其屬于有監(jiān)督機(jī)器學(xué)習(xí),邏輯回歸的名字雖然帶有“回歸”二字,但實(shí)際上它卻屬于一種分類方法,本文就介紹一下如何用邏輯回歸進(jìn)行分類。

首先還是介紹一下邏輯回歸的基本原理。

 

圖1. 邏輯函數(shù)圖形

 

邏輯回歸之所以叫“邏輯”,是因?yàn)槠涫褂昧薒ogistic函數(shù)(也稱Sigmoid函數(shù)),該函數(shù)形式如圖2中式(1)所示,圖形如圖1所示。既然邏輯回歸是分類方法,那么我們這里就以最簡(jiǎn)單的二分類來(lái)說(shuō)明一下,二分類的輸出標(biāo)記為 y=0或1,而線性回歸產(chǎn)生的預(yù)測(cè)值z(mì) = ω^Tx+b,我們讓t=z,把z的表達(dá)式帶入到式(1)中得到式(2),再做變換就得到式(3)。y是我們要求的正例,1-y則是反例,二者比值則可稱為幾率,所以式(3)可以稱作“對(duì)數(shù)幾率”。接下來(lái)我們要求解ω和b,用的是極大似然估計(jì)法。我們將y視為后驗(yàn)概率估計(jì)p(y=1|x),那么就可以得到圖3中的式(4)和(5)。接下來(lái)令β=(ω;b)和x=(x;1),可得到式(6),由式(6)的得到圖4中(7)、(8)和(9),(9)就是目標(biāo)函數(shù),對(duì)目標(biāo)函數(shù)求解得到最優(yōu)參數(shù)即可。這些推導(dǎo)比較復(fù)雜,筆者在這里僅列出了主要部分,大家如果有興趣,可自行查閱相關(guān)資料。

 

圖2. 邏輯回歸推導(dǎo)公式(1)—(3)

 

 

圖3. 邏輯回歸推導(dǎo)公式(4)—(6)

 

 

圖4. 邏輯回歸推導(dǎo)公式(7)—(9)

 

在了解邏輯回歸的基本原理之后,我們?cè)儆靡粋€(gè)例子來(lái)介紹一下邏輯回歸的用法。

本文中我們使用的邏輯回歸模型來(lái)自scikit-learn,用到的數(shù)據(jù)集也同樣來(lái)自于scikit-learn,代碼如下。

  1. import matplotlib.pyplot as plt 
  2. from sklearn.metrics import classification_report 
  3. from sklearn.datasets import make_classification 
  4. from sklearn.linear_model import LogisticRegression 
  5. from sklearn.model_selection import train_test_split  
  6.  
  7. X, y = make_classification(n_samples=100, n_features=2,  
  8. n_informative=2, n_redundant=0, n_clusters_per_class=1, 
  9. class_sep = 2.0, random_state=15) 
  10. fig, ax = plt.subplots(figsize=(8, 6)) 
  11. plt.scatter(X[:, 0], X[:, 1], marker='o', c=y) 
  12. plt.xlabel('Feature 1'
  13. plt.ylabel('Feature 2'
  14. plt.show() 

 


圖5. 本例中所用數(shù)據(jù)點(diǎn)

 

其結(jié)果如圖5所示。這個(gè)數(shù)據(jù)集是我們用make_classification方法生成的,共100個(gè)點(diǎn),一共兩個(gè)特征(維度),所有數(shù)據(jù)共分為兩個(gè)類。從圖中可以看出紫色的點(diǎn)分為一類,黃色的點(diǎn)分為另一類。然后對(duì)數(shù)據(jù)集進(jìn)行一下劃分,分為訓(xùn)練集和測(cè)試集,代碼如下。X_train, X_test,y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=30)

在這里,我們?cè)O(shè)置測(cè)試集的數(shù)據(jù)個(gè)數(shù)為30個(gè),隨機(jī)狀態(tài)random_state為30,這個(gè)數(shù)字可以隨意設(shè)置。接下來(lái)我們用邏輯回歸來(lái)進(jìn)行一下訓(xùn)練和預(yù)測(cè),結(jié)果用classification_report方法輸出。

  1. model = LogisticRegression() #生成模型 
  2. model.fit(X_train, y_train) #輸入訓(xùn)練數(shù)據(jù) 
  3. y_predict = model.predict(X_test) #輸出預(yù)測(cè)數(shù)據(jù) 
  4. print(classification_report(y_test, y_predict)) #生成預(yù)測(cè)結(jié)果報(bào)告預(yù)測(cè) 

結(jié)果如圖6所示。從圖6中我們可以看出該模型的accuracy為0.97,因?yàn)槲覀兊臏y(cè)試數(shù)據(jù)共有30個(gè),所以這意味著我們只有1個(gè)點(diǎn)預(yù)測(cè)錯(cuò)了,說(shuō)明該模型的分類效果還是非常不錯(cuò)的。

 

圖6. 模型結(jié)果報(bào)告

 

然后為了讓大家對(duì)該模型的分類效果有一個(gè)進(jìn)一步的了解,筆者在這里再深入研究一下,我們?cè)賮?lái)看看邏輯回歸模型的分類邊界,即該模型是從哪里開(kāi)始進(jìn)行劃分的,代碼如下。

  1. step = 0.01 # 相當(dāng)步長(zhǎng),越小點(diǎn)越密集 
  2. x_min = X[:, 0].min() -1 #設(shè)置mesh的邊界 
  3. x_max = X[:, 0].max() + 1 
  4. y_min = X[:, 1].min() - 1 
  5. y_max = X[:, 1].max() + 1 
  6. x_mesh, y_mesh = np.meshgrid(np.arange(x_min, x_max, step), np.arange(y_min, y_max, step))  
  7. data_mesh = np.stack([x_mesh.ravel(), y_mesh.ravel()], axis=-1) #把mesh轉(zhuǎn)換為2列的數(shù)據(jù) 
  8. Z = model.predict(data_mesh) 
  9. Z = Z.reshape(x_mesh.shape) 
  10. fig, ax = plt.subplots(figsize=(8,6)) 
  11. plt.pcolormesh(x_mesh, y_mesh, Z, cmap=plt.cm.cool) #畫出mesh的顏色 
  12. plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.ocean) 
  13. plt.show() 

這里代碼有些復(fù)雜,解釋一下。我們的設(shè)計(jì)思路是這樣的,因?yàn)楸敬问褂玫倪壿嫽貧w模型是一個(gè)二分類模型,也就是將結(jié)果分為了兩個(gè)類,那么我們把模型中每個(gè)類的區(qū)域用一種顏色標(biāo)出,這樣就有兩種顏色。落入每個(gè)區(qū)域的點(diǎn)就屬于這個(gè)區(qū)域,也就是這個(gè)類。x_mesh, y_mesh = np.meshgrid(np.arange(x_min, x_max, step), np.arange(y_min, y_max, step))這行代碼就是得到整個(gè)區(qū)域(也就是兩個(gè)類的區(qū)域之和)的點(diǎn),這個(gè)區(qū)域比我們用到的數(shù)據(jù)集的范圍大一些,x_min、x_max、y_min、y_max就是整個(gè)區(qū)域的邊界。data_mesh = np.stack([x_mesh.ravel(), y_mesh.ravel()], axis=-1) 這行代碼就是把上面整個(gè)區(qū)域中的點(diǎn)轉(zhuǎn)換為2列的數(shù)據(jù),便于后面預(yù)測(cè),Z = model.predict(data_mesh)就是區(qū)域每個(gè)點(diǎn)的預(yù)測(cè)值,我們?cè)儆胮lt.pcolormesh和plt.scatter分別畫出區(qū)域顏色和數(shù)據(jù)點(diǎn)的顏色,就能清楚看到那些點(diǎn)在哪個(gè)區(qū)域中。其結(jié)果如圖7所示。

 

圖7. 用不同顏色來(lái)表示不同的劃分區(qū)域

 

從結(jié)果中可以看出,有一個(gè)綠色的點(diǎn)落入到了錯(cuò)誤的區(qū)域中,說(shuō)明這個(gè)點(diǎn)預(yù)測(cè)錯(cuò)了,這和我們前面classification_report得到的結(jié)果一致。

邏輯回歸在機(jī)器學(xué)習(xí)中的使用非常廣泛而且效果也不錯(cuò),但其也有一些缺點(diǎn),比如不能解決非線性問(wèn)題、對(duì)多重共線性數(shù)據(jù)較為敏感、很難處理數(shù)據(jù)不平衡的問(wèn)題等。其原理也要比筆者介紹的復(fù)雜不少,想要深入了解的讀者可以自行查找相關(guān)資料來(lái)學(xué)習(xí)。

作者簡(jiǎn)介:Mort,數(shù)據(jù)分析愛(ài)好者,擅長(zhǎng)數(shù)據(jù)可視化,比較關(guān)注機(jī)器學(xué)習(xí)領(lǐng)域,希望能和業(yè)內(nèi)朋友多學(xué)習(xí)交流。

責(zé)任編輯:未麗燕 來(lái)源: Python中文社區(qū)
相關(guān)推薦

2020-12-24 06:54:45

Python機(jī)器學(xué)習(xí)多類分類邏輯回歸

2023-03-30 11:38:56

機(jī)器學(xué)習(xí)邏輯規(guī)則數(shù)量

2020-08-25 18:10:22

Python代碼線性回歸

2018-04-09 10:20:32

深度學(xué)習(xí)

2017-10-10 14:20:11

隨機(jī)森林分類算法

2023-11-28 09:00:00

機(jī)器學(xué)習(xí)少樣本學(xué)習(xí)SetFit

2010-03-20 20:14:43

2021-04-21 10:47:48

機(jī)器學(xué)習(xí)邏輯回歸

2011-03-03 10:16:06

喬布斯iPad 2

2022-06-05 21:16:08

機(jī)器學(xué)習(xí)Python

2024-09-20 10:02:13

2020-12-23 07:54:56

Python機(jī)器學(xué)習(xí)邏輯回歸算法

2016-12-27 15:33:25

softmax分類器課程

2021-11-03 06:57:42

數(shù)據(jù)線性邏輯

2022-08-15 15:16:20

機(jī)器學(xué)習(xí)圖片深度學(xué)習(xí)

2024-11-21 16:06:02

2025-02-28 07:31:40

2021-01-20 08:30:00

數(shù)據(jù)分析機(jī)器學(xué)習(xí)IT

2013-10-23 10:30:21

搜狗

2018-09-15 15:07:50

AppleiPhone手機(jī)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)