1. 程式人生 > >最優引數選取

最優引數選取

分類演算法的大致流程
利用引數尋優函式進行引數尋優,這裡的引數是SVMtrain訓練模型的引數,引數找的好,模型訓練的就好,可以提高後面預測分類的準確率。不同的SVM型別需要尋優的引數不同。然後利用最優引數去訓練模型model,得到模型後就可以利用svmpredict函式進行使用預測了。
下面我將學習farutu的筆記整理一下,希望能夠幫助到後面學習svm的同學快速入門,因為我也是剛剛看完了farutu作者的視訊教程,趁熱打鐵,記錄一下學習的關鍵部分,為後面做專案進行一個參考,忘了可以來看看自己的部落格偷笑
首先是MATLAB中svm工具箱的安裝。libsvm-3.1-[FarutoUltimate3.1Mcode]工具箱是faruto在libsvm 的原始作者臺灣大學的林智仁先生libsvm3.1版本的基礎上進行改進得來的,在原始版本的基礎上,Faruto又加了一些輔助函式,便於進行操作及視覺化。下面我將結合自己在學習過程中需要用的一些必要的函式,來講一下
libsvm-3.1-[FarutoUltimate3.1Mcode]工具箱的使用情況。
下面是我要講的函式列表,當然除了這些函式以外,工具箱裡還有一些視覺化的函式,但是視覺化的函式並不是必要的,只是在講解的時候便於別人去理解,我在學習的時候沒怎麼用過,所以就沒有列出,一般情況下,這些函式就夠用了:
核心函式:
svmtrain
svmpredict
預處理函式:
scaleForSVM
pcaForSVM
尋優函式:
SVMcgForClass
gaSVMcgForClass
psoSVMcgForClass
視覺化及指標函式:
ClassResult
VF
整合函式:
SVC

這些函式只是對於分類來說的,libsvm不僅支援分類,而且支援迴歸問題,迴歸與分類問題的本質是一樣的,就是有一個輸入(屬性矩陣或自變數)就有一個輸出(分類輸出的是分類標籤,迴歸輸出的是因變數),也就是相當於與個函式對映:y=f(x).在libsvm中,迴歸問題與分類問題相對應有其自己對應的函式,使用方法與分類問題相對應的函式相同,這裡我們只針對分類問題講解,對迴歸問題如果大家需要,可以自己找資料檢視,我覺得最好的一本資料就是MATLAB神經網路43個案例分析這本書,因為這本書的libsvm工具箱部分就是
libsvm-3.1-[FarutoUltimate3.1Mcode]工具箱的作者Faruto(李洋)編寫的,我所介紹的內容,在這本書中上都有,不過我的更精簡一些,可以讓大家抓住最主要的部分,節省大家的時間。好了,下面進入正題。
首先是核心函式svmtrain和svmpredict
model = svmtrain(train_label, train_data, ‘options’);
[predict_label, accuracy/mse, dec_value] = svmpredict(test_label, test_data,model);
svmtrain的呼叫格式
model = svmtrain(train_label, train_data, ‘options’);

