當(dāng)涉及到二元分類問(wèn)題時(shí),邏輯回歸是一種常用的機(jī)器學(xué)習(xí)算法。它不僅簡(jiǎn)單而且有效,通常是入門機(jī)器學(xué)習(xí)領(lǐng)域的第一步。本文將介紹邏輯回歸的基本概念、原理、應(yīng)用場(chǎng)景和代碼示例。
什么是邏輯回歸?
邏輯回歸是一種用于解決二元分類問(wèn)題的統(tǒng)計(jì)學(xué)習(xí)方法。盡管其名稱中包含"回歸"一詞,但實(shí)際上它是一種分類算法。邏輯回歸的目標(biāo)是預(yù)測(cè)輸入變量與某個(gè)特定類別相關(guān)聯(lián)的概率。
在邏輯回歸中,我們使用一個(gè)稱為Sigmoid函數(shù)的特殊函數(shù)來(lái)執(zhí)行這種概率預(yù)測(cè)。Sigmoid函數(shù)的形狀類似于"S"型曲線,它將輸入的線性組合映射到0到1之間的概率值。
Sigmoid函數(shù)
Sigmoid函數(shù)的數(shù)學(xué)表達(dá)式如下:
其中,
z
z
z 表示輸入的線性組合。Sigmoid函數(shù)的輸出范圍在0到1之間,這使得它非常適合用于表示概率。
邏輯回歸
損失函數(shù)
梯度下降
邏輯回歸定義
邏輯函數(shù)
邏輯回歸使用一種稱為邏輯函數(shù)(Logistic Function)或S形函數(shù)(Sigmoid Function)的函數(shù)來(lái)建模數(shù)據(jù)點(diǎn)屬于正類別的概率。邏輯函數(shù)的數(shù)學(xué)表示如下:
P ( Y = 1 ∣ X ) = 1 1 + e ? z P(Y=1|X) = \frac{1}{1 + e^{-z}} P(Y=1∣X)=1+e?z1?
其中, P ( Y = 1 ∣ X ) P(Y=1|X) P(Y=1∣X) 表示給定輸入 X X X 條件下數(shù)據(jù)點(diǎn)屬于正類別的概率, z z z 是輸入特征的線性組合。這個(gè)概率值范圍在0到1之間,它表示數(shù)據(jù)點(diǎn)屬于正類別的可能性。
線性組合
在邏輯回歸中,我們將輸入特征的線性組合表示為 z z z:
z = θ 0 + θ 1 X 1 + θ 2 X 2 + … + θ n X n z = \theta_0 + \theta_1X_1 + \theta_2X_2 + \ldots + \theta_nX_n z=θ0?+θ1?X1?+θ2?X2?+…+θn?Xn?
其中, θ i \theta_i θi? 是模型的參數(shù), X i X_i Xi? 是輸入特征。這個(gè)線性組合表示了數(shù)據(jù)點(diǎn)屬于正類別的“原始分?jǐn)?shù)”。
模型訓(xùn)練
邏輯回歸的目標(biāo)是找到最佳的參數(shù) θ \theta θ,使模型能夠最好地?cái)M合訓(xùn)練數(shù)據(jù)并進(jìn)行準(zhǔn)確的分類。為了實(shí)現(xiàn)這一點(diǎn),我們通常使用最大似然估計(jì)(Maximum Likelihood Estimation,簡(jiǎn)稱MLE)來(lái)估計(jì)參數(shù) θ \theta θ。
MLE的目標(biāo)是最大化在給定參數(shù) θ \theta θ 下觀察到訓(xùn)練數(shù)據(jù)的概率。通過(guò)最大化這個(gè)概率,我們使模型更可能產(chǎn)生觀察到的訓(xùn)練數(shù)據(jù),從而提高了模型的性能。
決策邊界
一旦模型訓(xùn)練完成并找到最佳參數(shù) θ \theta θ,我們就可以使用邏輯函數(shù)來(lái)進(jìn)行分類。通常,我們會(huì)將概率值大于0.5的數(shù)據(jù)點(diǎn)分為正類別,概率值小于0.5的數(shù)據(jù)點(diǎn)分為負(fù)類別。這個(gè)概率閾值通常是可調(diào)的。
邏輯回歸的決策邊界是一個(gè)超平面,它將特征空間分成兩個(gè)區(qū)域,每個(gè)區(qū)域?qū)?yīng)一個(gè)類別。這個(gè)超平面的位置取決于參數(shù) θ \theta θ。
了解邏輯回歸:從原理到實(shí)現(xiàn)
邏輯回歸是一種常用于分類問(wèn)題的機(jī)器學(xué)習(xí)算法。它具有簡(jiǎn)單的原理和實(shí)現(xiàn),同時(shí)在各種應(yīng)用中都有廣泛的用途。在本篇博客中,我們將深入了解邏輯回歸,包括其原理、實(shí)現(xiàn)和應(yīng)用。
什么是邏輯回歸?
邏輯回歸是一種二分類算法,用于將輸入數(shù)據(jù)分為兩個(gè)類別,通常是正類別和負(fù)類別。盡管其名稱中包含“回歸”,但它實(shí)際上是一個(gè)分類算法,用于估計(jì)輸入數(shù)據(jù)屬于某一類別的概率。
邏輯回歸的原理
邏輯回歸的核心思想是使用S形函數(shù)(也稱為邏輯函數(shù))來(lái)建模輸入特征和目標(biāo)類別之間的關(guān)系。邏輯函數(shù)將輸入映射到0到1之間的概率值,表示樣本屬于正類別的概率。其數(shù)學(xué)表示如下:
P ( Y = 1 ∣ X ) = 1 1 + e ? z P(Y=1|X) = \frac{1}{1 + e^{-z}} P(Y=1∣X)=1+e?z1?
其中, P ( Y = 1 ∣ X ) P(Y=1|X) P(Y=1∣X) 表示給定輸入 X X X 條件下樣本屬于正類別的概率, z z z 是線性組合的結(jié)果,通常表示為:
z = θ 0 + θ 1 X 1 + θ 2 X 2 + … + θ n X n z = \theta_0 + \theta_1X_1 + \theta_2X_2 + \ldots + \theta_nX_n z=θ0?+θ1?X1?+θ2?X2?+…+θn?Xn?
其中, θ i \theta_i θi? 是模型的參數(shù), X i X_i Xi? 是輸入特征。
邏輯回歸的實(shí)現(xiàn)
邏輯回歸的實(shí)現(xiàn)通常包括以下步驟:
-
收集和準(zhǔn)備數(shù)據(jù):收集樣本數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行預(yù)處理和特征工程。
-
定義模型:選擇邏輯回歸作為模型,并初始化模型參數(shù)。
-
訓(xùn)練模型:使用訓(xùn)練數(shù)據(jù)集,通過(guò)最大似然估計(jì)等方法來(lái)估計(jì)模型參數(shù)。
-
預(yù)測(cè)和評(píng)估:使用訓(xùn)練好的模型對(duì)新數(shù)據(jù)進(jìn)行預(yù)測(cè),并評(píng)估模型性能。
-
超參數(shù)調(diào)優(yōu):根據(jù)性能指標(biāo)調(diào)整模型的超參數(shù),如學(xué)習(xí)率和正則化參數(shù)。
邏輯回歸的應(yīng)用
邏輯回歸在許多領(lǐng)域都有廣泛的應(yīng)用,包括:
-
醫(yī)學(xué):用于疾病診斷和預(yù)測(cè)患者風(fēng)險(xiǎn)。
-
金融:用于信用評(píng)分和欺詐檢測(cè)。
-
自然語(yǔ)言處理:用于文本分類和情感分析。
-
網(wǎng)絡(luò)安全:用于入侵檢測(cè)和威脅分析。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-697192.html
代碼示例
以下是使用Python和Scikit-Learn庫(kù)實(shí)現(xiàn)的簡(jiǎn)單邏輯回歸代碼示例:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-697192.html
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 創(chuàng)建訓(xùn)練數(shù)據(jù)集和標(biāo)簽
X = [[1.2], [2.4], [3.1], [4.5], [5.0]]
y = [0, 0, 1, 1, 1]
# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 創(chuàng)建邏輯回歸模型
model = LogisticRegression()
# 訓(xùn)練模型
model.fit(X_train, y_train)
# 進(jìn)行預(yù)測(cè)
y_pred = model.predict(X_test)
# 計(jì)算準(zhǔn)確率
accuracy = accuracy_score(y_test, y_pred)
print(f"準(zhǔn)確率:{accuracy}")
# 損失函數(shù)
def compute_loss(y, y_pred):
m = len(y)
return -1 / m * np.sum(y * np.log(y_pred) + (1 - y) * np.log(1 - y_pred))
# 梯度下降優(yōu)化參數(shù)
def gradient_descent(X, y, theta, learning_rate, num_epochs):
m = len(y)
losses = []
for epoch in range(num_epochs):
z = np.dot(X, theta)
y_pred = sigmoid(z)
gradient = np.dot(X.T, (y_pred - y)) / m
theta -= learning_rate * gradient
loss = compute_loss(y, y_pred)
losses.append(loss)
return theta, losses
# 生成示例數(shù)據(jù)
np.random.seed(0)
X = np.random.randn(100, 3)
y = np.random.randint(0, 2, 100)
print(X)
print(y)
# 添加偏置項(xiàng)(截距項(xiàng))到特征矩陣
X_b = np.c_[np.ones((100, 1)), X]
# 初始化模型參數(shù)
theta = np.random.randn(4)
# 定義梯度下降參數(shù)
learning_rate = 0.1
num_epochs = 1000
# 使用梯度下降訓(xùn)練模型
theta, losses = gradient_descent(X_b, y, theta, learning_rate, num_epochs)
# 打印最終參數(shù)和損失
print("最終參數(shù):", theta)
print("最終損失:", losses[-1])
算法可視化
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# 創(chuàng)建一個(gè)模擬的二分類數(shù)據(jù)集
X, y = make_classification(n_samples=100, n_features=2, n_classes=2, n_clusters_per_class=1, n_redundant=0, random_state=42)
# 將數(shù)據(jù)集分為訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 初始化邏輯回歸模型
model = LogisticRegression()
# 訓(xùn)練模型
model.fit(X_train, y_train)
# 預(yù)測(cè)測(cè)試集
y_pred = model.predict(X_test)
# 計(jì)算模型的準(zhǔn)確率
accuracy = accuracy_score(y_test, y_pred)
print("模型準(zhǔn)確率:", accuracy)
# 可視化訓(xùn)練集和測(cè)試集以及決策邊界
plt.figure(figsize=(12, 5))
# 繪制訓(xùn)練集
plt.subplot(1, 2, 1)
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap='coolwarm')
plt.title("訓(xùn)練集")
# 繪制測(cè)試集以及決策邊界
plt.subplot(1, 2, 2)
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap='coolwarm')
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 50),
np.linspace(ylim[0], ylim[1], 50))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap='coolwarm', alpha=0.6)
plt.title("測(cè)試集和決策邊界")
plt.show()
到了這里,關(guān)于機(jī)器學(xué)習(xí):基于梯度下降算法的邏輯回歸實(shí)現(xiàn)和原理解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!