1. LogisticRegression()參數解析
2.?sklearn-GridSearchCV,CV調節超參使用方法
=====================================================================
C : float, optional (default=1.0)
Inverse of regularization strength; must be a positive float. Like in support vector machines, smaller values specify stronger regularization.
C為正則化系數λ的倒數,必須為正數,默認為1。和SVM中的C壹樣,值越小,代表正則化越強。
class_weight : {dict, ‘auto’}, optional 考慮類不平衡,類似於代價敏感
Over-/undersamples the samples of each class according to the given weights. If not given, all classes are supposed to have weight one. The ‘auto’ mode selects weights inversely proportional to class frequencies in the training set.
penalty : 正則化參數:’l1’,’l2’.默認是’l2’。
在調參時如果我們主要的目的只是為了解決過擬合,壹般penalty選擇L2正則化就夠了。但是如果選擇L2正則化發現還是過擬合,即預測效果差的時候,就可以考慮L1正則化。? 另外,如果模型的特征非常多,我們希望壹些不重要的特征系數歸零,從而讓模型系數稀疏化的話,也可以使用L1正則化。
penalty參數的選擇會影響我們損失函數優化算法的選擇。即參數solver的選擇。
solver: 邏輯回歸損失函數的優化方法,有四種算法供選擇
‘newton-cg’:坐標軸下降法來叠代優化損失函數?
‘lbfgs’:, ‘liblinear’:牛頓法變種?
‘sag’:隨機梯度下降
其中‘newton-cg’, ‘lbfgs’, ‘sag’只適用於L2懲罰項的優化,liblinear兩種都適用。因為L1正則化的損失函數不是連續可導的,而{‘newton-cg’, ‘lbfgs’,‘sag’}這三種優化算法時都需要損失函數的壹階或者二階連續導數。而‘liblinear’並沒有這個依賴。
當樣本數目比較大時,使用sag效果較好,因為它只使用壹部分樣本進行訓練。
a) liblinear:使用了開源的liblinear庫實現,內部使用了坐標軸下降法來叠代優化損失函數。
b) lbfgs:擬牛頓法的壹種,利用損失函數二階導數矩陣即海森矩陣來叠代優化損失函數。
c) newton-cg:也是牛頓法家族的壹種,利用損失函數二階導數矩陣即海森矩陣來叠代優化損失函數。
d) sag:即隨機平均梯度下降,是梯度下降法的變種,和普通梯度下降法的區別是每次叠代僅僅用壹部分的樣本來計算梯度,適合於樣本數據多的時候。
小結:
multi_class?
{‘ovr’, ‘multinomial’}, default: ‘ovr’
OvR的思想很簡單,無論妳是多少元邏輯回歸,我們都可以看做二元邏輯回歸。multinomial相對復雜。
官網有個對比兩種分類方式的例子: 鏈接地址 。
class_weight :類型權重參數。
用於標示分類模型中各種類型的權重。默認不輸入,即所有的分類的權重壹樣。選擇‘balanced’自動根據y值計算類型權重。自己設置權重,格式:{class_label: weight}。例如0,1分類的er'yuan二元模型,設置class_weight={0:0.9, 1:0.1},這樣類型0的權重為90%,而類型1的權重為10%。
n_jobs=1?: 並行數
int:個數;-1:跟CPU核數壹致;1:默認值。
其他參數:
dual=False: 對偶或者原始方法。Dual只適用於正則化相為l2的‘liblinear’的情況,通常樣本數大於特征數的情況下,默認為False。
fit_intercept=True: 是否存在截距,默認存在。
intercept_scaling=1: 僅在正則化項為‘liblinear’,且fit_intercept設置為True時有用。
max_iter=100: 算法收斂的最大叠代次數。
tol=0.0001: 叠代終止判據的誤差範圍。
verbose=0: 日誌冗長度int:冗長度;0:不輸出訓練過程;1:偶爾輸出; >1:對每個子模型都輸出
warm_start=False: 是否熱啟動,如果是,則下壹次訓練是以追加樹的形式進行(重新使用上壹次的調用作為初始化)。布爾型,默認False。
LogisticRegression類的常用方法
fit(X, y, sample_weight=None)
擬合模型,用來訓練LR分類器,其中X是訓練樣本,y是對應的標記向量
返回對象,self。
fit_transform(X, y=None, **fit_params)
fit與transform的結合,先fit後transform。返回X_new:numpy矩陣。
predict(X)
用來預測樣本,也就是分類,X是測試集。返回array。
predict_proba(X)
輸出分類概率。返回每種類別的概率,按照分類類別順序給出。如果是多分類問題,multi_class="multinomial",則會給出樣本對於每種類別的概率。
返回array-like。
score(X, y, sample_weight=None)
返回給定測試集合的平均準確率(mean accuracy),浮點型數值。
對於多個分類返回,則返回每個類別的準確率組成的哈希矩陣。
上述內容匯總自不同網站,但多數內容來自於這個鏈接:/p/e51e92a01a9c
-----------------------------------------------------------------------------------------------
其他
sklearn-GridSearchCV,CV調節超參使用方法:/u012969412/article/details/72973055
GridSearchCV 簡介:
GridSearchCV,它存在的意義就是自動調參,只要把參數輸進去,就能給出最優化的結果和參數。但是這個方法適合於小數據集,壹旦數據的量級上去了,很難得出結果。這個時候就是需要動腦筋了。數據量比較大的時候可以使用壹個快速調優的方法——坐標下降。它其實是壹種貪心算法:拿當前對模型影響最大的參數調優,直到最優化;再拿下壹個影響最大的參數調優,如此下去,直到所有的參數調整完畢。這個方法的缺點就是可能會調到局部最優而不是全局最優,但是省時間省力,巨大的優勢面前,還是試壹試吧,後續可以再拿bagging再優化。回到sklearn裏面的GridSearchCV,GridSearchCV用於系統地遍歷多種參數組合,通過交叉驗證確定最佳效果參數。
GridSearchCV官方網址: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html
常用參數解讀:
estimator :所使用的分類器,如estimator=RandomForestClassifier(min_samples_split=100,min_samples_leaf=20,max_depth=8,max_features='sqrt',random_state=10), 並且傳入除需要確定最佳的參數之外的其他參數。每壹個分類器都需要壹個scoring參數,或者score方法。
param_grid :值為字典或者列表,即需要最優化的參數的取值,param_grid =param_test1,param_test1 = {'n_estimators':range(10,71,10)}。
scoring : 準確度評價標準,默認None,這時需要使用score函數;或者如scoring='roc_auc',根據所選模型不同,評價準則不同。字符串(函數名),或是可調用對象,需要其函數簽名形如:scorer(estimator, X, y);如果是None,則使用estimator的誤差估計函數。scoring參數選擇如下:
參考地址: http://scikit-learn.org/stable/modules/model_evaluation.html
cv? :交叉驗證參數,默認None,使用三折交叉驗證。指定fold數量,默認為3,也可以是yield訓練/測試數據的生成器。
refit? :默認為True,程序將會以交叉驗證訓練集得到的最佳參數,重新對所有可用的訓練集與開發集進行,作為最終用於性能評估的最佳模型參數。即在搜索參數結束後,用最佳參數結果再次fit壹遍全部數據集。
iid :默認True,為True時,默認為各個樣本fold概率分布壹致,誤差估計為所有樣本之和,而非各個fold的平均。
verbose :日誌冗長度,int:冗長度,0:不輸出訓練過程,1:偶爾輸出,>1:對每個子模型都輸出。
n_jobs: ?並行數,int:個數,-1:跟CPU核數壹致, 1:默認值。
pre_dispatch :指定總***分發的並行任務數。當n_jobs大於1時,數據將在每個運行點進行復制,這可能導致OOM,而設置pre_dispatch參數,則可以預先劃分總***的job數量,使數據最多被復制pre_dispatch次
常用方法:
grid.fit():運行網格搜索
grid_scores_:給出不同參數情況下的評價結果
best_params_:描述了已取得最佳結果的參數的組合
best_score_:成員提供優化過程期間觀察到的最好的評分