15_岭回归-Ridge、岭回归API、线性回归和岭回归的对别;逻辑回归、sigmoid函数、逻辑回归公式、损失函数、逻辑回归API、逻辑回归案例、逻辑回归的优缺点、逻辑回归 VS 线性回归等
1、嶺回歸
嶺回歸是一種專用于共線性數(shù)據(jù)分析的有偏估計(jì)回歸方法,實(shí)質(zhì)上是一種改良的最小二乘估計(jì)法,通過放棄最小二乘法的無偏性,以損失部分信息、降低精度為代價(jià)獲得回歸系數(shù)更為符合實(shí)際、更可靠的回歸方法,對病態(tài)數(shù)據(jù)的擬合要強(qiáng)于最小二乘法。
1.1 Ridge線性回歸sklearn API
sklearn.linear_model.Ridge
class sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True, normalize=False, copy_X=True, max_iter=None, tol=0.001, solver='auto', random_state=None) 帶有L2正則化的線性最小二乘法。該模型求解回歸模型,其中損失函數(shù)是線性最小二乘函數(shù),并且正則化由l2范數(shù)給出。 也稱為Ridge回歸或Tikhonov正則化。 該估計(jì)器具有對多變量回歸的內(nèi)置支持(即,當(dāng)y是形狀的2d陣列[n_samples,n_targets]時(shí))。參數(shù): alpha:{float,array-like},shape(n_targets)正則化強(qiáng)度; 必須是正浮點(diǎn)數(shù)。 正則化改善了問題的條件并減少了估計(jì)的方差。 較大的值指定較強(qiáng)的正則化。 Alpha對應(yīng)于其他線性模型(如Logistic回歸或LinearSVC)中的C^-1。 如果傳遞數(shù)組,則假定懲罰被特定于目標(biāo)。 因此,它們必須在數(shù)量上對應(yīng)。 copy_X:boolean,可選,默認(rèn)為True如果為True,將復(fù)制X; 否則,它可能被覆蓋。 fit_intercept:boolean是否計(jì)算此模型的截距。 如果設(shè)置為false,則不會在計(jì)算中使用截距(例如,數(shù)據(jù)預(yù)期已經(jīng)居中)。 max_iter:int,可選共軛梯度求解器的最大迭代次數(shù)。 對于'sparse_cg'和'lsqr'求解器,默認(rèn)值由scipy.sparse.linalg確定。 對于'sag'求解器,默認(rèn)值為1000。 normalize:boolean,可選,默認(rèn)為False如果為真,則回歸X將在回歸之前被歸一化。 當(dāng)fit_intercept設(shè)置為False時(shí),將忽略此參數(shù)。 當(dāng)回歸量歸一化時(shí),注意到這使得超參數(shù)學(xué)習(xí)更加魯棒,并且?guī)缀醪灰蕾囉跇颖镜臄?shù)量。 相同的屬性對標(biāo)準(zhǔn)化數(shù)據(jù)無效。 然而,如果你想標(biāo)準(zhǔn)化,請?jiān)谡{(diào)用normalize = False訓(xùn)練估計(jì)器之前,使用preprocessing.StandardScaler處理數(shù)據(jù)。 solver:{'auto','svd','cholesky','lsqr','sparse_cg','sag'}用于計(jì)算的求解方法:'auto'根據(jù)數(shù)據(jù)類型自動選擇求解器。'svd'使用X的奇異值分解來計(jì)算Ridge系數(shù)。對于奇異矩陣比'cholesky'更穩(wěn)定。'cholesky'使用標(biāo)準(zhǔn)的scipy.linalg.solve函數(shù)來獲得閉合形式的解。'sparse_cg'使用在scipy.sparse.linalg.cg中找到的共軛梯度求解器。作為迭代算法,這個(gè)求解器比大規(guī)模數(shù)據(jù)(設(shè)置tol和max_iter的可能性)的“cholesky”更合適。'lsqr'使用專用的正則化最小二乘常數(shù)scipy.sparse.linalg.lsqr。它是最快的,但可能不是在舊的scipy版本可用。它還使用迭代過程。'sag'使用隨機(jī)平均梯度下降。它也使用迭代過程,并且當(dāng)n_samples和n_feature都很大時(shí),通常比其他求解器更快。注意,“sag”快速收斂僅在具有近似相同尺度的特征上被保證。您可以使用sklearn.preprocessing的縮放器預(yù)處理數(shù)據(jù)。所有最后四個(gè)求解器支持密集和稀疏數(shù)據(jù)。但是,當(dāng)fit_intercept為True時(shí),只有'sag'支持稀疏輸入。 新版本0.17支持:隨機(jī)平均梯度下降解算器。 tol:float解的精度 random_state : int seed,RandomState實(shí)例或None(默認(rèn))偽隨機(jī)數(shù)生成器的種子,當(dāng)混洗數(shù)據(jù)時(shí)使用。僅用于'sag'求解器。最新版本0.17:random_sate支持隨機(jī)平均漸變。屬性: coef_:array,shape(n_features,)或(n_targets,n_features)權(quán)重向量。 intercept_:float | array,shape =(n_targets,)決策函數(shù)的獨(dú)立項(xiàng),即截距。如果fit_intercept n_iter_:array或None,shape(n_targets,)每個(gè)目標(biāo)的實(shí)際迭代次數(shù)。 僅適用于sag和lsqr求解器。其他求解器將返回None。在版本0.17中出現(xiàn)。方法: fit(self, X, y[, sample_weight]) : Fit Ridge回歸模型 get_params(self[, deep]) : 獲取此估計(jì)器的參數(shù)。 predict(self, X) : 使用線性模型進(jìn)行預(yù)測 score(self, X, y[, sample_weight]) : 返回預(yù)測的確定系數(shù)R ^ 2 set_params(self, \*\*params) : 設(shè)置estimator的參數(shù)案例:
# -*- coding: utf-8 -*-from sklearn.linear_model import Ridge import numpy as npn_samples, n_features = 10, 5 rng = np.random.RandomState(0) y = rng.randn(n_samples) print(y)print("---------------------------------")X = rng.randn(n_samples, n_features) print(X)print("---------------------------------") clf = Ridge(alpha=1.0) clf.fit(X, y) print(clf.coef_)輸出結(jié)果:
[ 1.76405235 0.40015721 0.97873798 2.2408932 1.86755799 -0.977277880.95008842 -0.15135721 -0.10321885 0.4105985 ] --------------------------------- [[ 0.14404357 1.45427351 0.76103773 0.12167502 0.44386323][ 0.33367433 1.49407907 -0.20515826 0.3130677 -0.85409574][-2.55298982 0.6536186 0.8644362 -0.74216502 2.26975462][-1.45436567 0.04575852 -0.18718385 1.53277921 1.46935877][ 0.15494743 0.37816252 -0.88778575 -1.98079647 -0.34791215][ 0.15634897 1.23029068 1.20237985 -0.38732682 -0.30230275][-1.04855297 -1.42001794 -1.70627019 1.9507754 -0.50965218][-0.4380743 -1.25279536 0.77749036 -1.61389785 -0.21274028][-0.89546656 0.3869025 -0.51080514 -1.18063218 -0.02818223][ 0.42833187 0.06651722 0.3024719 -0.63432209 -0.36274117]] --------------------------------- [ 0.51088991 0.03729032 -0.65075201 0.0930311 0.93380887]1.2 線性回歸 LinearRegression與Ridge對比
嶺回歸: 回歸得到的回歸系數(shù)更符合實(shí)際,更可靠。另外,能讓估計(jì)參數(shù)的波動范圍變小,變的更穩(wěn)定。在存在病態(tài)數(shù)據(jù)偏多的研究中有較大的實(shí)用價(jià)值。
2 分類算法–邏輯回歸
邏輯回歸,用于表達(dá)某件事情發(fā)生的可能性
通過上面的圖獲得:
還比如還可以做以下事情:
1、一封郵件是垃圾郵件的可能性(是,不是)
2、你購買一件商品的可能性(買、不買)
3、廣告被點(diǎn)擊的可能性(點(diǎn)、不點(diǎn))
通過上圖的數(shù)據(jù),獲得上面4個(gè)方面的信息,就可以使用邏輯回歸。
邏輯回歸是解決二分類問題的利器
2.1 sigmoid函數(shù)
2.2 邏輯回歸公式
輸出:[0,1]區(qū)間的概率值,默認(rèn)0.5作為閥值
注:g(z)為sigmoid函數(shù)
2.3 邏輯回歸的損失函數(shù)、優(yōu)化(了解)
與線性回歸原理相同,但由于是分類問題,損失函數(shù)不一樣,只能通過梯度下降求解
對數(shù)似然損失函數(shù):
完整的損失函數(shù):
cost損失的值越小,那么預(yù)測的類別準(zhǔn)確度更高。
當(dāng)y=1時(shí):
2.4 二分類問題
二分類問題是指預(yù)測的y值只有兩個(gè)取值(0或1),二分類問題可以擴(kuò)展到多分類問題。例如:我們要做一個(gè)垃圾郵件過濾系統(tǒng),x是郵件的特征,預(yù)測的y值就是郵件的類別,是垃圾郵件還是正常郵件。對于類別我們通常稱為正類(positive class)和負(fù)類(negative class),垃圾郵件的例子中,正類就是正常郵件,負(fù)類就是垃圾郵件。
2.5 sklearn邏輯回歸API
sklearn.linear_model.LogisticRegression 可以用于概率預(yù)測、分類等。
邏輯回歸用于離散變量的分類,即它的輸出y的取值范圍是一個(gè)離散的集合,主要用于類的判別,而且其輸出值y表示屬于某一類的率。
Logistic Regression 邏輯回歸主要用于分類問題,常用來預(yù)測概率,如知道一個(gè)人的年齡、體重、身高、血壓等信息,預(yù)測其患心臟病的概率是多少。經(jīng)典的LR用于二分類問題(只有0,1兩類)。
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)注意:
(1)在多類別劃分中,如果’multi_class’選項(xiàng)設(shè)置為’ovr’,訓(xùn)練算法將使用one-vs-rest(OvR)方案;如果’multi_class’選項(xiàng)設(shè)置為‘多項(xiàng)式’,則使用交叉熵?fù)p失。
(2)這個(gè)類使用’liblinear’ 、‘library’、‘newton-cg’、‘sag’ 和 ‘lbfgs’ 求解器實(shí)現(xiàn)了規(guī)范化的logistic回歸。它的輸入矩陣可以是密集和稀疏的矩陣;使用C-ordered arrays or CSR matrices containing 64-bit floats可以獲得最佳的性能。
(3)‘newton-cg’、‘sag’、and 'lbfgs’求解器只支持原始公式下的L2正則化;liblinear求解器同時(shí)支持L1和L2的正則化,只對L2處罰采用對偶公式。
參數(shù)說明:
penalty :str,‘l1’ or ‘l2’,default : ‘l2’。用來指定懲罰的標(biāo)準(zhǔn),‘newton-cg’、‘sag’ 和 ‘lbfg’ solvers僅支持l2 懲罰。
dual :一個(gè)布爾值,默認(rèn)是False。選擇目標(biāo)函數(shù)為原始形式還是對偶形式。如果為True,則求解對偶形式(只是在penalty=‘l2’ 且solver='liblinear’有對偶形式);如果為False,則求解原始形式。(bool, default: False。Dual or primal formulation.Dual formulation只適用于 l2 penalty with liblinear solver.Prefer dual=False when n_samples > n_features)
注意: :將原始函數(shù)等價(jià)轉(zhuǎn)化為一個(gè)新函數(shù),該新函數(shù)稱為對偶函數(shù)。對偶函數(shù)比原始函數(shù)更易于優(yōu)化。
tol : float, default: 1-4。Tolerance for stopping criteria。(指定判斷迭代收斂與否的一個(gè)閾值)(優(yōu)化算法停止的條件。當(dāng)?shù)昂蟮暮瘮?shù)差值小于等于tol時(shí)就停止)
C : 一個(gè)浮點(diǎn)數(shù),默認(rèn):1.0,它指定了懲罰系數(shù)的倒數(shù)。如果它的值越小,則正則化越大。(逆正則化的強(qiáng)度,一定要是整數(shù),就像支持向量機(jī)一樣,較小的值有職責(zé)更好的正則化)
fit_intercept : 一個(gè)布爾值,默認(rèn)為True,指定是否存在截距,默認(rèn)存在。如果為False,則不會計(jì)算b值(模型會假設(shè)你的數(shù)據(jù)已經(jīng)中心化)。(選擇邏輯回歸模型中是否會有常數(shù)項(xiàng))
intercept_scaling : 一個(gè)浮點(diǎn)數(shù),只有當(dāng)solver=‘liblinear’才有意義。當(dāng)采用fit_intercept時(shí),相當(dāng)于人造一個(gè)特征出來,該特征恒為1,其權(quán)重為b。在計(jì)算正則化項(xiàng)的時(shí)候,該人造特征也被考慮了。因此為了降低人造特征的影響,需要提供 intercept_scaling。
class_weight : 一個(gè)字典或者字符串’balanced’。用于表示分類中各種類型的權(quán)重,可以不輸入,即不考慮權(quán)重。如果輸入的話可以調(diào)用balanced庫計(jì)算權(quán)重,或者是手動輸入各類的權(quán)重。比如對于0,1的二元模型,我們可以定義class_weight={0:0.9,1:0.1},這樣類型0的權(quán)重為90%,而類型1的權(quán)重為10%。
max_iter : 一個(gè)整數(shù),默認(rèn):100,指定最大迭代數(shù)。僅僅針對solvers為newton-cg,sag和lbfgs
random_state : 一個(gè)整數(shù)或者一個(gè)RandomState實(shí)例,或者None。(隨機(jī)數(shù)種子,默認(rèn)為無,僅在正則化優(yōu)化算法為sag,liblinear時(shí)有用)
如果為整數(shù),則它指定了隨機(jī)數(shù)生成器的種子。
如果為RandomState實(shí)例,則指定了隨機(jī)數(shù)生成器。
如果為None,則使用默認(rèn)的隨機(jī)數(shù)生成器。
solver : 一個(gè)字符串,指定了求解最優(yōu)化問題的算法,可以為如下的值。
‘newton-cg’:使用牛頓法。
‘lbfgs’:使用L-BFGS擬牛頓法。(擬牛頓法的一種。利用損失函數(shù)二階倒數(shù)矩陣即海森矩陣來迭代損失函數(shù))
‘liblinear’ :使用 liblinear。(使用坐標(biāo)軸下降法來迭代化損失函數(shù))
‘sag’:使用 Stochastic Average Gradient descent 算法。(隨機(jī)平均梯度下降。每次迭代僅僅用一部分的樣本來計(jì)算梯度,適合于樣本數(shù)據(jù)多的時(shí)候)
‘saga’
注意:
對于規(guī)模小的數(shù)據(jù)集,'liblearner’比較適用;對于規(guī)模大的數(shù)據(jù)集,'sag’比較適用。
對于多級分類的問題,只有’newton-cg’,‘sag’,‘saga’和’lbfgs’,libniear只支持多元邏輯回歸的OvR,不支持MvM,但MVM相對精確。(對于MvM,若模型有T類,每次在所有的T類樣本里面選擇兩類樣本出來,把所有輸出為該兩類的樣本放在一起,進(jìn)行二元回歸,得到模型參數(shù),一共需要T(T-1)/2次分類。)
‘newton-cg’、‘lbfgs’、‘sag’ 只處理penalty=‘12’的情況。相反的’liblinear’和’saga’處理L1懲罰。
multi_class : 一個(gè)字符串,指定對于多分類問題的策略,可以為如下的值。
‘ovr’ :采用 one-vs-rest 策略。
‘multinomial’:直接采用多分類邏輯回歸策略。
verbose : 一個(gè)正數(shù)。用于開啟/關(guān)閉迭代中間輸出的日志。(日志冗長度int:冗長度;0:不輸出訓(xùn)練過程;1:偶爾輸出; >1:對每個(gè)子模型都輸出)
warm_start : 一個(gè)布爾值,默認(rèn)False。是否熱啟動,如果為True,那么使用前一次訓(xùn)練結(jié)果繼續(xù)訓(xùn)練,否則從頭開始訓(xùn)練。
n_jobs : 并行數(shù),int : 個(gè)數(shù)。-1,跟CPU核數(shù)一致;1 : 默認(rèn)值。
返回值:
coef_ : 權(quán)重向量。shape (1, n_features) or (n_classes, n_features)
intercept : 截距。shape (1,) or (n_classes,)
n_iter_ : 所有類的實(shí)際迭代次數(shù)。shape (n_classes,) or (1, )
方法
fix(X,y[,sample_weight]):根據(jù)給出的訓(xùn)練數(shù)據(jù)來訓(xùn)練模型。用來訓(xùn)練LR分類器,其中X是訓(xùn)練樣本,y是對應(yīng)的標(biāo)記樣本。
predict(X):用模型進(jìn)行預(yù)測,返回預(yù)測值。(用來預(yù)測測試樣本的標(biāo)記,也就是分類。預(yù)測x的標(biāo)簽)
score(X,y[,sample_weight]):返回(X,y)上的預(yù)測準(zhǔn)確率(accuracy)。
predict_log_proba(X):返回一個(gè)數(shù)組,數(shù)組的元素依次是 X 預(yù)測為各個(gè)類別的概率的對數(shù)值。
predict_proba(X):返回一個(gè)數(shù)組,數(shù)組元素依次是 X 預(yù)測為各個(gè)類別的概率的概率值。
sparsify() : 將系數(shù)矩陣轉(zhuǎn)換為稀疏格式。
set_params(params) : 設(shè)置此估計(jì)器的參數(shù)。
get_params([deep]) : Get parameters for this estimator;
decision_function(X) : 預(yù)測樣本的置信度分?jǐn)?shù)。
densify() : 將系數(shù)矩陣轉(zhuǎn)換為密集陣列格式。
sklearn.linear_model.LogisticRegressionCV
相比于LogisticRegression,LogisticRegressionCV使用交叉驗(yàn)證來選擇正則化系數(shù)C。
2.6 LogisticRegression回歸案例
良/惡性乳腺癌腫瘤預(yù)測
原始數(shù)據(jù)的下載地址:https://archive.ics.uci.edu/ml/machine-learning-databases/
具體的是:https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data
內(nèi)容如下:
數(shù)據(jù)描述:
(1)699條樣本,共11列數(shù)據(jù),第一列用語檢索的id,后9列分別是與腫瘤相關(guān)的醫(yī)學(xué)特征,最后一列表示腫瘤類型的數(shù)值。
(2)包含16個(gè)缺失值,用”?”標(biāo)出。
2.6.1 良/惡性乳腺癌腫瘤分類流程
案例:
# -*- coding: utf-8 -*-from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.metrics import classification_report import pandas as pd import numpy as npdef logistic():"""邏輯回歸做二分類進(jìn)行癌癥預(yù)測(根據(jù)細(xì)胞的屬性特征):return:"""# 構(gòu)造列標(biāo)簽名字column = ['Sample code number','Clump Thickness', 'Uniformity of Cell Size','Uniformity of Cell Shape','Marginal Adhesion', 'Single Epithelial Cell Size','Bare Nuclei','Bland Chromatin','Normal Nucleoli','Mitoses','Class']# 讀取數(shù)據(jù)data = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data", names=column)print(data)# 缺失值進(jìn)行處理data = data.replace(to_replace='?', value=np.nan)data = data.dropna()# 進(jìn)行數(shù)據(jù)的分割x_train, x_test, y_train, y_test = train_test_split(data[column[1:10]], data[column[10]], test_size=0.25)# 產(chǎn)品標(biāo)準(zhǔn)化處理std = StandardScaler()x_train = std.fit_transform(x_train)x_test = std.transform(x_test)# 邏輯回歸預(yù)測lg = LogisticRegression(C=1.0)lg.fit(x_train,y_train)print(lg.coef_)y_predict = lg.predict(x_test)print("準(zhǔn)確率:",lg.score(x_test,y_test))print("召回率:", classification_report(y_test, y_predict, labels=[2, 4], target_names=["良性", "惡性"]))return Noneif __name__ == "__main__":logistic()輸出結(jié)果:
Sample code number Clump Thickness ... Mitoses Class 0 1000025 5 ... 1 2 1 1002945 5 ... 1 2 2 1015425 3 ... 1 2 3 1016277 6 ... 1 2 4 1017023 4 ... 1 2 .. ... ... ... ... ... 694 776715 3 ... 1 2 695 841769 2 ... 1 2 696 888820 5 ... 2 4 697 897471 4 ... 1 4 698 897471 4 ... 1 4 [699 rows x 11 columns] D:\installed\Anaconda3\lib\site-packages\sklearn\linear_model\logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.FutureWarning) [[ 1.48655604 -0.03632439 0.54633716 0.80247214 0.43417113 1.176206031.37521541 0.79215824 0.86304763]] 準(zhǔn)確率: 0.9590643274853801 召回率: precision recall f1-score support良性 0.97 0.97 0.97 117惡性 0.94 0.93 0.93 54accuracy 0.96 171macro avg 0.95 0.95 0.95 171 weighted avg 0.96 0.96 0.96 1712.7 邏輯回歸的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
1、實(shí)現(xiàn)簡單,廣泛的應(yīng)用于工業(yè)問題上;
2、分類時(shí)計(jì)算量非常小,速度很快,存儲資源低;
3、便利的觀測樣本概率分?jǐn)?shù);
4、對邏輯回歸而言,多重共線性并不是問題,它可以結(jié)合L2正則化來解決該問題;
5、適合需要得到一個(gè)分類概率的場景
缺點(diǎn):
1、當(dāng)特征空間很大時(shí),邏輯回歸的性能不是很好(看硬件能力)
2、容易欠擬合,一般準(zhǔn)確度不太高。
3、不能很好地處理大量多類特征或變量
4、只能處理兩分類問題(在此基礎(chǔ)上衍生出來的softmax可以用于多分類),且必須線性可分;
5、對于非線性特征,需要進(jìn)行轉(zhuǎn)換;
2.8 邏輯回歸 VS 線性回歸
線性回歸和邏輯回歸是2種經(jīng)典的算法。經(jīng)常被拿來做比較,下面整理了一些兩者的區(qū)別:
1、線性回歸只能用于回歸問題,邏輯回歸雖然名字叫回歸,但是更多用于分類問題
2、線性回歸要求因變量是連續(xù)性數(shù)值變量,而邏輯回歸要求因變量是離散的變量
3、線性回歸要求自變量和因變量呈線性關(guān)系,而邏輯回歸不要求自變量和因變量呈線性關(guān)系。
4、線性回歸可以直觀的表達(dá)自變量和因變量之間的關(guān)系,邏輯回歸則無法表達(dá)變量之間的關(guān)系。
注:
自變量: 主動操作的變量,可以看做“因變量”的原因
因變量: 因?yàn)椤白宰兞俊钡淖兓兓?#xff0c;可以看做“自變量”的結(jié)果。也是我們想要預(yù)測的結(jié)果。
2.9 多分類問題
邏輯回歸解決辦法:1V1,1Vall
softmax方法-邏輯回歸在多分類問題上的推廣
打個(gè)賞唄,您的支持是我堅(jiān)持寫好博文的動力
總結(jié)
以上是生活随笔為你收集整理的15_岭回归-Ridge、岭回归API、线性回归和岭回归的对别;逻辑回归、sigmoid函数、逻辑回归公式、损失函数、逻辑回归API、逻辑回归案例、逻辑回归的优缺点、逻辑回归 VS 线性回归等的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: API-String类、基本数据类型对象
- 下一篇: 59岁院士履新!怀进鹏出任教育部党组书记