1. 程式人生 > >邏輯回歸--參數解釋+數據特征不獨熱編碼+訓練數據分布可視話

邏輯回歸--參數解釋+數據特征不獨熱編碼+訓練數據分布可視話

訓練 隨機 交叉 坐標 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%

邏輯回歸--參數解釋+數據特征不獨熱編碼+訓練數據分布可視話