邏輯回歸sklearn實現(xiàn)

LogisticRegression

class sklearn.linear_model.LogisticRegression(penalty='l2',
dual=False, tol=0.0001, C=1.0, fit_intercept=True,
intercept_scaling=1, class_weight=None,
random_state=None, solver='liblinear', max_iter=100, multi_class='ovr', verbose=0, warm_start=False, n_jobs=1)

  • penalty='l2' : 字符串‘l1’或‘l2’,默認‘l2’夺姑。
    • 用來指定懲罰的基準(正則化參數(shù))拴泌。只有‘l2’支持‘newton-cg’锰霜、‘sag’和‘lbfgs’這三種算法。
    • 如果選擇‘l2’澎迎,solver參數(shù)可以選擇‘liblinear’、‘newton-cg’球凰、‘sag’和‘lbfgs’這四種算法拄氯;如果選擇‘l1’的話就只能用‘liblinear’算法。
  • dual=False : 對偶或者原始方法锦针。Dual只適用于正則化相為l2的‘liblinear’的情況荠察,通常樣本數(shù)大于特征數(shù)的情況下,默認為False奈搜。
  • C=1.0 : C為正則化系數(shù)λ的倒數(shù)悉盆,必須為正數(shù),默認為1馋吗。和SVM中的C一樣焕盟,值越小,代表正則化越強宏粤。
  • fit_intercept=True : 是否存在截距脚翘,默認存在。
  • intercept_scaling=1 : 僅在正則化項為‘liblinear’绍哎,且fit_intercept設置為True時有用来农。
  • solver='liblinear' : solver參數(shù)決定了我們對邏輯回歸損失函數(shù)的優(yōu)化方法,有四種算法可以選擇崇堰。
    • a) liblinear:使用了開源的liblinear庫實現(xiàn)沃于,內(nèi)部使用了坐標軸下降法來迭代優(yōu)化損失函數(shù)涩咖。
    • b) lbfgs:擬牛頓法的一種,利用損失函數(shù)二階導數(shù)矩陣即海森矩陣來迭代優(yōu)化損失函數(shù)繁莹。
    • c) newton-cg:也是牛頓法家族的一種檩互,利用損失函數(shù)二階導數(shù)矩陣即海森矩陣來迭代優(yōu)化損失函數(shù)。
    • d) sag:即隨機平均梯度下降咨演,是梯度下降法的變種闸昨,和普通梯度下降法的區(qū)別是每次迭代僅僅用一部分的樣本來計算梯度,適合于樣本數(shù)據(jù)多的時候薄风。

從上面的描述可以看出饵较,newton-cg、lbfgs和sag這三種優(yōu)化算法時都需要損失函數(shù)的一階或者二階連續(xù)導數(shù)村刨,因此不能用于沒有連續(xù)導數(shù)的L1正則化告抄,只能用于L2正則化。而liblinear通吃L1正則化和L2正則化嵌牺。

同時打洼,sag每次僅僅使用了部分樣本進行梯度迭代,所以當樣本量少的時候不要選擇它逆粹,而如果樣本量非常大募疮,比如大于10萬,sag是第一選擇僻弹。但是sag不能用于L1正則化阿浓,所以當你有大量的樣本,又需要L1正則化的話就要自己做取舍了蹋绽。要么通過對樣本采樣來降低樣本量芭毙,要么回到L2正則化。

