Sklearn 损失函数如何应用到_Sklearn全复习(下)(持续更新)
這是一篇根據(jù)我個(gè)人需要的復(fù)習(xí)筆記 本來想一篇寫下的結(jié)果發(fā)現(xiàn)太多了自己找起來都好累 干脆分成兩半 上半部分包括:Decision Tree/Random Forest/Preprocessing and Feature Engineering/PCA/Logistic Regression/Kmeans. 下半部分從SVM開始 還在整理中。
七、SVM
非常強(qiáng)(強(qiáng)學(xué)習(xí)器,線性分類非線性分類都能做、二分類多分類都能做、連續(xù)型變量的回歸也能做、無監(jiān)督的聚類也能做)
它在手寫識(shí)別數(shù)字和人臉識(shí)別中應(yīng)用廣泛,在文本和超 文本的分類中舉足輕重,因?yàn)镾VM可以大量減少標(biāo)準(zhǔn)歸納(standard inductive)和轉(zhuǎn)換設(shè)置(transductive settings)中對(duì)標(biāo)記訓(xùn)練實(shí)例的需求。除此之外,生物學(xué)和許多其他科學(xué)都是SVM的青睞者,SVM現(xiàn)在已經(jīng)廣泛被用于蛋白質(zhì)分類,現(xiàn) 在化合物分類的業(yè)界平均水平可以達(dá)到90%以上的準(zhǔn)確率。從學(xué)術(shù)的角度來看,SVM是最接近深度學(xué)習(xí)的機(jī)器學(xué)習(xí)算法。線性SVM可以看成是神經(jīng)網(wǎng)絡(luò)的單個(gè)神經(jīng)元(雖然損失函數(shù)與神經(jīng)網(wǎng)絡(luò)不同),非線性的SVM則與兩層的神經(jīng)網(wǎng)絡(luò)相當(dāng),非線性的SVM中如果添加多個(gè)核函數(shù),則可以模仿多層的神經(jīng)網(wǎng)絡(luò)。
SVM在干嘛?---選擇一條margin最大的decision boundary。(擁有更大邊際的決策邊界在分類中的泛化誤差更小,這邊際很小的情況,是一種模型在訓(xùn)練集上表現(xiàn)很好,卻在測(cè)試集上表現(xiàn)糟糕的情況,所以會(huì)“過擬合”。)過程分為:1)損失函數(shù);2)用拉格朗日對(duì)偶函數(shù)求解系數(shù)
圖片來自菜菜的sklearn公開課svm里面的class除了特別表明是線性的兩個(gè)類LinearSVC和LinearSVR之外,其他的所有類都是同時(shí)支持線性和非線性的。 NuSVC和NuSVC可以手動(dòng)調(diào)節(jié)支持向量的數(shù)目,其他參數(shù)都與最常用的SVC和SVR一致。注意OneClassSVM是無監(jiān)督的類。
class sklearn.svm.SVC (C=1.0, kernel=’rbf’, degree=3, gamma=’auto_deprecated’, coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=’ovr’, random_state=None)
先看decision boundary: 。在一組數(shù)據(jù)下,給定固定的w和b,
這個(gè)式子就可以是一條固定直線,在w和b不確定的狀況下,這個(gè)表達(dá)式就可以代表平面上的任意一條直線。在SVM中,我們就使用這個(gè)表達(dá)式來表示我們的決策邊界。我們的目標(biāo)是求解能夠讓邊際最大化的決策邊界,所以我們要求解參數(shù)向量w和截距b。參數(shù)向量w的方向必然是垂直于我們的決策邊界。以下黑不拉幾的圖來自我們鴨絨教授的notebook(我覺得很清楚)從MMC講起
linear 的classification的原理maximal margin classifierMMC的損失函數(shù)在MMC基礎(chǔ)上加penalty變成了SVCAs the penalty increases:Margin decreases;The number of support vectors decreases- from sklearn import svm
- clf = svm.SVC(kernel='linear',C=10**10)
- clf.fit(df[['X1','X2']], df['class'])
- clf.predict([[3., 3.] , [-3., -3.]])
- beta1,beta2 = clf.coef_[0]
- beta0 = clf.intercept_[0]
- M = 1/np.sqrt(beta1**2 + beta2**2) #Margin
- clf.support_ #support vectors indexes
- P = clf.decision_function(xy).reshape(axisx.shape) #重要接口decision_function,返回每個(gè)輸入的樣本所對(duì)應(yīng)的到?jīng)Q策邊界的距離
- 用plt里面contour畫 decision boundary
*PS. 畫decision boundary的函數(shù): matplotlib.axes.Axes.contour([X, Y,] Z, [levels]) Contour是我們專門用來繪制等高線的函數(shù)。等高線,本質(zhì)上是在二維圖像上表現(xiàn)三維圖像的一種形式,其中兩維X和Y是兩條坐標(biāo)軸上的取值,而Z表示高度。Contour就是將由X和Y構(gòu)成平面上的所有點(diǎn)中,高度一致的點(diǎn)連接成線段的函數(shù). 要注意的是,我們畫線需要重新創(chuàng)建網(wǎng)格,用網(wǎng)格上的點(diǎn),并不是用樣本點(diǎn)。制作網(wǎng)格用到函數(shù)meshgrid()
SVC的clf的接口
- Clf.predict(X)#根據(jù)決策邊界,對(duì)X中的樣本進(jìn)行分類,返回的結(jié)構(gòu)為n_samples
- clf.score(X,y)#返回給定測(cè)試數(shù)據(jù)和標(biāo)簽的平均準(zhǔn)確度
- clf.support_vectors_#返回支持向量
- clf.n_support_#返回每個(gè)類中支持向量的數(shù)目
下一個(gè)問題?非線性可分?jǐn)?shù)據(jù)怎么辦?
升維-Extended feature space-映射至多維空間再找decision boundary--核變換--kernel (比如rbf:高斯徑向基核函數(shù),本質(zhì)就是根據(jù)原有 feature創(chuàng)建出新的feature來升維)
進(jìn)入對(duì)偶問題和核函數(shù)。K()在這里是linear kernel 其實(shí)就是向量點(diǎn)積這實(shí)際上是一個(gè)rbf kernel的例子Kernel: a measure of the similarity of two observations(也就是兩個(gè)vector)
2.將損失函數(shù)的形態(tài)轉(zhuǎn)換為拉格朗日乘數(shù)形態(tài)
拉格朗日函數(shù)求解目標(biāo)原理解釋來自菜菜sklearn我們求解的參數(shù)和以及求解的超平面的存在,只與支持向量相關(guān),與其他樣本都無關(guān)。
目標(biāo)函數(shù)的最終形態(tài)對(duì)于新的樣本點(diǎn)的決策函數(shù),點(diǎn)是向量點(diǎn)積。鴨老師的筆記鴨老師的筆記3.非線性SVM與核函數(shù)
核技巧”(Kernel Trick),是一種能夠使用數(shù)據(jù)原始空間中的向量計(jì)算來表示升維后的空間中的點(diǎn)積結(jié)果的數(shù)學(xué)方式。具體表現(xiàn)為K(u,v) =
。而這個(gè)原始空間中的點(diǎn)積函數(shù),K(u,v)就被叫做“核函數(shù)”(Kernel Function)。畫對(duì)比圖的代碼不同的核函數(shù)在不同的數(shù)據(jù)集上的表現(xiàn)效果4. 什么時(shí)候選擇哪一個(gè)核函數(shù)?核函數(shù)在不同的數(shù)據(jù)集上的表現(xiàn)怎樣?
線性核函數(shù)和多項(xiàng)式核函數(shù)在非線性數(shù)據(jù)上表現(xiàn)會(huì)浮動(dòng),如果數(shù)據(jù)相對(duì)線性可分,則表現(xiàn)不錯(cuò),如果是像環(huán)形數(shù)據(jù)那樣徹底不可分的,則表現(xiàn)糟糕。在線性數(shù)據(jù)集上,線性核函數(shù)和多項(xiàng)式核函數(shù)即便有擾動(dòng)項(xiàng)也可以表現(xiàn)不錯(cuò),可見多項(xiàng)式核函數(shù)是雖然也可以處理非線性情況,但更偏向于線性的功能。Sigmoid核函數(shù)就比較尷尬了,它在非線性數(shù)據(jù)上強(qiáng)于兩個(gè)線性核函數(shù),但效果明顯不如rbf,它在線性數(shù)據(jù)上完全比不上線性的核函數(shù)們,對(duì)擾動(dòng)項(xiàng)的抵抗也比較弱,所以它功能比較弱小,很少被用到。rbf,高斯徑向基核函數(shù)基本在任何數(shù)據(jù)集上都表現(xiàn)不錯(cuò),屬于比較萬能的核函數(shù)。根據(jù)經(jīng)驗(yàn),無論如何先試試看高斯徑向基核函數(shù),它適用于核轉(zhuǎn)換到很高的空間的情況,在各種情況下往往效果都很不錯(cuò),如果rbf效果不好,那我們?cè)僭囋嚳雌渌暮撕瘮?shù)。另外,多項(xiàng)式核函數(shù)多被用于圖像處理之中。
值得提到的是量綱問題:雖然SVM不能說是完全的距離類模型,但是它嚴(yán)重受到數(shù)據(jù)量綱的影響。尤其是poly和rbf。所以要先進(jìn)行數(shù)據(jù)的無量綱化。
5.調(diào)參
參數(shù)gamma就是表達(dá)式中的γ:γ越大,每個(gè)點(diǎn)的影響隨distance下降越快(影響范圍越小),“everyone becomes support vector”,會(huì)導(dǎo)致overfitting。(鴨老師的話我記得超清楚啊)
degree就是多項(xiàng)式核函數(shù)的次數(shù),參數(shù)coef0就是常數(shù)項(xiàng)。其中,高斯徑向基核函數(shù)受到gamma的影響,而多項(xiàng)式核函數(shù)受到全部三個(gè)參數(shù)的影響。
我們往往直接使用學(xué)習(xí)曲線或者網(wǎng)格搜索來幫助我們查找最佳的參數(shù)組合。
soft margins: 在不完全linear separable的數(shù)據(jù)上 allow points to be on the wrong side of the margin/separating hyperplane,并且懲罰分錯(cuò)的程度(點(diǎn)到它應(yīng)該所屬那一方的margin的距離),C就是懲罰系數(shù),用于權(quán)衡”訓(xùn)練樣本的正確分類“與”決策函數(shù)的邊際最大化“兩個(gè)不可同時(shí)完成的目標(biāo),希望找出一個(gè)平衡點(diǎn)來讓模型的效果最佳。
這時(shí)候誰是support vector呢?在兩條margin上以及中間,還有那些training error的點(diǎn),都是support vector。
從左到右C在變大,對(duì)training error的懲罰加重,training error的數(shù)目減少,support vector會(huì)減少,Margin decreases。能看出來隨著C變大,accuracy是先增大后減小的,通過學(xué)習(xí)曲線調(diào)參。multi-classification:
- clf = svm.SVC(kernel='linear',C=1,decision_function_shape='ovo')#one versus one
- clf = svm.SVC(kernel='linear',C=1,decision_function_shape='ovr') # one versus rest
八、SVM(下)
unbalanced是個(gè)挺大的問題,其一多數(shù)標(biāo)簽的學(xué)習(xí)效果更好,但往往我們關(guān)注的少數(shù)類別;其二模型的accuracy會(huì)失去意義。對(duì)于SVM來說,增加樣本總量并不合適(第一影響速度,第二其實(shí)你增加了很多對(duì)無意義的點(diǎn))
使用SVC的參數(shù):class_weight(本質(zhì)上這個(gè)權(quán)重加在了C身上,對(duì)兩類的懲罰就不一樣了,對(duì)少數(shù)類的懲罰小,對(duì)多數(shù)類的懲罰大,因此決策邊界就會(huì)被拉向少數(shù)類那一邊。用dictionary規(guī)定權(quán)重或者“balanced”模式)。或者使用fit的參數(shù)sample_weight(每個(gè)樣本在fit時(shí)的權(quán)重)。這兩個(gè)用一個(gè)就好。通常給少數(shù)樣本賦更大的權(quán)重,就是少數(shù)類被分錯(cuò)的懲罰更大,為避免懲罰,decision boundary就會(huì)移動(dòng)。
例如: wclf = svm.SVC(kernel='linear', class_weight={1: 10}) 少數(shù)類是1多數(shù)類是10.
加權(quán)重之后可以很好的捕捉到少數(shù)類。但是加了不同權(quán)重以后,accuracy會(huì)下降。因?yàn)闉榱烁鼫?zhǔn)確低捕捉到少數(shù)類,會(huì)誤傷多數(shù)類。如果我們的目的是模型整體的準(zhǔn)確率,那我們就要拒絕樣本平衡,使用class_weight被設(shè)置之前的模型。然而在現(xiàn)實(shí)中,將少數(shù)類判錯(cuò)(沒有捕捉到)這個(gè)代價(jià)是巨大的,我們希望不惜一切代價(jià)來捕獲少數(shù)類,或者希望捕捉出盡量多的少數(shù)類,那我們就必須使用class_weight設(shè)置后的模型。
下一個(gè)問題是評(píng)估指標(biāo),單純地追求捕捉出少數(shù)類,就會(huì)成本太高,而不顧及少數(shù)類,又會(huì)無法達(dá)成模型的效果。所以在現(xiàn)實(shí)中,我們往往在尋找捕獲少數(shù)類的能力和將多數(shù)類判錯(cuò)后需要付出的成本的平衡。如果一個(gè)模型在能夠盡量捕獲少數(shù)類的情況下,還能夠盡量對(duì)多數(shù)類判斷正確才是完美。We need Confusion Matrix.(略了 太熟悉了)
這里面True是少數(shù)類- Precision:”將多數(shù)類判錯(cuò)后所需付出成本“的衡量。我們抓少數(shù)抓的有多準(zhǔn)確(實(shí)際為真/預(yù)測(cè)為真)
- Recall/Sensitivity/TPR:在所有的少數(shù)類里面,我們抓住了多少
- 追求Precision還是Recall取決于,究竟是誤傷多數(shù)類的成本更高,還是無法捕捉少數(shù)類的代價(jià)更高。
- F-score:為了兼顧Precision和Recall。
- TNR:Specificity
- FPR:1-Specificity
Recall增加的時(shí)候,Precision的下降,表示更多的多數(shù)類被誤判了。我們希望理解,我每判斷正確一個(gè)少數(shù)類,就有多少個(gè)多數(shù)類會(huì)被判斷錯(cuò)誤。FPR(因?yàn)樗帜甘强偣驳亩鄶?shù)類個(gè)數(shù))正好可以幫助我們衡量這個(gè)能力的變化。我們可以使用Recall和FPR之間的平衡,來替代Recall和Precision之間的平衡,讓我們衡量模型在不同閾值下,盡量捕捉少數(shù)類的時(shí)候,誤傷多數(shù)類的情況如何變化,這就是我們的ROC曲線。
clf_proba = svm.SVC(kernel="linear",C=1.0,probability=True).fit(X,y) 這樣設(shè)置以后,我們就可以返回predict_proba,也就是概率預(yù)測(cè),我們就可以改變閾值來改變預(yù)測(cè)的分類了。
ROC曲線代表隨著Recall的不斷增加,FPR如何增加。我們希望隨著Recall的不斷提升,FPR增加得越慢越好,這說明我們可以盡量高效地捕捉出少數(shù)類,而不會(huì)將很多地多數(shù)類判斷錯(cuò)誤。所以,我們希望看到的圖像是,縱坐標(biāo)急速上升,橫坐標(biāo)緩慢增長(zhǎng),也就是在整個(gè)圖像左上方的一條弧線。這代表模型的效果很不錯(cuò),擁有較好的捕獲少數(shù)類的能力。ROC曲線通常是凸型的,所以越靠近左上角越好,也就是線下面積AUC越大。那么最好的閾值在哪呢?其實(shí)是Recall和FPR差距最大的點(diǎn),就是ROC曲線上面離左上角最近的點(diǎn)。這個(gè)點(diǎn),又叫做約登指數(shù)。
- from sklearn.metrics import roc_curve
- FPR, recall, thresholds = roc_curve(y,clf_proba.decision_function(X), pos_label=1)
- from sklearn.metrics import roc_auc_score as AUC
- area = AUC(y,clf_proba.decision_function(X))
- 然后畫圖就好 比如:plt.plot(FPR, recall, color='red',label='ROC curve (area = %0.2f)' % area)
class sklearn.svm.LinearSVC (penalty=’l2’, loss=’squared_hinge’, dual=True, tol=0.0001, C=1.0, multi_class=’ovr’,fit_intercept=True, intercept_scaling=1, class_weight=None, verbose=0, random_state=None, max_iter=1000) 線性支持向量機(jī)其實(shí)與SVC類中選擇"linear"作為核函數(shù)的功能類似,但是其背后的實(shí)現(xiàn)庫是liblinear而不是libsvm,這使得在線性數(shù)據(jù)上,linearSVC的運(yùn)行速度比SVC中的“l(fā)inear”核函數(shù)要快,不過兩者的運(yùn)行結(jié)果相似。
九、Linear Regression
首先,線性回歸的核心是預(yù)測(cè)連續(xù)型變量,源于統(tǒng)計(jì)分析。以下理解基于矩陣/線代角度。
- 損失函數(shù):殘差平方和 RSS(Residual Sum of Squares)
- 求解方法:最小二乘法(RSS對(duì)參數(shù)矩陣求導(dǎo)一階導(dǎo)=0)(無偏估計(jì)需要y服從正態(tài)分布)
- 線性回歸的性能,往往取決于數(shù)據(jù)本身,而并非是我們的調(diào)參能力,線性回歸也因此對(duì)數(shù)據(jù)有著很高的要求。
- from sklearn.linear_model import LinearRegression as LR
- reg = LR().fit(Xtrain, Ytrain)
- yhat = reg.predict(Xtest)
2. 模型評(píng)估指標(biāo)
(1)預(yù)測(cè)數(shù)值
- 均方誤差MSE(Mean Squared error)用MSE類或者cross_val_score
- from sklearn.metrics import mean_squared_error as MSE
- MSE(yhat,Ytest)
- cross_val_score(reg,X,y,cv=10,scoring="neg_mean_squared_error")
- 絕對(duì)均值誤差MAE(Mean Absolute error)用法和MSE基本一致
(2)擬合信息
- R方:我們捕獲到的信息量/y所含有的信息總量
- from sklearn.metrics import r2_score
- r2_score(yhat,Ytest) ####要注意輸入的順序
- 或者r2 = reg.score(Xtest,Ytest)
- 或者cross_val_score(reg,X,y,cv=10,scoring="r2").mean()
當(dāng)MSE不高,但是我們的R方也不高的時(shí)候,說明我們的模型比較好地?cái)M合了一部分?jǐn)?shù)據(jù)的數(shù)值,卻沒有能正確擬合數(shù)據(jù)的分布。如果有更多的數(shù)據(jù)進(jìn)入我們的模型,那數(shù)據(jù)標(biāo)簽被預(yù)測(cè)錯(cuò)誤的可能性是非常大的。
3. 解決多重共線性問題:Ridge與Lasso
我們都知道多重共線性毀掉回歸。原因非滿秩矩陣無法求逆,會(huì)毀掉最小二乘法。精確相關(guān)關(guān)系和高度相關(guān)關(guān)系并稱為"多重共線性"。在多重共線性下,模型無法建立,或者模型不可用。一個(gè)矩陣如果要滿秩,則要求矩陣中每個(gè)向量之間不能存在多重共線性,這也構(gòu)成了線性回歸算法對(duì)于特征矩陣的要求。
A:精確相關(guān) B:高度相關(guān) C:就還挺正常那么想要解決多重共線性的問題,最常用的辦法就是在原有的線性回歸的基礎(chǔ)上進(jìn)行改進(jìn),就有了嶺回歸,Lasso和彈性網(wǎng)。
1) Ridge: 嶺回歸在多元線性回歸的損失函數(shù)上加上了正則項(xiàng),表達(dá)為系數(shù)的L2范式(即系數(shù)的平方項(xiàng))乘以正則化系數(shù)α。這時(shí)只要α取值ok,那么逆矩陣永遠(yuǎn)存在,也就是有解。如此,正則化系數(shù)就非常爽快地避免了”精確相關(guān)關(guān)系“帶來的影響,至少最小二乘法在存在的情況下是一定可以使用了。對(duì)于存在”高度相關(guān)關(guān)系“的矩陣,我們也可以通過調(diào)α,從而讓逆矩陣變小,以此控制參數(shù)向量的偏移。當(dāng)α越大,模型越不容易受到共線性的影響。
用于判斷有無多重共線性---我們?cè)诳吹捷^低的擬合程度時(shí),在統(tǒng)計(jì)學(xué)中,我們會(huì)通過VIF或者各種檢驗(yàn)來判斷數(shù)據(jù)是否存在共線性,然而在機(jī)器學(xué)習(xí)中,我們可以使用模型來判斷——如果一個(gè)數(shù)據(jù)集在嶺回歸中使用各種正則化參數(shù)取值下模型表現(xiàn)沒有明顯上升(比如出現(xiàn)持平或者下降),則說明數(shù)據(jù)沒有多重共線性,頂多是特征之間有一些相關(guān)性。反之,如果一個(gè)數(shù)據(jù)集在嶺回歸的各種正則化參數(shù)取值下表現(xiàn)出明顯的上升趨勢(shì),則說明數(shù)據(jù)存在多重共線性。
- from sklearn.linear_model import Ridge, LinearRegression, Lasso
- reg = Ridge(alpha=1).fit(Xtrain,Ytrain)
- reg.score(Xtest,Ytest)
- eg加利福尼亞房?jī)r(jià)數(shù)據(jù)集上的學(xué)習(xí)曲線:嶺回歸的結(jié)果(比線性回歸)輕微上升,隨后驟降。可以說,加利佛尼亞房屋價(jià)值數(shù)據(jù)集帶有很輕微的一部分共線性,這種共線性被正則化參數(shù)消除后,模型的效果提升了一點(diǎn)點(diǎn),但是對(duì)于整個(gè)模型而言是杯水車薪。在過了控制多重共線性的點(diǎn)后,模型的效果飛速下降,顯然是正則化的程度太重,擠占了參數(shù)本來的估計(jì)空間。從這個(gè)結(jié)果可以看出,加利佛尼亞數(shù)據(jù)集的核心問題不在于多重共線性,嶺回歸不能夠提升模型表現(xiàn)。
- 如何選取合適的α?第一種方法是嶺跡圖。每一條線是一個(gè)系數(shù)w,嶺跡圖認(rèn)為,線條交叉越多,則說明特征之間的多重共線性越高。我們應(yīng)該選擇系數(shù)較為平穩(wěn)的喇叭口所對(duì)應(yīng)的取值作為最佳取值。
- 但是現(xiàn)實(shí)中使用更多的是使用交叉驗(yàn)證來選擇最佳的正則化系數(shù):class sklearn.linear_model.RidgeCV (alphas=(0.1, 1.0, 10.0), fit_intercept=True, normalize=False, scoring=None,cv=None, gcv_mode=None, store_cv_values=False)
- Ridge_ = RidgeCV(alphas=np.arange(1,1001,100),store_cv_values=True).fit(X, y)
- Ridge_.score(X,y) #無關(guān)交叉驗(yàn)證的嶺回歸結(jié)果
- Ridge_.cv_values_.shape #調(diào)用所有交叉驗(yàn)證的結(jié)果
- Ridge_.cv_values_.mean(axis=0) #進(jìn)行平均后可以查看每個(gè)正則化系數(shù)取值下的交叉驗(yàn)證結(jié)果
- Ridge_.alpha_ #查看被選擇出來的最佳正則化系數(shù)
2)Lasso:Lasso無法解決特征之間”精確相關(guān)“的問題。當(dāng)我們使用最小二乘法求解線性回歸時(shí),如果線性回歸無解或者報(bào)除零錯(cuò)誤,換Lasso不能解決任何問題。Lasso核心作用還是特征選擇。
- from sklearn.linear_model import Ridge, LinearRegression, Lasso
- lasso_ = Lasso(alpha=0.01).fit(Xtrain,Ytrain)
- (lasso_.coef_*100).tolist()
- 比起嶺回歸,Lasso所帶的L1正則項(xiàng)對(duì)于系數(shù)的懲罰要重得多(敏感很多!),并且它會(huì)將系數(shù)壓縮至0,因此可以被用來做特征選擇。也因此,我們往往讓Lasso的正則化系數(shù)α在很小的空間中變動(dòng),以此來尋找最佳的正則化系數(shù)。
- from sklearn.linear_model import LassoCV
- alpharange = np.logspace(-10, -2, 200,base=10) #自己建立Lasso進(jìn)行alpha選擇的范圍,其實(shí)是形成10為底的指數(shù)函數(shù),#10**(-10)到10**(-2)次方
- lasso_ = LassoCV(alphas=alpharange #自行輸入的alpha的取值范圍,cv=5 #交叉驗(yàn)證的折數(shù)).fit(Xtrain, Ytrain)
- lasso_.alpha_ #查看被選擇出來的最佳正則化系數(shù)
- lasso_.coef_ #最佳正則化系數(shù)下獲得的模型的系數(shù)結(jié)果
- lasso_.score(Xtest,Ytest) #MSE
4. 非線性問題:多項(xiàng)式回歸
概括一下,對(duì)于回歸問題,數(shù)據(jù)若能分布為一條直線,則是線性的,否則是非線性。對(duì)于分類問題,數(shù)據(jù)分布若能使用一條直線來劃分類別,則是線性可分的,否則數(shù)據(jù)則是線性不可分的
對(duì)于分類模型來說,這是我們判斷模型是線性還是非線性的重要評(píng)判因素:線性模型的決策邊界是平行的直線,非線性模型的決策邊界是曲線或者交叉的直線。對(duì)分類問題而言,如果一個(gè)分類模型的決策邊界上自變量的最高次方為1,則我們稱這個(gè)模型是線性模型。
當(dāng)我們獲取數(shù)據(jù)時(shí),我們往往希望使用線性模型來對(duì)數(shù)據(jù)進(jìn)行最初的擬合(線性回歸用于回歸,邏輯回歸用于分類),如果線性模型表現(xiàn)良好,則說明數(shù)據(jù)本身很可能是線性的或者線性可分的,如果線性模型表現(xiàn)糟糕,那毫無疑問我們會(huì)投入決策樹,隨機(jī)森林這些模型的懷抱,就不必浪費(fèi)時(shí)間在線性模型上了。不過,我們有多種手段來處理線性回歸無法擬合非線性問題的問題:比如使用分箱或者多項(xiàng)式
分箱:
- from sklearn.preprocessing import KBinsDiscretizer
- enc = KBinsDiscretizer(n_bins=10 #分幾類?,encode="onehot") #ordinal
- X_binned = enc.fit_transform(X) #encode模式"onehot":使用做啞變量方式做離散化,之后返回一個(gè)稀疏矩陣(m,n_bins),每一列是一個(gè)分好的類別,對(duì)每一個(gè)樣本而言,它包含的分類(箱子)中它表示為1,其余分類中它表示為0
- 使用分箱數(shù)據(jù)進(jìn)行建模
- LinearR_ = LinearRegression().fit(X_binned, y)
- TreeR_ = DecisionTreeRegressor(random_state=0).fit(X_binned, y)
- 學(xué)習(xí)曲線找最優(yōu)的箱子數(shù)目
多項(xiàng)式變化:這是一種通過增加自變量上的次數(shù),而將數(shù)據(jù)映射到高維空間的方法,只要我們?cè)O(shè)定一個(gè)自變量上的次數(shù)(大于1),就可以相應(yīng)地獲得數(shù)據(jù)投影在高次方的空間中的結(jié)果。
當(dāng)interaction_only為True的時(shí)候,只生成交互項(xiàng),減輕共線性???(我猜的- from sklearn.preprocessing import PolynomialFeatures
- poly = PolynomialFeatures(degreee=2) #include_bias最好設(shè)成0?
- X = poly.fit_transform(X)
summary:都是圍繞著原始的線性回歸進(jìn)行的拓展和改進(jìn)。其中嶺回歸和Lasso是為了解決多元線性回歸中使用最小二乘法的各種限制,主要用途是消除多重共線性帶來的影響并且做特征選擇,而多項(xiàng)式回歸解決了線性回歸無法擬合非線性數(shù)據(jù)的明顯缺點(diǎn),核心作用是提升模型的表現(xiàn)。
十、Naive Bayes
- 先驗(yàn)概率,后驗(yàn)概率,類的條件概率,機(jī)器學(xué)習(xí)中,X表示特征,Y表示label的分類。
- 貝葉斯假設(shè)特征之間是有條件獨(dú)立的,即 因此在特征之間有較多相關(guān)性的數(shù)據(jù)集上表現(xiàn)不佳。
- 分母P(X)可以用全概率公式求得。
- Naive Bayes是一個(gè)不建模的算法。
2. 如何對(duì)連續(xù)型特征變量求解概率呢
當(dāng)一個(gè)特征下有無數(shù)種可能發(fā)生的事件時(shí),這個(gè)特征的取值就是連續(xù)型的。當(dāng)特征為連續(xù)型時(shí),隨機(jī)取到某一個(gè)事件發(fā)生的概率就為0. 但是我們可以畫概率密度曲線(PDF)。我們就將求解連續(xù)型變量下某個(gè)點(diǎn)取值的概率問題,轉(zhuǎn)化成了求解一個(gè)函數(shù)f(x)在點(diǎn)xi上的取值的問題.
在現(xiàn)實(shí)中,我們往往假設(shè)我們的是滿足某種統(tǒng)計(jì)學(xué)中的分布的,最常見的就是高斯分布,常用的還有伯努利分布,多項(xiàng)式分布。這些分布對(duì)應(yīng)著不同的貝葉斯算法,每個(gè)都對(duì)應(yīng)著一系列需要我們?nèi)ス烙?jì)的參數(shù),因此在貝葉斯中,我們的fit過程其實(shí)是在估計(jì)對(duì)應(yīng)分布的參數(shù),predict過程是在該參數(shù)下的分布中去進(jìn)行概率預(yù)測(cè)。
3. sklearn中實(shí)現(xiàn)
1)GaussianNB
假設(shè)P(xi|Y)服從正態(tài)分布,來估計(jì)每個(gè)特征下每個(gè)類別上的條件概率(以給樣本分類別)。對(duì)于任意一個(gè)Y的取值,貝葉斯都以求解最大化的P(xi|Y)為目標(biāo),這樣我們才能夠比較在不同標(biāo)簽下我們的樣本究竟更靠近哪一個(gè)取值。以最大化P(xi|Y)為目標(biāo),高斯樸素貝葉斯會(huì)為我們求解公式中的參數(shù)σ和μ。求解出參數(shù)后,帶入一個(gè)xi的值,就能夠得到一個(gè)P(xi|Y)的概率取值。
- from sklearn.naive_bayes import GaussianNB
- gnb = GaussianNB().fit(Xtrain,Ytrain)
- acc_score = gnb.score(Xtest,Ytest)
- Y_pred = gnb.predict(Xtest)
- prob = gnb.predict_proba(Xtest)
- 適合什么樣的數(shù)據(jù)集?高斯樸素貝葉斯的決策邊界是曲線,可以是環(huán)形也可以是弧線,所以盡管貝葉斯本身更加擅長(zhǎng)線性可分的二分?jǐn)?shù)據(jù),但樸素貝葉斯在環(huán)形數(shù)據(jù)和月亮型數(shù)據(jù)上也可以有遠(yuǎn)遠(yuǎn)勝過其他線性模型的表現(xiàn)。但是樸素貝葉斯有一個(gè)很嚴(yán)格的假設(shè):特征之間相互獨(dú)立,所以現(xiàn)實(shí)中的效果不會(huì)這樣好。
2)貝葉斯的擬合特點(diǎn)總結(jié):貝葉斯是速度很快,但分類效果一般,并且初次訓(xùn)練之后的結(jié)果就很接近算法極限的算法,幾乎沒有調(diào)參的余地。也就是說,如果我們追求對(duì)概率的預(yù)測(cè),并且希望越準(zhǔn)確越好,那我們應(yīng)該先選擇邏輯回歸。如果數(shù)據(jù)十分復(fù)雜,或者是稀疏矩陣,那我們堅(jiān)定地使用貝葉斯。如果我們分類的目標(biāo)不是要追求對(duì)概率的預(yù)測(cè),那我們完全可以先試試看高斯樸素貝葉斯的效果(反正它運(yùn)算很快速,還不需要太多的樣本),如果效果很不錯(cuò),我們就很幸運(yùn)地得到了一個(gè)表現(xiàn)優(yōu)秀又快速的模型。如果我們沒有得到比較好的結(jié)果,那我們完全可以選擇再更換成更加復(fù)雜的模型。
首先從運(yùn)行速度來看,貝葉斯與決策樹差不多(3s),而且領(lǐng)先其他很多,下一個(gè)等級(jí)的是SVM和隨機(jī)森林(20s),最慢的是邏輯回歸(50s)。決策樹快的原因是因?yàn)槊恳粚舆x擇特征的時(shí)候不會(huì)遍歷全部特征,而是抽幾個(gè)進(jìn)行遍歷,但是隨著樣本量和特征量增加,決策樹的速度必然會(huì)降低,而且你敢把少部分樣本量用貝葉斯去train(因?yàn)樾Ч麎蚝?#xff09;,但是你不敢用決策樹在一小部分的樣本上面train。邏輯回歸按理來說應(yīng)該挺快的,這里面是因?yàn)樘卣魈嗔?#xff0c;收到稀疏矩陣的影響而很慢。
然后是學(xué)習(xí)能力,貝葉斯是一個(gè)天生學(xué)習(xí)很弱的算法,而且沒有什么參數(shù)可以調(diào),樣本量一變大人家學(xué)習(xí)的成果都突飛猛進(jìn)接近100%,只有可憐貝葉斯本來就不咋好,還一直下降。所以少量樣本量考慮考慮貝葉斯還行。
再來看過擬合問題,決策樹的過擬合一直都很嚴(yán)重,在這張圖里面,1400樣本量對(duì)它還不夠。第二是對(duì)于過擬合的解決辦法,只有貝葉斯是通過降低訓(xùn)練集的效果來減輕過擬合的。
3)使用sklearn中的learning_curve類來畫學(xué)習(xí)曲線(樣本數(shù)量與模型效果的關(guān)系)
- train_sizes,train_scores,test_scores=learning_curve(clf, X, y, cv=cv, n_jobs = n_jobs)
- cv可以是一個(gè)數(shù),也可是一種模式:
- cv = ShuffleSplit(n_splits = 50, test_size = 0.2, random_state = 0)
4)概率類模型評(píng)估指標(biāo)
布里爾分?jǐn)?shù)Brier Score:
- 類似于均方誤差,可以用于任何可以使用predict_proba接口調(diào)用概率的模型
- from sklearn.metrics import brier_score_loss
- brier_score_loss(Ytest, prob[:,1], pos_label=1)
- 它是對(duì)于多分類的每一個(gè)類別下的標(biāo)簽取值進(jìn)行計(jì)算的
- 例子中svc最差,邏輯回歸最好。(Svc.decision.function(Xtest)返回置信度:點(diǎn)到?jīng)Q策邊界的距離,越遠(yuǎn)說明越自信)其實(shí)svc是強(qiáng)行使用sigmoid函數(shù)來壓縮概率,所以svc產(chǎn)出的概率結(jié)果不怎么可靠。
對(duì)數(shù)似然log_loss:
里面的第二個(gè)參數(shù)y_pred只接受概率不接受標(biāo)簽,如下,log_loss在svc和邏輯回歸上面會(huì)天生表現(xiàn)較好,現(xiàn)實(shí)中用做概率模型的評(píng)價(jià)指標(biāo)更加常用。適合于:多分類標(biāo)簽/多個(gè)模型的比較/
Reliability Curve可靠性曲線/調(diào)節(jié)概率的校準(zhǔn)程度: 一條以預(yù)測(cè)概率為橫坐標(biāo),真實(shí)標(biāo)簽為縱坐標(biāo)的曲線。越靠近對(duì)角線越好。calibration_curve可用,與ROC類似,用了分箱的做法,給我們橫縱坐標(biāo)。
分箱:
參數(shù):
n_bins取不同的值:10比較合適,3沒什么用,100波動(dòng)太大
依舊在不同的分類器上面嘗試:LR/SVC/Bayes,注意LR和Bayes都可以直接返回概率,但是SVC返回的是decision_function接口的置信度,因此要?dú)w一化一下。Hasattr(obj,name)這個(gè)函數(shù)查看類obj中是否存在名為name的接口。下圖看出:邏輯回歸真的是天生對(duì)于概率預(yù)測(cè)很強(qiáng)。而貝葉斯表現(xiàn)不夠好的原因還是特征之間沒有相互獨(dú)立。SVC在于它本身是天生置信度不足的分類器,概率上不是很自信,大部分樣本的預(yù)測(cè)概率都是0.5左右。
預(yù)測(cè)概率的直方圖:
高斯樸素貝葉斯與SVC相反,它最自信,但是過度自信,不準(zhǔn)。
概率校準(zhǔn):如何校準(zhǔn)可靠性曲線?(如何讓它接近對(duì)角線)等近似回歸。Sklearn中的CalibratedClassifierCV(model, cv, method) 返回校準(zhǔn)之后的預(yù)測(cè)結(jié)果。下圖看出bayes+isotonic等滲回歸校正的效果最好。那么準(zhǔn)確率呢?準(zhǔn)確率稍稍降低,與布里爾的值相悖了。(太復(fù)雜了…但還是以準(zhǔn)確率為準(zhǔn))對(duì)于SVC來說,兩種概率校準(zhǔn)辦法都很有效。
多項(xiàng)式樸素貝葉斯MultinomialNB
源于多項(xiàng)式實(shí)驗(yàn),它假設(shè)特征變量服從一個(gè)簡(jiǎn)單的多項(xiàng)式分布,意義一般為:次數(shù),頻數(shù),是否出現(xiàn)等等(離散正整數(shù))。多項(xiàng)式分布擅長(zhǎng)的是分類型變量,P(xi|Y)的概率是離散的,并且不同xi之下的概率互相獨(dú)立。所以它的特征矩陣一般是稀疏矩陣,很多會(huì)和TF-IDF相結(jié)合。如果要處理連續(xù)型變量,我們用KbinsDiscretizer類進(jìn)行分箱,生成一系列啞變量(是否在第i個(gè)箱子里的一堆dummy)。
MultinomialNB的參數(shù):
1)α是一個(gè)平滑系數(shù),避免θ=0出現(xiàn)。把矩陣想象成term frequency matrix,每一個(gè)樣本是大Corpus里面的一個(gè)document,每個(gè)特征都是一個(gè)詞。參數(shù)θ就代表一個(gè)概率。
2)fit_prior: 是否學(xué)習(xí)先驗(yàn)概率,false的話就用統(tǒng)一先驗(yàn)概率,比如擲色子。
3)class_prior: 給它每個(gè)class的先驗(yàn)概率(有點(diǎn)像提前賦上class weight),如果不給它就自己學(xué)習(xí)。
如果特征矩陣中有負(fù)值 考慮歸一化。
返回接口:
_mnb.class_log_prior_返回先驗(yàn)概率,查看是否有unbalanced情況
_mnb.feature_log_prob_返回log(P(xi|Y))
伯努利樸素貝葉斯BernoulliNB
假設(shè)特征們服從多元二項(xiàng)分布(即這個(gè)特征所代表的事件發(fā)生與否/存在與否,比較適合文本分類數(shù)據(jù),尤其是較短的文檔)
參數(shù):α;binarize(二值化,填閾值或None,但是一次性二值化所有的特征);fit_prior; class_prior
貝葉斯的Unbalanced問題
分箱+onehot可以同時(shí)解決二項(xiàng)式和多項(xiàng)式分布,二項(xiàng)式貝葉斯在unbalanced的數(shù)據(jù)集上面recall的表現(xiàn)最好,但是現(xiàn)實(shí)中不會(huì)強(qiáng)行將所有特征二值化,需要一個(gè)一個(gè)判斷閾值,但這樣就很低效率了。
改進(jìn)后的多項(xiàng)式NB:complementNB
計(jì)算權(quán)重,避免某一些特征取值較多的樣本占更大的權(quán)重,會(huì)對(duì)參數(shù)估計(jì)起到支配作用。預(yù)測(cè)規(guī)則如下:
Y不等于c的概率越小,=c的概率就越大,樣本就屬于標(biāo)簽c。
參數(shù):α;norm(是否使用L2范式來規(guī)定權(quán)重的大小);fit_prior; class_prior
complementNB在unbalanced上面的效果:CNB犧牲了部分整體的精確度和布里爾指數(shù),但是得到了非常高的recall,說明捕捉少數(shù)類很優(yōu)秀,同時(shí)AUC也保持很高,因此如果目標(biāo)是盡可能地捕捉少數(shù)類,那么CNB是第一選擇。
一個(gè)小例子:Bayes Classifier做文本分類。
- 單詞向量計(jì)數(shù)編碼:
- sample = ["Machine learning is fascinating, it is wonderful","Machine learning is a sensational technology","Elsa is a popular character"]
- from sklearn.feature_extraction.text import CountVectorizer
- vec = CountVectorizer()
- X = vec.fit_transform(sample)
- X:特征矩陣(稀疏矩陣)
- Vec. get_feature_names()查看都有什么單詞向量
- #注意稀疏矩陣是無法輸入pandas的,要先toarray()
- CVresult = pd.DataFrame(X.toarray(),columns = vec.get_feature_names())
問題1:越長(zhǎng)的句子(樣本),對(duì)于θ的估計(jì)影響越大。因此補(bǔ)集貝葉斯讓每個(gè)特征的權(quán)重除以自己的L2范式。
問題2:沒什么實(shí)際意義的詞,比如is。因此有了TF-IDF來平衡權(quán)重。
- from sklearn.feature_extraction.text import TfidfVectorizer as TFIDF
- vec = TFIDF()
- X = vec.fit_transform(sample)
from sklearn.datasets import fetch_20newsgroups 包含約20000篇新聞,20分類的語料庫
十一、Xgboost
Xgboost由GBDT梯度提升樹發(fā)展而來。所以首先要搞懂GBDT在干嘛。
原始的boosting是在每一步訓(xùn)練的模型中 為每一個(gè)樣本賦權(quán)重. 最后將N個(gè)分類器組合。Gradient Boosting與Boosting區(qū)別在于,每一計(jì)算的是為了減少上一次的殘差,下一個(gè)模型主要在殘差減少的梯度方上建立模型,使得殘差往梯度方向上減少。
k棵樹的集成結(jié)果y是所有樹的葉子權(quán)重的累加,持續(xù)迭代找到讓損失函數(shù)最小的y。迭代的單位是新的那棵樹,(原理類比邏輯回歸的梯度下降)yi(k+1) = yi(k)+ηf(k+1)(xi) 。η類比α步長(zhǎng)。
GBDT一些重要參數(shù):
- 尋找最佳的n_estimator: 學(xué)習(xí)曲線畫誰(偏差r方,方差,和泛化誤差)找的是泛化誤差最小的點(diǎn)
- subsample:隨機(jī)抽樣時(shí)的抽樣比例(0,1] 這里要注意如果本身訓(xùn)練集就很小,而且因訓(xùn)練集小而處于過擬合,就不要再抽樣了直接用全部trainset
- eta(η):迭代步長(zhǎng)(shrinkage),又叫學(xué)習(xí)率(learning rate),類比邏輯回歸里面的α,用于控制迭代速度,越大就越快。太大太小都不好,xgb庫中eta默認(rèn)0.3,sklearn中l(wèi)earning_rate默認(rèn)0.1。要和n_estimator放在一起用GridSearch調(diào)參。如果說經(jīng)驗(yàn)之談,η在[0.01,0.2]區(qū)間內(nèi),而且我們不依賴調(diào)整η去提升模型,而還是對(duì)樹進(jìn)行操作比如剪枝。
以上參數(shù)都是xgboost中與GBDT過程相關(guān)的函數(shù)。GBDT可以理解為由三個(gè)重要部分組成:(1)一個(gè)能夠衡量集成算法效果的損失函數(shù)Obj;(2)每次迭代往上加的弱評(píng)估器fk(x);(3)集成手段(迭代方法/抽樣方法/樣本加權(quán)方法/…)
而xgboost就是從以上三方面進(jìn)行改進(jìn),拓展,重新定義,來實(shí)現(xiàn)更強(qiáng)大的功能。
葉子得分xgboost參數(shù):
- booster(xgb庫中叫xgb_model): 選擇弱評(píng)估器,gbtree/gblinear/dart
- objective(xgb庫中叫obj,兩個(gè)庫里面默認(rèn)值不同):目標(biāo)函數(shù)/迭代過程中想要min的東西=傳統(tǒng)損失函數(shù)(mse/log_loss)+模型復(fù)雜度(樹的結(jié)構(gòu)),可以看作是對(duì)模型方差與偏差的平衡,也就是在min泛化誤差。
Xgb庫的調(diào)用:
- 1. 用DMatrix同時(shí)傳入X matrix和y label
- 2. 寫Param,dictionary格式,注意num_round要單獨(dú)寫 不在param里面
- 3. Train
- 4. Predict
如何求解xgboost的目標(biāo)函數(shù):
1.轉(zhuǎn)化目標(biāo)函數(shù):偏差和方差都用fk(x)表示,也就是樹的結(jié)構(gòu)。因?yàn)槲覀兦蠼獾氖菢涞慕Y(jié)構(gòu)。這里有泰勒展開和刨除已知常數(shù)。
2.樹結(jié)構(gòu)參數(shù)化
fk(xi)表示樣本xi在第k棵樹的葉子權(quán)重/得分,f就代表這
使用葉子節(jié)點(diǎn)數(shù)量T來代表模型復(fù)雜度:Ω(f) = γT+正則項(xiàng) (α和λ(類比lasso和ridge)正則化強(qiáng)度
3.區(qū)別:GBDT的目標(biāo)函數(shù)不含正則項(xiàng)的
4.求解w(每片葉子的葉子得分)與T(葉子數(shù)量):最小化結(jié)構(gòu)分?jǐn)?shù)來求解樹結(jié)構(gòu):貪婪算法(控制局部最優(yōu)來達(dá)到全局最優(yōu))類比Decision Tree的信息增益,
γ參數(shù):復(fù)雜性控制,讓樹停止生長(zhǎng),防止過擬合。定義:在樹 的葉節(jié)點(diǎn)上進(jìn)行進(jìn)一步分枝所需的最小的目標(biāo)函數(shù)減少量(如果比γ還要小,那gain就小于0了)。γ通過后剪枝的方式防止過擬合。
xgboost.cv類:
通過控制訓(xùn)練集上面的訓(xùn)練來提高泛化能力--不讓你學(xué)習(xí)的那么具體Xgboost應(yīng)用(要記住它也是天生過擬合):剪枝參數(shù)與回歸模型調(diào)參
1.Max_depth(與γ用處差不多 一般調(diào)一個(gè)就可,調(diào)好一個(gè)以后,再調(diào)另外一個(gè)怎么調(diào)都看不到到大的效果的)
2.隨機(jī)抽樣:colsample_bytree/bysample/bynode這里是指抽取特征(注意區(qū)分這里和subsample的區(qū)別:subsample是每次建樹時(shí)抽取部分樣本來防止過度學(xué)習(xí))會(huì)縮短時(shí)間,對(duì)于大的數(shù)據(jù)集,調(diào)這三個(gè)可能都會(huì)有反應(yīng)。
3.調(diào)參思路:通過gridsearch找出最優(yōu)的n_estimators和eta的組合,然后使用gamma和max_depth觀察模型處于什么樣的狀態(tài)(over/under fitting,應(yīng)該往左還是往右推),最后調(diào)整正則化參數(shù)(λ和α)和抽樣參數(shù)。通常來說xgboost大多數(shù)時(shí)候時(shí)需要剪枝的,使用xgb.cv這個(gè)類(通過看train和test效果的曲線/就是上面的紅黃或者藍(lán)綠曲線)來進(jìn)行剪枝調(diào)參,以調(diào)整出一組泛化能力很強(qiáng)的參數(shù)。(ps不建議直接把全部參數(shù)放進(jìn)網(wǎng)格搜索,起碼要先確定大致范圍)(pps 分類的問題一般使用方差和偏差曲線,回歸問題使用MSE曲線)
默認(rèn)參數(shù):
默認(rèn)參數(shù)通過cv的在train和test上面的曲線來看調(diào)參的效果Python中保存和調(diào)用模型的方法:
1)pickle:
- import pickle
- Pickle.dump(model,open(‘wenjianming.dat’,’wb’))
- Import sys
- Sys.path現(xiàn)有目錄
- Loaded_model=Pickle.load(model,open(‘wenjianming.dat’,’rb’))
- 然后就可以就可以直接做預(yù)測(cè)了:ypreds = Loaded_model.predict(test)
2)joblib:
- joblib.dump(model, ‘wenjianming.dat’)
- loaded_model = joblib.load(model, ‘wenjianming.dat’)
- ypreds = Loaded_model.predict(test)
Xgboost做classification的例子:
1)unbalanced問題解決
之前的random forest/svm/LR里面都有class_weight參數(shù),xgboost中類似參數(shù)為scale_pos_weight,輸入負(fù)樣本量和正樣本量之比。
2)sklearn的predict返回分類,xgboost的predict返回概率
十二、nnet
‘黑箱算法’,是深度學(xué)習(xí)的基礎(chǔ),多用于人工智能而不太適用于商業(yè)環(huán)境,因?yàn)闊o法解釋,只告訴你結(jié)果,你的調(diào)參也是結(jié)果導(dǎo)向
基本原理:基于感知機(jī)提出:
感知機(jī)三個(gè)組成部分:
- 每個(gè)輸入的特征被匹配的參數(shù)w
- 線性關(guān)系Z
- 激活函數(shù)sign
Nnet就是感知機(jī)的集成。隱藏層之間是嵌套關(guān)系,是激活函數(shù)σ的嵌套。
首先理解參數(shù)w,每一條神經(jīng)鍵有一個(gè)w,他們之間沒有關(guān)系相互獨(dú)立。
理解w理解σ嵌套總結(jié)
以上是生活随笔為你收集整理的Sklearn 损失函数如何应用到_Sklearn全复习(下)(持续更新)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: struts2导入excel模板_「微干
- 下一篇: make 命令_Vim 命令大全