輸入
– train_data訓練集屬性矩陣,大小n*m,n表示樣本數,m表示屬性數目(維數),資料型別double;
– train_label訓練集標籤,大小n*1,n表示樣本數,資料型別double ;
– options引數選項, 主要有:
Options:
-s svm型別:設定SVM模型型別(預設0)
0 -- C-SVC
1 -- nu-SVC
2 -- one-class SVM
3 -- epsilon-SVR
4 -- nu-SVR
-t 核函式型別:核函式設定型別(預設2)
0 -- 線性核函式: u'*v
1 -- 多項式核函式: (gamma*u'*v + coef0)^degree
2 -- RBF核函式: exp(-gamma*|u-v|^2)
3 -- sigmoid核函式: tanh(gamma*u'*v + coef0)
4 -- 預定義核函式(指定核矩陣)
-d degree:核函式中的degree設定(針對多項式核函式)(預設3)
-g gama:核函式中的gamma函式設定(針對多項式/rbf/sigmoid核函式)(預設1/num_features,即屬性數目的倒數)
-r coef0:核函式中的coef0設定(針對多項式/sigmoid核函式)(預設0)
-c cost:設定C-SVC,epsilon-SVR和nu-SVC的引數(損失函式)(預設1)
-n nu:設定nu-SVC,one-class SVM和nu-SVR的引數(預設0.5)
-p epsilon:設定epsilon-SVR中損失函式epsilon的值(預設0.1)
-m cachesize:設定cache記憶體大小,以MB為單位(預設100)
-e eps:設定允許的終止判據(預設0.001)
-h shrinking:是否使用啟發式,0或1(預設1)
-wi weight:設定第幾類的引數C為weight*C(C-SVC中的C)(預設1)
以上這些引數設定可以按照SVM的型別和核函式所支援的引數進行任意組合,如果設定的引數在函式或SVM型別中沒有也不會產生影響,程式不會接受該引數;如果應有的引數設定不正確,引數將採用預設值。
輸出
– model 訓練得到的模型,是一個結構體。關於他的詳細解釋,請參考http://blog.sina.com.cn/s/blog_6646924501018fqc.html
注意:當svmtrain使用-v引數時,返回的model不再是一個結構體,分類問題返回的是交叉驗證下的平均分類準確率;迴歸問題返回的是交叉檢驗下的平均mse(均方根誤差)。使用-v是在引數尋優時尋找最優引數所用的,在正常模型訓練時不用-v引數。關於引數尋優後面還有會介紹。
svmpredict函式的使用更加簡單,輸入就是待測資料的特徵矩陣和標籤,輸出有三個一個是predict_label,預測的測試集的標籤,資料型別double;accuracy/mse是一個3*1的列向量,第一個數代表分類準確率(分類問題使用),第二個代表mse(迴歸問題使用),第三個數表示平方相關係數(迴歸問題使用)。注意,如果測試集的真實標籤事先無法得知,則這個返回值沒有意義。實際上我們真實做預測的時候,標籤本來就是應該沒有的,如果我們事先都知道的話,預測標籤就沒有意義了。之所以要用標籤,就是為了測試我們訓練得到的模型去做預測時效果好不好,這個返回值就是為了驗證用的。一旦我們知道了我們的模型是可靠地,我們就可以真正用它來做預測了,那麼這個返回值就沒有任何意義了。另外需要說明的是,標籤只是我們用來表示某個類別的一個符號而已,不具有真實的資料意義,只是我們要知道,這個資料代表的是哪一類。
dec_value是決策值,只是在多分類的時候才會返回這個值,二分類的時候沒有,他的矩陣大小是預測資料樣本個數*類別數,但是具體代表什麼意義我沒有搞懂,網上也沒有找到相應的解釋,不過好在這個數不怎麼用。
歸一化預處理函式scaleforsvm的用法:
train_scale,test_scale,ps] = scale For SVM(train_data,test_data,ymin,ymax) 
輸入:
– train_data:訓練集
– test_data:測試集
– ymin:歸一化範圍下限(可不輸入,預設為0
– ymax:歸一化範圍上限(可不輸入,預設為1
輸出:
– train_scale:歸一化後的訓練集
– test_scale:歸一化後的測試集
– ps:歸一化對映
歸一化化就是要把你需要處理的資料經過處理後(通過某種演算法)限制在你需要的一定範圍內。首先歸一化是為了後面資料處理的方便,其次是保正程式執行時收斂加快。為什麼要用歸一化呢?首先先說一個概念,叫做奇異樣本資料,所謂奇異樣本資料資料指的是相對於其他輸入樣本特別大或特別小的樣本向量。下面舉例:
m=[0.11 0.15 0.32 0.45 30;
      0.13 0.24 0.27 0.25 45];
其中的第五列資料相對於其他4列資料就可以成為奇異樣本資料(下面所說的網路均值bp)。奇異樣本資料存在所引起的網路訓練時間增加,並可能引起網路無法收斂,所以對於訓練樣本存在奇異樣本資料的資料集在訓練之前,最好先進形歸一化,若不存在奇異樣本資料,則不需要事先歸一化。歸一化的演算法實現過程可以參考:http://www.ilovematlab.cn/thread-27021-1-1.html。是否一定要做歸一化這個預處理才能提高最後的分類準確率呢?答案是否定的。並不是任何問題都必須要進行歸一化預處理,要具體問題具體分析,進行試驗測試表明,有時歸一化後的預測準確率要比沒有歸一化的低好多,而且不同的歸一化方式對最後的準確率也會有一定的影響。還要強調一點就是訓練集是如何歸一化的測試集也要如何歸一化。
降維預處理函式pcaForSVM的用法:
[train_pca,test_pca] = pcaForSVM(train,test,threshold) 
輸入:
– train_data:訓練集,格式要求與svmtrain相同
– test_data:測試集,格式要求與svmtrain相同。
– threshold:對原始變數的解釋程度([0100]之間的一個數),通過該閾值可以選取出主成分,該引數可以不輸入,預設為90,即選取的主成分預設可以達到對原始變數達到90%的解釋程度。
輸出:
– train_pca:進行pca降維預處理後的訓練集。
– test_pca:進行pca降維預處理後的測試集。
再用SVM做分類預測時,需要調節相關的引數(主要是懲罰引數c和核函式引數g)才能得到比較理想的分類預測準確率。那麼SVM的引數該怎麼選擇呢,有沒有最佳的引數呢?採用CV的思想可以在某種意義下得到最優的引數,可以有效地避免欠學習和過學習狀態的發生,最終對於測試集合的預測得到較理想的準確率。
然後普及一下欠擬合與過擬合是什麼意思(其實我也是剛搞懂大笑
過擬合:1)簡單理解就是訓練樣本的得到的輸出和期望輸出基本一致,但是測試樣本輸出和測試樣本的期望輸出相差卻很大 。2)為了得到一致假設而使假設變得過度複雜稱為過擬合。想像某種學習演算法產生了一個過擬合的分類器,這個分類器能夠百分之百的正確分類樣本資料(即再拿樣本中的文件來給它,它絕對不會分錯),但也就為了能夠對樣本完全正確的分類,使得它的構造如此精細複雜,規則如此嚴格,以至於任何與樣本資料稍有不同的文件它全都認為不屬於這個類別!
欠擬合:1)如果資料本身呈現二次型,故用一條二次曲線擬合會更好。但普通的PLS程式只提供線性方程供擬合之用。這就產生擬合不足即“欠擬合”現象,從而在預報時要造成偏差。2)如果模型未考慮足夠的資訊,從而無法對現實世界精確建模,將產生欠擬合(underfitting) 現象。例如,如果僅觀察指數曲線上的兩點,我們可能會斷言這裡存在一個線性關係(如圖1-1 所示)。但也有可能並不存在任何模式,因為只有兩個點可供參考。
簡單地說,過擬合就是本來一個簡單的模型就可以搞定,但是為了追求在訓練集上的高準確率,我們把一些誤差或者噪聲也考慮進去,把模型變得很複雜,但是一旦我們用不屬於這個訓練集中的資料進行測試時,由於過擬合的存在,結果就會變的很差。欠擬合則正好相反,是因為資料集不夠造成的,本來應該是一個相對複雜的模型,但是由於資料集不夠,我們只能得到一個簡單的模型,所以導致分類的結果不好。
在講尋優函式之前,我們先對CV思想做一下簡介。交叉驗證(Cross Validation)方法思想簡介:http://www.matlabsky.com/forum-v ... -fromuid-18677.html
關於SVM引數的優化選取,國際上並沒有公認統一的最好的方法,現在目前常用的方法就是讓c和g在一定的範圍內取值,對於取定的c和g對於把訓練集作為原始資料集利用K-CV方法得到在此組c和g下訓練集驗證分類準確率,最終取使得訓練集驗證分類準確率最高的那組c和g做為最佳的引數,但有一個問題就是可能會有多組的c和g對應於最高的驗證分類準確率,這種情況怎麼處理?這裡採用的手段是選取能夠達到最高驗證分類準確率中引數c最小的那組c和g做為最佳的引數,如果對應最小的c有多組g,就選取搜尋到的第一組c和g做為最佳的引數。這樣做的理由是:過高的c會導致過學習狀態發生,即訓練集分類準確率很高而測試集分類準確率很低(分類器的泛化能力降低),因為過高的懲罰因子說明我們非常重視,所以在能夠達到最高驗證分類準確率中的所有的成對的c和g中認為較小的懲罰引數c是更佳的選擇物件。當然,你也可以同時記錄下多組c和g,在後面對測試集進行預測時可以分別使用這些引數,看最後的結果如何,再進行選擇。
尋優函式:
1、SVMcgForClass:網格劃分來尋找最佳引數c和g
2、gaSVMForClass:遺傳演算法引數尋優
3、psoSVMForClass:粒子群優化演算法引數尋優
對於分類問題網格引數優化(cg),C-SVC+RBF核函式(’-s 0 –t 2’
[bestCVaccuracy,bestc,bestg]=SVMcgForClass(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,accstep)
輸入:
train_label:訓練集的標籤,格式要求與svmtrain相同。
train:訓練集,格式要求與svmtrain相同。
cmin,cmax:懲罰引數c的變化範圍,即在[2^cmin,2^cmax]範圍內尋找最佳的引數c,預設值為cmin=-8,cmax=8,即預設懲罰引數c的範圍是[2^(-8),2^8]。
gmin,gmax:RBF核引數g的變化範圍,即在[2^gmin,2^gmax]範圍內尋找最佳的RBF核引數g,預設值為gmin=-8,gmax=8,即預設RBF核引數g的範圍是[2^(-8),2^8]。
v:進行Cross Validation過程中的引數,即對訓練集進行v-fold Cross Validation,預設為3,即預設進行3折CV過程。(但是我看的是預設值5)
cstep,gstep:進行引數尋優是c和g的步進大小,即c的取值為2^cmin,2^(cmin+cstep),…,2^cmax,,g的取值為2^gmin,2^(gmin+gstep),…,2^gmax,預設取值為cstep=1,gstep=1。
accstep:最後引數選擇結果圖中準確率離散化顯示的步進間隔大小([0,100]之間的一個數),預設為4.5。
輸出:
bestCVaccuracy:最終CV意義下的最佳分類準確率。
bestc:最佳的引數c。
bestg:最佳的引數g。
網格引數尋優函式(迴歸問題):SVMcgForRegress
[bestCVmse,bestc,bestg]=SVMcgForRegress(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,msestep)其輸入輸出與SVMcgForClass類似。
雖然採用網格搜尋能夠找到在CV意義下的最高分類準確率,即全域性最優解,但有時候要想在更大範圍內找最佳引數時會很費力,採用啟發式演算法就可以不必遍歷所有的引數點,也能找到全域性最優解。下面就介紹兩種啟發式演算法ga遺傳和pso粒子群優化演算法。
對於分類問題利用GA來進行引數優化(cg),C-SVC+RBF核函式(’-s 0 –t 2’
 [best CVaccuracybestcbestgga_option]=gaSVMcgFor Class(train_labeltrainga_option)
輸入:
– train_label:訓練集的標籤,格式要求與svmtrain相同。
– train:訓練集,格式要求與svmtrain相同。
– ga_optionGA中的一些引數設定,可不輸入,有預設值,詳細請看程式碼的幫助說明。
輸出:
– best CVaccuracy:最終CV意義下的最佳分類準確率。
– bestc:最佳的引數c
– bestg:最佳的引數g

– ga_option:記錄GA中的一些引數。

注意:作者farutu用的是謝菲爾德的遺傳演算法工具箱,直接將遺傳演算法的工具箱放在了他的工具箱裡面,可以直接用,並不是用的MATLAB本身自帶的遺傳演算法的函式。

一般情況下,ga_options 採用預設值就可以,不用輸入這部分。
對於分類問題利用PSO
來進行引數優化(cg), C-SVC+RBF核函式(’-s 0 –t 2’
 [best CVaccuracybestcbestgpso_option]= pso SVMcg For Class(train_labeltrainpso_option)
輸入:
– train_label:訓練集的標籤,格式要求與svmtrain相同。
– train:訓練集,格式要求與svmtrain相同。
– pso_optionPSO中的一些引數設定,可不輸入,有預設值,詳細請看程式碼的幫助說明。
輸出:
– best CVaccuracy:最終CV意義下的最佳分類準確率。
– bestc:最佳的引數c
– bestg:最佳的引數g
– pso_option:記錄PSO中的一些引數。
一般,pso_options採用預設值就可以,不用輸入這部分。
注意:一般情況下采用預設值就可以了,經過試驗,預設值往往能夠達到最好的效果。
視覺化及指標函式:
1、ClassResult
2、VF
classresult函式的用法:CR = ClassResult(label, data, model, type)
type 1:輸入的data為訓練集
        2:輸入的data為測試集
如果是二分類的時候才會給出下面所有這些引數,多分類只會返回CR.accuracy
CR.accuracy,整體的分類準確率,及每一類的分類準確率
CR.SVlovation,model中支援向量在原始資料集中的位置
CR.b,決策函式中的常數項
CR.w,每個支援向量的係數
CR.alpha ,w=alpha*y,y代表標籤
如果type=1,輸入是訓練集的時候,算出來的分類準確率是不具有參考意義的,因為其實就是用訓練集訓練出來的模型又對訓練集進行了一次精確度的驗證,所以精確度會比較高,當然也不見得就會達到100,因此只有type=2的分類精度才有意義,多分類時type=1,可以看一下支援向量所佔訓練集樣本數目的比例。
VF函式的用法,評價分類結果的好壞不一定非得用分類準確率,還可以用一些其他的指標,VF函式就是返回一些分類問題的評價指標,但是這個函式是隻用於二分類的C-SVM,並且類別標籤是1或-1(我看了原始碼,其實只要求二分類時正樣本的標籤是1就可以了,負樣本的標籤隨意即可),多分類,迴歸以及概率估計問題不屬於考慮範圍。關於評價分類效果的指標,可以看http://blog.csdn.net/wangran51/article/details/7579100
[score,str] = VF(true_labels,predict_labels,type)
 輸入:
-true_labels:是實際的正確的標籤
-predict_labels:是預測得到的標籤
-type : 1,2,3,4,5
type=1:輸出的score就是Accuracy = #true / #total
依次:2:Precision = true_positive / (true_positive + false_positive) 
         3:Recall = true_positive / (true_positive + false_negative) 
4:F-score = 2 * Precision * Recall / (Precision + Recall) 
        5: BAC (Ballanced ACcuracy) = (Sensitivity + Specificity) / 2, where Sensitivity = true_positive / (true_positive + false_negative) and   Specificity = true_negative / (true_negative + false_positive) 
輸出的str是與score相對應的列印語句。
整合函式SVC:
上面所說的這些函式都可以被一個整合函式SVC包含(除了VF),SVC是一個分類問題中各種函式外掛的一個整合函式,類似的迴歸問題的整合函式是SVR。下面是SVC的用法。
[predict_label,accuracy] = SVC(train_label,train_data,test_label,test_data,Method_option)
輸入:
前四個和SVMtrain是一樣的,後面的Method_option代表的意思如下:其中1代表是,0代表不是
Method_option.plot Original = 0 or 1 表示是否畫出原始資料
Method_option.scale = 0 or 1 表示是否進行歸一化
Method_option.plot Scale = 0 or 1 表示是否畫出歸一化後的影象
Method_option.pca = 0 or 1 表示是否進行pca降維預處理
Method_option.type = 1[grid] or 2[ga] or 3[pso] 表示採用何種尋參方法
輸出:predict_label,預測得到的標籤,accuracy,整體的分類準確率及各個類別的分類準確率,當然你如果想看訓練得到的模型的話,也可以在返回引數中加一個model。
大家可以驗證一下,得到的結果與上面 自己用SVMtrain,SVMpredict,及一些預處理和尋優函式的組合結果是一樣的。
注意下面這兩行語句:
cmd = ['-v ',num2str(v),' -c ',num2str(cg(nind,1)),' -g ',num2str(cg(nind,2))];
ObjV(nind,1) = svmtrain(train_label,train_data,cmd);
tip1:在cmd中使用-t等引數的時候,一定要注意’-t‘等字母的前後空格,因為如果後面不留空格,會將前後的兩個引數連在一起,以為是一個數,就會影響後面的結果。我在驗證SVC與自己的組合函式得到的結果時總是得不到一樣的結果,後來知道就是因為這個原因。
tip2:在專門強調一下,用在尋優中的SVMtrain和我們訓練時用的SVMtrain是不一樣的,’-s‘的位置換成了’-v‘,而且沒有核函式的選擇,是一個固化好了的訓練函式,只是用來訓練一個模型然後去進行測試,看結果是怎樣的,來評價一下,c,g引數的效果好壞,因為評價c和g好壞的指標就是分類準確率。
GUI版本
SVM_GUI工具箱是在Libsvm-Faruto Ultimate的基礎上改進出來的一個影象視覺化使用介面,使用前需要安裝工具箱,它整合了SVC和SVR也就是分類和迴歸的兩個整合函式,使用起來很方便,只需要手動去進行一些引數設定就可以了,基本上就是一個SVC引數的選擇過程,這裡就不詳細說明了,使用起來很簡單。
如何提高分類器的效能:
下面這些是我自己的總結,提高分類器的效能首先要提取比較好的特徵,這是前提條件。
1、試一下,是不是歸一化的結果更好
2、嘗試一下不同型別的SVM型別
3、選擇適當的核函式,一般情況下徑向基RBF核函式效果不會太差
4、引數尋優,找到合適的c和g
5、如果更加重視某一類的精確度,可以調整懲罰因子的大小,就是在c的基礎上乘以一個權重,增大懲罰力度,尤其是對樣本資料偏斜問題。先來說說樣本的偏斜問題,也叫資料集偏斜(unbalanced),它指的是參與分類的兩個類別(也可以指多個類別)樣本數量差異很大。比如說正類有10000個樣本,而負類只給了100個,這會引起的問題顯而易見由於偏斜的現象存在,使得數量多的正類可以把分類面向負類的方向,因而影響了結果的準確性。對付資料集偏斜問題的方法之一就是在懲罰因子上作文章,就是給樣本數量少的負類更大的懲罰因子,表示我們重視這部分樣本。
上面所說的每一步都有很多細節值得改進推敲,有很多的演算法去進行試驗,去得到更好的分類準確率。
總結:進行分類預測的整個過程就是:1、資料準備:將資料特徵按照每行代表一個樣本的資料,其列數就是每個樣本的特徵數,排好矩陣,每個樣本對應的標籤標好,一定要注意,樣本與其標籤相對應。2、預處理:是否進行歸一化,是否進行降維。3、引數尋優:採用哪種尋優方式進行c和g的尋優。4:訓練SVMtrain:利用求得的最優引數進行模型訓練。5、預測SVMpredict:利用訓練得到的model進行預測。6、根據預測的結果,進行相應的引數的調整。
以上就是我在學習Libsvm-Faruto Ultimate工具箱的所有收穫,分享給大家,當然可能會有一些不足之處,希望大家批評指正,寫了好長時間呀哭奮鬥。後面在我的部落格中有相應的各個函式的測試樣例函式。

相關推薦

引數選取

分類演算法的大致流程:利用引數尋優函式進行引數尋優,這裡的引數是SVMtrain訓練模型的引數,引數找的好,模型訓練的就好,可以提高後面預測分類的準確率。不同的SVM型別需要尋優的引數不同。然後利用最優引數去訓練模型model,得到模型後就可以利用svmpredict函式進

libsvm 引數調整 並行選擇引數 c g SVMcg強化版

以下程式碼是SVMcg強化版,事實上,原版本一點都沒有進行作者提到的並行grid引數計算,所以有效程式碼恕我直言大概只有一句呼叫svm運算的。已經不知道原作者是誰了。 主要是把引數矩陣攤平了,一起算,這樣可以呈現最大並行效果。 function [bestacc,bestc,bestg,

時間序列--ARIMA(尋找引數

1.評估ARIMA模型 分為訓練集合測試集,在測試集上比較預測值和真實值的mse 注意:因為ARIMA只能預測一步,所以多一步預測,我們要滾動著來,建立了很多同參數的ARIMA模型,這體現在程式碼的history.append() # evaluate an ARIMA model fo

2.9 線性迴歸演算法學習——kNN模型解決迴歸問題及網格搜尋引數

模型引入from sklearn.neighbors import KNeighborsRegressor例項化物件knn_reg=KNeighborsRegressor()訓練資料集knn_reg.fit(X_train,y_train)檢視評估的成績knn_reg.sco

通過網格搜尋和巢狀交叉驗證尋找機器學習模型的引數

在機器學習的模型中,通常有兩類引數,第一類是通過訓練資料學習得到的引數,也就是模型的係數,如迴歸模型中的權重係數,第二類是模型演算法中需要進行設定和優化的超參,如logistic迴歸中的正則化係數和決策樹中的樹的深度引數等。在上一篇文章中,我們通過驗證曲線來尋找最優的超參,在

【Machine Learning】【Python】選擇引數(Decision Tree, Random Forest, Adaboost, GBDT)

之前訓練SVM用了PSO太慢了。 這次比較幸運看到一篇關於調參的部落格。 給了很大啟發。 不具體針對某種分類演算法詳細說了,這個真的需要大量實踐經驗,這也是我欠缺的。 我參考上面部落格做了一些實驗,準確率是在逐步提升,但因為我特徵處理這塊做的不好,準確率提升不明顯。 再

R語言︱LDA主題模型——主題數選取(topicmodels)+LDAvis視覺化(lda+LDAvis)

這篇文章來自微軟研究院和哥倫比亞大學的學者共同完成。作者中的Chong Wang以及John Paisley都有長期從事Graphical Models以及Topic Models的研究工作。這篇文章想要做的事情非常直觀,那就是想把在深度學習中非常有效的序列模型——RNN和在文件分析領域非常有效的Topic

十、用scikit-learn的網格搜尋快速找到模型引數

任何一種機器學習模型都附帶很多引數,不同場景對應不同的最佳引數,手工嘗試各種引數無疑浪費很多時間,scikit-learn幫我們實現了自動化,那就是網格搜尋 網格搜尋 這裡的網格指的是不同引數不同取值交叉後形成的一個多維網格空間。比如引數a可以取1、2,引數b可以取3、4,引數c可以取5、6,那麼形

貪心法----選取當前策略

貪心的特點是選取當前最優策略,這也帶來了缺點,當前的最優解不一定是最終的最優解。 1.硬幣問題          有1元、5元、10元、50元、100元、500元的硬幣各C1、C5、C10、C50、C100、C500枚。現在要用這些硬幣來

機器學習精簡教程之九——用scikit-learn的網格搜尋快速找到模型引數

本文轉自:http://www.shareditor.com/blogshow/?blogId=60 任何一種機器學習模型都附帶很多引數,不同場景對應不同的最佳引數,手工嘗試各種引數無疑浪費很多時間,scikit-learn幫我們實現了自動化,那就是網格搜尋 。 網格

SVM訓練時交叉驗證引數選擇

void SVMExample::InitParams() {param.svm_type = C_SVC;param.kernel_type = RBF;param.degree = 3;param.gamma = (double)1/30;param.coef0 = 0

SpringBoot引數非空校驗的非實現歷程

  SpringBoot引數非空校驗在網上已經有很多資料了,自己最近要實現這一個功能,大概看了下覺得沒什麼難度,不想在過程中還是遇到了一些問題,在此記錄,希望有遇到和我一樣問題的人和過路大神不吝指教。   需求是做一個全域性請求引數非空校驗和異常攔截,spring提供的@Validated和Hibernat

String 經常用法算法實現總結 (二)

lean ... itl min empty turn system then 實現 1. String getOrderedString(boolean isDuplicated, String … str) 說明: Orders all characters in

[POJ 2728]Desert King(0-1分數規劃/比率生成樹)

eat ice finall nec clu bool ann channels try Description David the Great has just become the king of a desert country. To win the respec

Uva 10003 Cutting Sticks (類似於矩陣連乘的dp)

out min 分析 sin [] can 任務 cin algo 題意:有一根長度為L的木棍,和n個切割點的位置(按照從小到大排序),你的任務是在這些切割點的位置把棍子切成n+1份,使得總切割費用最小。每次切割的費用等於被切的木棍長度 思路:這道題與最優矩陣連乘的思想一樣

(筆記)斯坦福機器學習第七講--間隔分類器

滿足 優化 最終 clas 定義 mar 擴展 strong play 本講內容 1.Optional margin classifier(最優間隔分類器) 2.primal/dual optimization(原始優化問題和對偶優化問題)KKT conditions(KK

POJ 3621 Sightseeing Cows(比例環+SPFA檢測)

span fort exp ros 說明 6.0 lines choice stdio.h Sightseeing Cows Time Limit: 1000MS Memory Limit: 65536K Total Submission

P1073 貿易

相同 一種商品 ade bar article https 同城 最大 pre P1073 最優貿易 題目描述 C 國有 n 個大城市和 m 條道路,每條道路連接這 n 個城市中的某兩個城市。任意兩個 城市之間最多只有一條道路直接相連。

267. [NOI1997] 乘車

names ios 可能 while include 他在 printf 數字 i+1 ★★ 輸入文件:bustravel.in 輸出文件:bustravel.out 簡單對比 時間限制:1 s 內存限制:128 MB H城是一個旅遊勝地,每年都有成千上萬的

【圖論】貿易

價格 highlight style 不同 相同 -s 存在 n) size [NOIP2009]最優貿易 描述   C 國有 n 個大城市和 m 條道路,每條道路連接這 n 個城市中的某兩個城市。任意兩個城市之間最多只有一條道路直接相連。這 m 條道路中有一部分為單向