【scikit-learn基础】--『监督学习』之 逻辑回归分类
邏輯回歸這個(gè)算法的名稱有一定的誤導(dǎo)性。
雖然它的名稱中有“回歸”,當(dāng)它在機(jī)器學(xué)習(xí)中不是回歸算法,而是分類算法。
因?yàn)椴捎昧伺c回歸類似的思想來(lái)解決分類問題,所以它的名稱才會(huì)是邏輯回歸。
邏輯回歸的思想可以追溯到19世紀(jì),由英國(guó)統(tǒng)計(jì)學(xué)家Francis Galton在研究豌豆遺傳問題時(shí)首次提出。
然而,真正將邏輯回歸應(yīng)用于機(jī)器學(xué)習(xí)的是加拿大統(tǒng)計(jì)學(xué)家Hugh Everett,他在1970年代提出了廣義線性模型(GLM),其中包括邏輯回歸。
邏輯回歸廣泛應(yīng)用于各種分類問題,如垃圾郵件識(shí)別、疾病預(yù)測(cè)、市場(chǎng)細(xì)分等。
1. 算法概述
邏輯回歸通過構(gòu)建一個(gè)邏輯模型來(lái)預(yù)測(cè)分類結(jié)果。
它首先對(duì)特征進(jìn)行線性回歸,
\(y=w_0 x_0+w_1 x_1+w_2 x_2+w_3 x_3...+w_n x_n=w^Tx\)
然后通過一個(gè)sigmoid函數(shù)(\(y=\frac{1}{1+e^{-x}}\))將線性回歸的結(jié)果轉(zhuǎn)化為概率值,
sigmoid函數(shù)的輸出范圍是0到1。
最后得到邏輯回歸的公式:\(h_{w}(x)=\frac{1}{1+e^{-y}}=\frac{1}{1+e^{-w^Tx}}\)
2. 創(chuàng)建樣本數(shù)據(jù)
這次用scikit-learn中的樣本生成器make_moons來(lái)生成二分類用的樣本數(shù)據(jù)。
from sklearn.datasets import make_moons
fig, ax = plt.subplots(1, 1)
X, y = make_moons(noise=0.05, n_samples=1000)
ax.scatter(X[:, 0], X[:, 1], marker="o", c=y, s=25)
plt.show()
關(guān)于用make_moons生成樣本數(shù)據(jù)的介紹,請(qǐng)參考:TODO
3. 模型訓(xùn)練
首先,分割訓(xùn)練集和測(cè)試集。
from sklearn.model_selection import train_test_split
# 分割訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
這次按照8:2的比例來(lái)劃分訓(xùn)練集和測(cè)試集。
然后用scikit-learn中的LogisticRegression模型來(lái)訓(xùn)練:
from sklearn.neighbors import LogisticRegression
# 定義邏輯回歸模型
reg = LogisticRegression()
# 訓(xùn)練模型
reg.fit(X_train, y_train)
# 在測(cè)試集上進(jìn)行預(yù)測(cè)
y_pred = reg.predict(X_test)
LogisticRegression的主要參數(shù)包括:
-
penalty:廣義線性模型的正則項(xiàng),可選值包括L1正則項(xiàng)'
l1'、L2正則項(xiàng)'l2'、復(fù)合正則'elasticnet'和無(wú)正則項(xiàng)None,默認(rèn)值為'l2'。 - dual:是否為對(duì)偶問題。默認(rèn)為False。
- tol:容忍度。默認(rèn)值為0.0001。
- C:懲罰系數(shù)。默認(rèn)值為1.0。
- fit_intercept:是否擬合截距。默認(rèn)為True。
- intercept_scaling:截距的縮放因子。默認(rèn)值為1。
- class_weight:樣本權(quán)重,用于實(shí)現(xiàn)數(shù)據(jù)的不同分類重要性的懲罰。默認(rèn)為None。
- random_state:隨機(jī)種子。默認(rèn)為None。
-
solver:優(yōu)化算法。默認(rèn)為'
warn',可選項(xiàng)有'lbfgs'、'sag'、'saga'、'newton-cg'、'sag-l2'、'saga-l2'、'lbfgs-l2'和'optimal'。 - max_iter:最大迭代次數(shù)。默認(rèn)為100。
- multi_class:多類別分類器。默認(rèn)為'warn',當(dāng)n_classes>2時(shí),默認(rèn)為True,否則默認(rèn)為False。
- n_jobs:線程數(shù)。默認(rèn)為None,表示使用CPU的核數(shù)。
最后驗(yàn)證模型的訓(xùn)練效果:
# 比較測(cè)試集中有多少個(gè)分類預(yù)測(cè)正確
correct_pred = np.sum(y_pred == y_test)
print("預(yù)測(cè)正確率:{}%".format(correct_pred/len(y_pred)*100))
# 運(yùn)行結(jié)果
預(yù)測(cè)正確率:89.0%
準(zhǔn)確率還可以,可以調(diào)節(jié)生成樣本數(shù)據(jù)的make_moons方法的noise參數(shù),
看看在不同混亂程度的樣本數(shù)據(jù)下,邏輯回歸的準(zhǔn)確性是否健壯。
4. 總結(jié)
邏輯回歸在很多領(lǐng)域都有廣泛的應(yīng)用,如自然語(yǔ)言處理、圖像識(shí)別、醫(yī)療診斷、信用評(píng)分等。
它尤其適用于那些樣本特征之間存在線性關(guān)系,且目標(biāo)變量為二元的情況。
邏輯回歸算法主要優(yōu)勢(shì)在于::
- 實(shí)現(xiàn)簡(jiǎn)單:易于理解和實(shí)現(xiàn),可以在短時(shí)間內(nèi)訓(xùn)練出模型。
- 計(jì)算效率高:在訓(xùn)練和預(yù)測(cè)時(shí)具有較高的計(jì)算效率,可以處理大規(guī)模的數(shù)據(jù)集。
- 可解釋性強(qiáng):可以給出概率輸出,這使得它更容易解釋和信任。
不過,邏輯回歸也有其不足之處:
- 對(duì)數(shù)據(jù)質(zhì)量和特征選擇敏感:如果數(shù)據(jù)中存在噪音或者特征選擇不當(dāng),可能會(huì)出現(xiàn)過擬合或者欠擬合的情況。
- 只能處理二分類問題:如果要處理多分類問題的話,需要把多分類問題轉(zhuǎn)為多個(gè)二分類問題。
- 對(duì)異常值和缺失值敏感:處理不當(dāng)可能會(huì)影響模型的性能。
總結(jié)
以上是生活随笔為你收集整理的【scikit-learn基础】--『监督学习』之 逻辑回归分类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 原创:党波涛:普通家庭孩子怎么才能上清华
- 下一篇: 神经网络优化篇:详解梯度检验(Gradi