但是liblinear也有自己的弱點卸耘!我們知道退敦,邏輯回歸有二元邏輯回歸和多元邏輯回歸。對于多元邏輯回歸常見的有one-vs-rest(OvR)和many-vs-many(MvM)兩種蚣抗。而MvM一般比OvR分類相對準確一些侈百。而liblinear只支持OvR,不支持MvM翰铡,這樣如果我們需要相對精確的多元邏輯回歸時钝域,就不能選擇liblinear了。也意味著如果我們需要相對精確的多元邏輯回歸不能使用L1正則化了锭魔。

  • multi_class='ovr' : 分類方式例证。ovr即one-vs-rest(OvR),multinomial是many-vs-many(MvM)赂毯。如果是二元邏輯回歸战虏,ovr和multinomial并沒有任何區(qū)別拣宰,區(qū)別主要在多元邏輯回歸上党涕。
    ovr不論是幾元回歸烦感,都當成二元回歸來處理。mvm從從多個類中每次選兩個類進行二元回歸膛堤。如果總共有T類手趣,需要T(T-1)/2次分類。
    OvR相對簡單肥荔,但分類效果相對略差(大多數(shù)樣本分布情況)绿渣。而MvM分類相對精確,但是分類速度沒有OvR快燕耿。
    如果選擇了ovr中符,則4種損失函數(shù)的優(yōu)化方法liblinear,newton-cg,lbfgs和sag都可以選擇伶丐。但是如果選擇了multinomial,則只能選擇newton-cg, lbfgs和sag了怎炊。
  • class_weight=None : 類型權(quán)重參數(shù)亚亲。用于標示分類模型中各種類型的權(quán)重。默認不輸入档插,即所有的分類的權(quán)重一樣。
    • 選擇‘balanced’自動根據(jù)y值計算類型權(quán)重亚再。
    • 自己設置權(quán)重郭膛,格式:{class_label: weight}。例如0,1分類的er'yuan二元模型氛悬,設置class_weight={0:0.9, 1:0.1}则剃,這樣類型0的權(quán)重為90%,而類型1的權(quán)重為10%如捅。
  • random_state=None : 隨機數(shù)種子棍现,默認為無。僅在正則化優(yōu)化算法為sag,liblinear時有用伪朽。
  • max_iter=100 : 算法收斂的最大迭代次數(shù)轴咱。
    tol=0.0001 : 迭代終止判據(jù)的誤差范圍。
  • verbose=0 : 日志冗長度int:冗長度烈涮;0:不輸出訓練過程朴肺;1:偶爾輸出; >1:對每個子模型都輸出
  • warm_start=False : 是否熱啟動坚洽,如果是戈稿,則下一次訓練是以追加樹的形式進行(重新使用上一次的調(diào)用作為初始化)。布爾型讶舰,默認False鞍盗。
  • n_jobs=1 : 并行數(shù)需了,int:個數(shù);-1:跟CPU核數(shù)一致般甲;1:默認值肋乍。

參考代碼

import numpy as np
from sklearn import linear_model, datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import cross_val_score
 
# 1.加載數(shù)據(jù)
iris = datasets.load_iris()
X = iris.data[:, :2]  # 使用前兩個特征
Y = iris.target

# 2.拆分測試集、訓練集敷存。
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=0)
# 設置隨機數(shù)種子墓造,以便比較結(jié)果。
 
# 3.標準化特征值
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)
num = 0
 
# 4. 訓練邏輯回歸模型
logreg = linear_model.LogisticRegression(penalty='l2',C=1e5,multi_class="ovr")
logreg.fit(X_train_std, Y_train)
 
# 5. 預測
predic = logreg.predict(X_test_std)
# p = np.mean(predic == Y_test)
for i in X_test_std:
  print(i,Y_test[num],predic[num])
  num += 1
prepro = logreg.predict_proba(X_test_std)

acc = logreg.score(X_test_std,Y_test)
print(prepro)

scores = cross_val_score(logreg,X_train_std,Y_train)
print(np.mean(scores))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锚烦,一起剝皮案震驚了整個濱河市觅闽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涮俄,老刑警劉巖蛉拙,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異彻亲,居然都是意外死亡孕锄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門睹栖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來硫惕,“玉大人,你說我怎么就攤上這事野来∧粘” “怎么了?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵曼氛,是天一觀的道長豁辉。 經(jīng)常有香客問我,道長舀患,這世上最難降的妖魔是什么徽级? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮聊浅,結(jié)果婚禮上餐抢,老公的妹妹穿的比我還像新娘。我一直安慰自己低匙,他們只是感情好旷痕,可當我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著顽冶,像睡著了一般欺抗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上强重,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天绞呈,我揣著相機與錄音贸人,去河邊找鬼。 笑死佃声,一個胖子當著我的面吹牛艺智,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播秉溉,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼力惯,長吁一口氣:“原來是場噩夢啊……” “哼碗誉!你這毒婦竟也來了召嘶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤哮缺,失蹤者是張志新(化名)和其女友劉穎弄跌,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尝苇,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡铛只,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了糠溜。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淳玩。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖非竿,靈堂內(nèi)的尸體忽然破棺而出蜕着,到底是詐尸還是另有隱情,我是刑警寧澤红柱,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布承匣,位于F島的核電站,受9級特大地震影響锤悄,放射性物質(zhì)發(fā)生泄漏韧骗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一零聚、第九天 我趴在偏房一處隱蔽的房頂上張望袍暴。 院中可真熱鬧,春花似錦隶症、人聲如沸政模。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽览徒。三九已至,卻和暖如春颂龙,著一層夾襖步出監(jiān)牢的瞬間习蓬,已是汗流浹背纽什。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留躲叼,地道東北人芦缰。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像枫慷,于是被迫代替她去往敵國和親让蕾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內(nèi)容