邏輯回歸--參數解釋+數據特征不獨熱編碼+訓練數據分布可視話
阿新 • • 發佈:2018-03-10
訓練 隨機 交叉 坐標 one 叠代優化 Coding plot 輸出
#-*- coding: utf-8 -*- ‘‘‘ 邏輯回歸參數: penalty:懲罰項,str類型,可選參數為l1和l2,默認為l2。用於指定懲罰項中使用的規範。newton-cg、sag和lbfgs求解算法只支持L2規範。L1G規範假設的是模型的參數滿足拉普拉斯分布,L2假設的模型參數滿足高斯分布,所謂的範式就是加上對參數的約束,使得模型更不會過擬合(overfit),但是如果要說是不是加了約束就會好,這個沒有人能回答,只能說,加約束的情況下,理論上應該可以獲得泛化能力更強的結果。 dual:對偶或原始方法,bool類型,默認為False。對偶方法只用在求解線性多核(liblinear)的L2懲罰項上。當樣本數量>樣本特征的時候,dual通常設置為False。 tol:停止求解的標準,float類型,默認為1e-4。就是求解到多少的時候,停止,認為已經求出最優解。 c:正則化系數λ的倒數,float類型,默認為1.0。必須是正浮點型數。像SVM一樣,越小的數值表示越強的正則化。 fit_intercept:是否存在截距或偏差,bool類型,默認為True。 intercept_scaling:僅在正則化項為”liblinear”,且fit_intercept設置為True時有用。float類型,默認為1。 class_weight:用於標示分類模型中各種類型的權重,可以是一個字典或者’balanced’字符串,默認為不輸入,也就是不考慮權重,即為None。如果選擇輸入的話,可以選擇balanced讓類庫自己計算類型權重,或者自己輸入各個類型的權重。舉個例子,比如對於0,1的二元模型,我們可以定義class_weight={0:0.9,1:0.1},這樣類型0的權重為90%,而類型1的權重為10%。如果class_weight選擇balanced,那麽類庫會根據訓練樣本量來計算權重。某種類型樣本量越多,則權重越低,樣本量越少,則權重越高。當class_weight為balanced時,類權重計算方法如下:n_samples / (n_classes * np.bincount(y))。n_samples為樣本數,n_classes為類別數量,np.bincount(y)會輸出每個類的樣本數,例如y=[1,0,0,1,1],則np.bincount(y)=[2,3]。 random_state:隨機數種子,int類型,可選參數,默認為無,僅在正則化優化算法為sag,liblinear時有用。 solver:優化算法選擇參數,只有五個可選參數,即newton-cg,lbfgs,liblinear,sag,saga。默認為liblinear。solver參數決定了我們對邏輯回歸損失函數的優化方法,有四種算法可以選擇,分別是: liblinear:使用了開源的liblinear庫實現,內部使用了坐標軸下降法來叠代優化損失函數。 lbfgs:擬牛頓法的一種,利用損失函數二階導數矩陣即海森矩陣來叠代優化損失函數。 newton-cg:也是牛頓法家族的一種,利用損失函數二階導數矩陣即海森矩陣來叠代優化損失函數。 sag:即隨機平均梯度下降,是梯度下降法的變種,和普通梯度下降法的區別是每次叠代僅僅用一部分的樣本來計算梯度,適合於樣本數據多的時候。 saga:線性收斂的隨機優化算法的的變重。 @author: soyo‘‘‘ import pandas as pd import numpy import matplotlib.pylab as plt from sklearn.linear_model import LogisticRegression from sklearn.cross_validation import train_test_split from sklearn.utils.extmath import cartesian data=pd.read_csv("/home/soyo/文檔/LogisticRegression.csv") #data是DF print data print data.head(5)# data["gre"].hist(color="red") data.hist(color="red") plt.show() print data.describe() # describe:給出數據的基本統計信息。std:標準差 print "******************1" print pd.crosstab(data[‘admit‘], data[‘rank‘],rownames=[‘admit‘]) # print pd.crosstab(data[‘rank‘], data[‘admit‘],rownames=[‘rank‘]) #也ok print "***************2" x_train,x_test,y_train,y_test=train_test_split(data.ix[:,1:],data.ix[:,0],test_size=0.1,random_state=1) #x:代表的是數據特征,y:代表的是類標(lable),都被隨機的拆分開做交叉驗證 print len(x_train),len(x_test) print x_train print y_train print "***********3" print y_test lr=LogisticRegression(C=0.2) #不用獨熱編碼,分類的準確率不變,C的降低提高了準確率 lr.fit(x_train,y_train) print "預測結果:" print lr.predict(x_test) print "真實label:" print numpy.array(y_test) print "邏輯回歸的準確率為:{0:.3f}%".format(lr.score(x_test, y_test))
admit gre gpa rank 0 0 380 3.61 3 1 1 660 3.67 3 2 1 800 4.00 1 3 1 640 3.19 4 4 0 520 2.93 4 5 1 760 3.00 2 6 1 560 2.98 1 7 0 400 3.08 2 8 1 540 3.39 3 9 0 700 3.92 2 10 0 800 4.00 4 11 0 440 3.22 1 12 1 760 4.00 1 13 0 700 3.08 2 14 1 700 4.00 1 15 0 480 3.44 3 16 0 780 3.87 4 17 0 360 2.56 3 18 0 800 3.75 2 19 1 540 3.81 1 20 0 500 3.17 3 21 1 660 3.63 2 22 0 600 2.82 4 23 0 680 3.19 4 24 1 760 3.35 2 25 1 800 3.66 1 26 1 620 3.61 1 27 1 520 3.74 4 28 1 780 3.22 2 29 0 520 3.29 1 .. ... ... ... ... 370 1 540 3.77 2 371 1 680 3.76 3 372 1 680 2.42 1 373 1 620 3.37 1 374 0 560 3.78 2 375 0 560 3.49 4 376 0 620 3.63 2 377 1 800 4.00 2 378 0 640 3.12 3 379 0 540 2.70 2 380 0 700 3.65 2 381 1 540 3.49 2 382 0 540 3.51 2 383 0 660 4.00 1 384 1 480 2.62 2 385 0 420 3.02 1 386 1 740 3.86 2 387 0 580 3.36 2 388 0 640 3.17 2 389 0 640 3.51 2 390 1 800 3.05 2 391 1 660 3.88 2 392 1 600 3.38 3 393 1 620 3.75 2 394 1 460 3.99 3 395 0 620 4.00 2 396 0 560 3.04 3 397 0 460 2.63 2 398 0 700 3.65 2 399 0 600 3.89 3 [400 rows x 4 columns] admit gre gpa rank 0 0 380 3.61 3 1 1 660 3.67 3 2 1 800 4.00 1 3 1 640 3.19 4 4 0 520 2.93 4 admit gre gpa rank count 400.000000 400.000000 400.000000 400.00000 mean 0.317500 587.700000 3.389900 2.48500 std 0.466087 115.516536 0.380567 0.94446 min 0.000000 220.000000 2.260000 1.00000 25% 0.000000 520.000000 3.130000 2.00000 50% 0.000000 580.000000 3.395000 2.00000 75% 1.000000 660.000000 3.670000 3.00000 max 1.000000 800.000000 4.000000 4.00000 ******************1 rank 1 2 3 4 admit 0 28 97 93 55 1 33 54 28 12 ***************2 360 40 gre gpa rank 268 680 3.46 2 204 600 3.89 1 171 540 2.81 3 62 640 3.67 3 385 420 3.02 1 85 520 2.98 2 389 640 3.51 2 307 580 3.51 2 314 540 3.46 4 278 680 3.00 4 65 600 3.59 2 225 720 3.50 3 229 720 3.42 2 18 800 3.75 2 296 560 3.16 1 286 800 3.22 1 272 680 3.67 2 117 700 3.72 2 258 520 3.51 2 360 520 4.00 1 107 480 3.13 2 67 620 3.30 1 234 800 3.53 1 246 680 3.34 2 354 540 3.78 2 222 480 3.02 1 106 700 3.56 1 310 560 4.00 3 270 640 3.95 2 312 660 3.77 3 .. ... ... ... 317 780 3.63 4 319 540 3.28 1 7 400 3.08 2 141 700 3.52 4 86 600 3.32 2 352 580 3.12 3 241 520 3.81 1 215 660 2.91 3 68 580 3.69 1 50 640 3.86 3 156 560 2.52 2 252 520 4.00 2 357 720 3.31 1 254 740 3.52 4 276 460 3.77 3 178 620 3.33 3 281 360 3.27 3 237 480 4.00 2 71 300 2.92 4 129 460 3.15 4 144 580 3.40 4 335 620 3.71 1 133 500 3.08 3 203 420 3.92 4 393 620 3.75 2 255 640 3.35 3 72 480 3.39 4 396 560 3.04 3 235 620 3.05 2 37 520 2.90 3 [360 rows x 3 columns] 268 1 204 1 171 0 62 0 385 0 85 0 389 0 307 0 314 0 278 1 65 0 225 1 229 1 18 0 296 0 286 1 272 1 117 0 258 0 360 1 107 0 67 0 234 1 246 0 354 1 222 1 106 1 310 0 270 1 312 0 .. 317 1 319 0 7 0 141 1 86 0 352 1 241 1 215 1 68 0 50 0 156 0 252 1 357 0 254 1 276 0 178 0 281 0 237 0 71 0 129 0 144 0 335 1 133 0 203 0 393 1 255 0 72 0 396 0 235 0 37 0 Name: admit, dtype: int64 ***********3 398 0 125 0 328 0 339 1 172 0 342 0 197 1 291 0 29 0 284 1 174 0 372 1 188 0 324 0 321 0 227 0 371 1 5 1 78 0 223 0 122 0 242 1 382 0 214 1 17 0 92 0 366 0 201 1 361 1 207 1 81 0 4 0 165 0 275 1 6 1 80 0 58 0 102 0 397 0 139 1 Name: admit, dtype: int64 預測結果: [0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 0 0 1] 真實label: [0 0 0 1 0 0 1 0 0 1 0 1 0 0 0 0 1 1 0 0 0 1 0 1 0 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1] 邏輯回歸的準確率為:0.750%
邏輯回歸--參數解釋+數據特征不獨熱編碼+訓練數據分布可視話