浙江疫情最新消息2020seo超級外鏈工具免費
💗💗💗歡迎來到我的博客,你將找到有關(guān)如何使用技術(shù)解決問題的文章,也會找到某個技術(shù)的學(xué)習(xí)路線。無論你是何種職業(yè),我都希望我的博客對你有所幫助。最后不要忘記訂閱我的博客以獲取最新文章,也歡迎在文章下方留下你的評論和反饋。我期待著與你分享知識、互相學(xué)習(xí)和建立一個積極的社區(qū)。謝謝你的光臨,讓我們一起踏上這個知識之旅!
文章目錄
- 🥦引言
- 🥦什么是邏輯回歸?
- 🥦分類問題
- 🥦交叉熵
- 🥦代碼實現(xiàn)
- 🥦總結(jié)
🥦引言
當(dāng)談到機器學(xué)習(xí)和深度學(xué)習(xí)時,邏輯回歸是一個非常重要的算法,它通常用于二分類問題。在這篇博客中,我們將使用PyTorch來實現(xiàn)邏輯回歸。PyTorch是一個流行的深度學(xué)習(xí)框架,它提供了強大的工具來構(gòu)建和訓(xùn)練神經(jīng)網(wǎng)絡(luò),適用于各種機器學(xué)習(xí)任務(wù)。
在機器學(xué)習(xí)中已經(jīng)使用了sklearn庫介紹過邏輯回歸,這里重點使用pytorch這個深度學(xué)習(xí)框架
🥦什么是邏輯回歸?
我們首先來回顧一下什么是邏輯回歸?
邏輯回歸是一種用于二分類問題的監(jiān)督學(xué)習(xí)算法。它的主要思想是通過一個S形曲線(通常是Sigmoid函數(shù))將輸入特征映射到0和1之間的概率值,然后根據(jù)這些概率值進(jìn)行分類決策。在邏輯回歸中,我們使用一個線性模型和一個激活函數(shù)來實現(xiàn)這個映射。
🥦分類問題
這里以MINIST Dataset手寫數(shù)字集為例
這個數(shù)據(jù)集中包含了6w個訓(xùn)練集1w個測試集,類別10個
這里我們不再向之前線性回歸那樣,根據(jù)屬于判斷具體的數(shù)值大小;而是根據(jù)輸入的值判斷從0-9每個數(shù)字的概率大小記為p(0)、p(1)…而且十個概率值和為1,我們的目標(biāo)就是根據(jù)輸入得到這十個分類對于輸入的每一個的概率值,哪個大就是我們需要的。
這里介紹一下與torch相關(guān)聯(lián)的庫—torchvision
torchvision:
- “torchvision” 是一個PyTorch的附加庫,專門用于處理圖像和視覺任務(wù)。
它包含了一系列用于數(shù)據(jù)加載、數(shù)據(jù)增強、計算機視覺任務(wù)(如圖像分類、目標(biāo)檢測等)的工具和數(shù)據(jù)集。 - “torchvision” 提供了許多預(yù)訓(xùn)練的視覺模型(例如,ResNet、VGG、AlexNet等),可以用于遷移學(xué)習(xí)或作為基準(zhǔn)模型。
此外,它還包括了用于圖像預(yù)處理、轉(zhuǎn)換和可視化的函數(shù)。
上圖已經(jīng)清楚的顯示了,這個庫包含了一些自帶的數(shù)據(jù)集,但是并不是我們安裝完這個庫就有了,而且需要進(jìn)行調(diào)用的,類似在線下載,root指定下載的路徑,train表示你需要訓(xùn)練集還是測試集,通常情況下就是兩個一個訓(xùn)練,一個測試,download就是判斷你下沒下載,下載了就是擺設(shè),沒下載就給你下載了
我們再來看一個數(shù)據(jù)集(CIFAR-10)
包含了5w訓(xùn)練樣本,1w測試樣本,10類。調(diào)用方式與上一個類似。
接下來我們從一張圖更加直觀的查看分類和回歸
左邊的是回歸,右邊的是分類
過去我們使用回歸例如 y ^ \hat{y} y^?=wx+b∈R,這是屬于一個實數(shù)的;但是在分類問題, y ^ \hat{y} y^?∈[0,1]
這說明我們需要尋找一個函數(shù),將原本實數(shù)的值經(jīng)過函數(shù)的映射轉(zhuǎn)化為[0,1]之間。這里我們引入Logistic函數(shù),使用極限很清楚的得出x趨向于正無窮的時候函數(shù)為1,x趨向于負(fù)無窮的時候,函數(shù)為0,x=0的時候,函數(shù)為0.5,當(dāng)我們計算的時候?qū)?span id="ieo6y2aa" class="katex--inline"> y ^ \hat{y} y^?帶入這樣就會出現(xiàn)一個0到1的概率了。
下圖展示一些其他的Sigmoid函數(shù)
🥦交叉熵
過去我們所使用的損失函數(shù)普遍都是MSE,這里引入一個新的損失函數(shù)—交叉熵
==交叉熵(Cross-Entropy)==是一種用于衡量兩個概率分布之間差異的數(shù)學(xué)方法,常用于機器學(xué)習(xí)和深度學(xué)習(xí)中,特別是在分類問題中。它是一個非常重要的損失函數(shù),用于衡量模型的預(yù)測與真實標(biāo)簽之間的差異,從而幫助優(yōu)化模型參數(shù)。
在交叉熵的上下文中,通常有兩個概率分布:
-
真實分布(True Distribution): 這是指問題的實際概率分布,表示樣本的真實標(biāo)簽分布。通常用 p ( x ) p(x) p(x)表示,其中 x x x表示樣本或類別。
-
預(yù)測分布(Predicted Distribution): 這是指模型的預(yù)測概率分布,表示模型對每個類別的預(yù)測概率。通常用 q ( x ) q(x) q(x)表示,其中 x x x表示樣本或類別。
交叉熵的一般定義如下:
其中, H ( p , q ) H(p, q) H(p,q) 表示真實分布 p p p 和預(yù)測分布 q q q 之間的交叉熵。
交叉熵的主要特點和用途包括:
-
度量差異性: 交叉熵度量了真實分布和預(yù)測分布之間的差異。當(dāng)兩個分布相似時,交叉熵較小;當(dāng)它們之間的差異增大時,交叉熵增大。
-
損失函數(shù): 在機器學(xué)習(xí)中,交叉熵通常用作損失函數(shù),用于衡量模型的預(yù)測與真實標(biāo)簽之間的差異。在分類任務(wù)中,通常使用交叉熵作為模型的損失函數(shù),幫助模型優(yōu)化參數(shù)以提高分類性能。
-
反向傳播: 交叉熵在訓(xùn)練神經(jīng)網(wǎng)絡(luò)時非常有用。通過計算交叉熵的梯度,可以使用反向傳播算法來調(diào)整神經(jīng)網(wǎng)絡(luò)的權(quán)重,從而使模型的預(yù)測更接近真實標(biāo)簽。
在分類問題中,常見的交叉熵?fù)p失函數(shù)包括二元交叉熵(Binary Cross-Entropy)和多元交叉熵(Categorical Cross-Entropy)。二元交叉熵用于二分類問題,多元交叉熵用于多類別分類問題。
劉二大人的PPT中也介紹了
右邊的表格中每組y與 y ^ \hat{y} y^?對應(yīng)的BCE,BCE越高說明越可能,最后將其求均值
🥦代碼實現(xiàn)
根據(jù)上圖可知,線性回歸和邏輯回歸的流程與函數(shù)只區(qū)別于Sigmoid函數(shù)
這里就是BCEloss的調(diào)用,里面的參數(shù)代表求不求均值
完整代碼如下
import torch.nn.functional as F
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[0], [0], [1]])
class LogisticRegressionModel(torch.nn.Module):def __init__(self):super(LogisticRegressionModel, self).__init__() self.linear = torch.nn.Linear(1, 1)def forward(self, x):y_pred = F.sigmoid(self.linear(x))return y_pred
model = LogisticRegressionModel()
criterion = torch.nn.BCELoss(size_average=False)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
for epoch in range(1000):y_pred = model(x_data)loss = criterion(y_pred, y_data)print(epoch, loss.item())optimizer.zero_grad() loss.backward()optimizer.step()
最后繪制一下
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 200)
x_t = torch.Tensor(x).view((200, 1)) # 相當(dāng)于reshape
y_t = model(x_t)
y = y_t.data.numpy()
plt.plot(x, y)
plt.plot([0, 10], [0.5, 0.5], c='r')
plt.xlabel('Hours')
plt.ylabel('Probability of Pass')
plt.grid()
plt.show()
運行結(jié)果如下
🥦總結(jié)
這就是使用PyTorch實現(xiàn)邏輯回歸的基本步驟。邏輯回歸是一個簡單但非常有用的算法,可用于各種分類問題。希望這篇博客能幫助你開始使用PyTorch構(gòu)建自己的邏輯回歸模型。如果你想進(jìn)一步擴展你的知識,可以嘗試在更大的數(shù)據(jù)集上訓(xùn)練模型或探索其他深度學(xué)習(xí)算法。祝你好運!
挑戰(zhàn)與創(chuàng)造都是很痛苦的,但是很充實。