文章原創(chuàng),最近更新:2018-06-4
1.交叉驗(yàn)證
2.模型評(píng)估方法
3.正則化懲罰
4.邏輯回歸模型
課程來(lái)源: python數(shù)據(jù)分析與機(jī)器學(xué)習(xí)實(shí)戰(zhàn)-唐宇迪
課程資料:這里所涉及到的練習(xí)資料creditcard.csv相關(guān)的鏈接以及密碼如下:
鏈接: https://pan.baidu.com/s/1APgU4cTAaM9zb8_xAIc41Q 密碼: xgg7
1.交叉驗(yàn)證
這節(jié)課的主要內(nèi)容是交叉驗(yàn)證的學(xué)習(xí).首先要了解交叉驗(yàn)證,具體如下:
- 什么是交叉驗(yàn)證法?
在建立分類模型時(shí),交叉驗(yàn)證(Cross Validation)簡(jiǎn)稱為CV,CV是用來(lái)驗(yàn)證分類器的性能。它的主體思想是將原始數(shù)據(jù)進(jìn)行分組,一部分作為訓(xùn)練集,一部分作為驗(yàn)證集。利用訓(xùn)練集訓(xùn)練出模型,利用驗(yàn)證集來(lái)測(cè)試模型,以評(píng)估分類模型的性能。
訓(xùn)練數(shù)據(jù)上的誤差叫做訓(xùn)練誤差,它對(duì)算法模型的評(píng)價(jià)過(guò)于樂(lè)觀。利用測(cè)試數(shù)據(jù)測(cè)量的是測(cè)試誤差,我門報(bào)告的是測(cè)試誤差。有的時(shí)候訓(xùn)練集上的正確率可能達(dá)到100%,但是在測(cè)試集上可能和隨機(jī)猜測(cè)差不多。
- 為什么用交叉驗(yàn)證法?
交叉驗(yàn)證用于評(píng)估模型的預(yù)測(cè)性能,尤其是訓(xùn)練好的模型在新數(shù)據(jù)上的表現(xiàn),可以在一定程度上減小過(guò)擬合。
還可以從有限的數(shù)據(jù)中獲取盡可能多的有效信息。
-
交叉驗(yàn)證常用的幾種方法:
1.去一法 Leave-One-Out Cross Validation(記為L(zhǎng)OO-CV)**
它的做法是,從訓(xùn)練集中拿出一個(gè)樣本,并在缺少這個(gè)樣本的數(shù)據(jù)上訓(xùn)練出一個(gè)模型,然后看模型是否能對(duì)這個(gè)樣本正確分類。假設(shè)樣本個(gè)數(shù)有N個(gè),則該方法一共要訓(xùn)練出N個(gè)模型,利用這N個(gè)模型最終的驗(yàn)證集的分類準(zhǔn)確率的平均數(shù)作為此下LOO-CV分類器的性能指標(biāo)。然而隨著數(shù)據(jù)量的增大,工作量會(huì)劇增,在時(shí)間是處于劣勢(shì)。但是它具有顯著德爾優(yōu)點(diǎn):
1)每一回合中幾乎所有的樣本皆用于訓(xùn)練模型,因此最接近原始樣本的分布,這樣評(píng)估所得的結(jié)果比較可靠。
2)實(shí)驗(yàn)過(guò)程中沒(méi)有隨機(jī)因素會(huì)影響實(shí)驗(yàn)數(shù)據(jù),確保實(shí)驗(yàn)過(guò)程是可以被復(fù)制的。2、k折交叉驗(yàn)證 K-fold Cross Validation(記為K-CV)
K折交叉驗(yàn)證是以部分代價(jià)去獲得去一法的大部分收益,這里的k折是吧數(shù)據(jù)分為k組。它的做法是將k-1組作為訓(xùn)練集訓(xùn)練出一個(gè)模型,然后將剩下的一組用做測(cè)試集。利用這k個(gè)模型最終的平均正確率來(lái)衡量模型的正確率。常使用的一般是5折10折,5折交叉驗(yàn)證是將數(shù)據(jù)分為5組。實(shí)際做法是把20%的數(shù)據(jù)拿出去作為測(cè)試集,將剩下的80%數(shù)據(jù)訓(xùn)練模型。使用80%或者90%的數(shù)據(jù)與使用所有數(shù)據(jù)的效果比較接近。
使用交叉驗(yàn)證時(shí),需要謹(jǐn)慎保持?jǐn)?shù)數(shù)據(jù)的分布平衡,不能在某一折中全部是一類的數(shù)據(jù)。
學(xué)習(xí)參考鏈接:
1、為什么要用交叉驗(yàn)證
2、一篇文章,帶你明白什么是過(guò)擬合,欠擬合以及交叉驗(yàn)證
比如有個(gè)集合叫data,通常建立機(jī)器模型的時(shí)候,先對(duì)數(shù)據(jù)進(jìn)行切分或者選擇,取前面80%的數(shù)據(jù)當(dāng)成訓(xùn)練集,取20%的數(shù)據(jù)當(dāng)成測(cè)試集。80%的數(shù)據(jù)是來(lái)建立一個(gè)模型,剩下的20%的數(shù)據(jù)是用來(lái)測(cè)試模型的表達(dá)效果是怎么樣的?
- 因此第一步是將數(shù)據(jù)進(jìn)行切分,切分成訓(xùn)練集以及測(cè)試集。這部分操作是必須要做的。
- 第二步還要在訓(xùn)練集進(jìn)行平均切分,比如平均切分成3份,分別是數(shù)據(jù)集1,2,3。為什么要進(jìn)行隨機(jī)的切分呢?因?yàn)樽罱K的測(cè)試數(shù)據(jù)集,只能夠在一個(gè)最終的測(cè)試階段,在模型以及參數(shù)都調(diào)整好之后,才能用測(cè)試集去測(cè)試當(dāng)前模型的效果是怎么樣的?
在建立模型的時(shí)候,不管建立什么樣的模型,這個(gè)模型伴隨著很多參數(shù),有不同的參數(shù)進(jìn)行選擇,這個(gè)參數(shù)選擇大比較好,還是選擇小比較好一些?從經(jīng)驗(yàn)值角度來(lái)說(shuō),肯定沒(méi)辦法很準(zhǔn)的,怎么樣去確定這個(gè)參數(shù)呢?只能通過(guò)交叉驗(yàn)證的方式。
那什么又叫交叉驗(yàn)證呢?
- 第一次:將數(shù)據(jù)集1,2分別建立模型,用數(shù)據(jù)集3在當(dāng)前權(quán)重下一個(gè)驗(yàn)證的效果。數(shù)據(jù)集3是個(gè)驗(yàn)證集,驗(yàn)證集是訓(xùn)練集的一部分。用驗(yàn)證集去收集模型是好還是壞?
- 第二次:將數(shù)據(jù)集1,3分別建立模型,用數(shù)據(jù)集2在當(dāng)前權(quán)重下一個(gè)驗(yàn)證的效果。
- 第三次:將數(shù)據(jù)集2,3分別建立模型,用數(shù)據(jù)集1在當(dāng)前權(quán)重下一個(gè)驗(yàn)證的效果。
為什么要驗(yàn)證模型3次呢?其實(shí)這些操作并非是重復(fù)的,每一次的訓(xùn)練集是不一樣的。(比如第一次的訓(xùn)練集是1和2,第二次的訓(xùn)練集是1和3,第三次的訓(xùn)練集是3和2)此外驗(yàn)證集也是不一樣的。(比如第一次的驗(yàn)證集是3,第二次的驗(yàn)證集是2,第三次的驗(yàn)證集是1)
現(xiàn)在是比較求穩(wěn)的操作,如果只是求一次的交叉驗(yàn)證,這樣的操作會(huì)存在風(fēng)險(xiǎn)。比如只做第一次交叉驗(yàn)證,會(huì)使3驗(yàn)證集偏簡(jiǎn)單一些。會(huì)使模型效果偏高,此外模型有些數(shù)據(jù)是錯(cuò)誤值以及離群值,如果把這些不太好的數(shù)據(jù)當(dāng)成驗(yàn)證集,會(huì)使模型的效果偏低的。模型當(dāng)然是不希望偏高也不希望偏低,那就需要多做幾次交叉驗(yàn)證模型,求平均值。這里有1,2,3分別求驗(yàn)證集,每個(gè)驗(yàn)證集都有評(píng)估的標(biāo)準(zhǔn)。最終模型的效果將1,2,3的評(píng)估效果加在一起,再除以3,就可以得到模型一個(gè)大致的效果。
交叉驗(yàn)證只是做一步求穩(wěn)的操作,要讓模型的評(píng)估效果是可信的。既不能偏高也不能偏低,就這樣求了平均值來(lái)當(dāng)模型的效果。
之前說(shuō)到要做數(shù)據(jù)交叉驗(yàn)證,要對(duì)原始數(shù)據(jù)集進(jìn)行切分。
- sklearn.cross_validation是交叉驗(yàn)證模塊,train_test_split對(duì)原始數(shù)據(jù)集有進(jìn)行切分的操作。
- test_size = 0.3實(shí)際做法是把30%的數(shù)據(jù)拿出去作為測(cè)試集,將剩下的70%數(shù)據(jù)訓(xùn)練模型。這個(gè)可以根據(jù)實(shí)際需求進(jìn)行修改。
- random_state = 0,為了使訓(xùn)練集以及測(cè)試集一樣,設(shè)置隨機(jī)狀態(tài)為0,這樣就拋開了樣本對(duì)模型的影響。(之前有對(duì)原始數(shù)據(jù)集進(jìn)行洗牌,再切分測(cè)試集以及訓(xùn)練集,才能保證隨機(jī)切分。)
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.3, random_state = 0)
之前做了下采樣的數(shù)據(jù)集,讓0和1都比較少,要對(duì)下采樣數(shù)據(jù)集進(jìn)行的交叉切分相同的操作。
X_train_undersample, X_test_undersample, y_train_undersample, y_test_undersample = train_test_split(X_undersample
,y_undersample
,test_size = 0.3
,random_state = 0)
為什么同時(shí)要對(duì)下采樣以及原始的數(shù)據(jù)進(jìn)行交叉切分呢?
現(xiàn)在要拿下采樣的數(shù)據(jù)進(jìn)行模型訓(xùn)練的操作,但是模型訓(xùn)練完要進(jìn)行測(cè)試,那么測(cè)試的時(shí)候拿什么數(shù)據(jù)集進(jìn)行測(cè)試呢?是拿下采樣切分的測(cè)試數(shù)據(jù)集進(jìn)行測(cè)試么?二下采樣切分的測(cè)試數(shù)據(jù)數(shù)量比較少,而且也是下采樣的測(cè)試數(shù)據(jù)集,不具備原始數(shù)據(jù)的分布規(guī)則.最終的測(cè)試集是拿原始數(shù)據(jù)集中的測(cè)試數(shù)據(jù)集再進(jìn)行測(cè)試.
因此這里有2種切分的方式,第一種是對(duì)原始數(shù)據(jù)集即28萬(wàn)個(gè)數(shù)據(jù)進(jìn)行交叉切分.然后有對(duì)984個(gè)下采樣數(shù)據(jù)集又進(jìn)行了一次交叉切分,
from sklearn.cross_validation import train_test_split
# Whole dataset
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.3, random_state = 0)
print("Number transactions train dataset: ", len(X_train))
print("Number transactions test dataset: ", len(X_test))
print("Total number of transactions: ", len(X_train)+len(X_test))
# Undersampled dataset
X_train_undersample, X_test_undersample, y_train_undersample, y_test_undersample = train_test_split(X_undersample
,y_undersample
,test_size = 0.3
,random_state = 0)
print("")
print("Number transactions train dataset: ", len(X_train_undersample))
print("Number transactions test dataset: ", len(X_test_undersample))
print("Total number of transactions: ", len(X_train_undersample)+len(X_test_undersample))
輸出結(jié)果如下:
Number transactions train dataset: 199364
Number transactions test dataset: 85443
Total number of transactions: 284807
Number transactions train dataset: 688
Number transactions test dataset: 296
Total number of transactions: 984
后面會(huì)拿原始數(shù)據(jù)中的85443的數(shù)據(jù)集進(jìn)行測(cè)試操作,而下采樣的數(shù)據(jù)總共有984個(gè),訓(xùn)練集的數(shù)據(jù)共有668個(gè),測(cè)試集有296個(gè),上面已經(jīng)將數(shù)據(jù)集進(jìn)行了切分,就可以進(jìn)行建模的操作,在建模的過(guò)程中要使用邏輯回歸.
2.模型評(píng)估方法
假設(shè)有1000個(gè)病人的數(shù)據(jù),要對(duì)1000個(gè)病人進(jìn)行分類,有哪些是癌癥的?哪些不是患有癌癥的?
假設(shè)有990個(gè)人不患癌癥,10個(gè)人是患癌癥.用一個(gè)最常見(jiàn)的評(píng)估標(biāo)準(zhǔn),比方說(shuō)精度,就是真實(shí)值與預(yù)測(cè)值之間的差異.真實(shí)值用y來(lái)表示,預(yù)測(cè)值用y1來(lái)表示.y真實(shí)值1,2,3...10,共有10個(gè)樣本,y1預(yù)測(cè)值1,2,3...10,共有10個(gè)樣本.精度就是看真實(shí)值y與預(yù)測(cè)值y1是否一樣的.要么都是0,要么都是1,如果是一致,就用=表示,比如1號(hào)真實(shí)值樣本=預(yù)測(cè)值的1號(hào)樣本,如果不相等就用不等號(hào)來(lái)表示.如果等號(hào)出現(xiàn)了8個(gè),那么它的精確度為8/10=80%,從而確定模型的精度.
990個(gè)人不患癌癥,10個(gè)人是患癌癥建立一個(gè)模型,所有的預(yù)測(cè)值都會(huì)建立一個(gè)正樣本.對(duì)1000個(gè)樣本輸入到模型,它的精確度是多少呢?990/1000=99%
這個(gè)模型把所有的值都預(yù)測(cè)成正樣本,但是沒(méi)有得到任何一個(gè)負(fù)樣本.在醫(yī)院是想得到癌癥的識(shí)別,但是檢查出來(lái)的結(jié)果是0個(gè),雖然精度達(dá)到了99%,
但這個(gè)模型是沒(méi)有任何的含義的,因?yàn)橐粋€(gè)癌癥病人都找不出來(lái).在建立模型的時(shí)候一定要想好一件事,模型雖然很容易建立出來(lái),那么難點(diǎn)是應(yīng)該怎么樣去評(píng)估這樣的模型呢?
剛才提到了用精度去評(píng)估模型,但是精度有些時(shí)候是騙人的.尤其是在樣本數(shù)據(jù)不均衡的情況下.
接下來(lái)要講到一個(gè)知識(shí)點(diǎn)叫recall,叫召回率或叫查全率.recall有0或者1,我們的目標(biāo)是找出患有癌癥的那10個(gè)人.因此根據(jù)目標(biāo)制定衡量的標(biāo)準(zhǔn).就是有10個(gè)癌癥病人,能夠檢測(cè)出來(lái)有幾個(gè)?如果檢測(cè)0個(gè)癌癥病人,那么recall值就是0/10=0;如果檢測(cè)2個(gè)癌癥病人,那么recall值就是2/10=20%.用recall檢測(cè)模型的效果更科學(xué)一些.
建立模型無(wú)非是選擇一些參數(shù),如果精度專用recall來(lái)表示,也并非那么容易.在統(tǒng)計(jì)學(xué)中會(huì)經(jīng)常提到的4個(gè)詞,分別如下:

比如一個(gè)班級(jí)有80個(gè)男生,20個(gè)女生,共100個(gè)人,在100多個(gè)人中有個(gè)目標(biāo),把所有的女生都抓出來(lái).建立一個(gè)模型,挑選50個(gè)人,預(yù)測(cè)結(jié)果是20個(gè)是女的,剩下30個(gè)是男的.
- TP:表示預(yù)測(cè)對(duì)的正例結(jié)果,比如判斷成正例,20個(gè)女生,當(dāng)成正例.
- FP:表示預(yù)測(cè)錯(cuò)的正例結(jié)果,把負(fù)例判斷成正例,比如把男生判斷成女生,共有30個(gè).
- FN:就是把女生錯(cuò)當(dāng)成男生的例子為0個(gè).
- TN:就是把男生判斷成了男生,因此等于50.
這里的Recall = TP/(TP+FN)
3.正則化懲罰
先導(dǎo)入機(jī)器學(xué)習(xí)建模的庫(kù)
from sklearn.linear_model import LogisticRegression
from sklearn.cross_validation import KFold, cross_val_score
from sklearn.metrics import confusion_matrix,recall_score,classification_report
from sklearn.linear_model import LogisticRegression邏輯回歸
-
from sklearn.cross_validation import KFold, cross_val_score,
- 這里的KFold是指交叉驗(yàn)證的時(shí)候,可以選擇做幾倍的交叉驗(yàn)證.之前有提到將原始的訓(xùn)練集切分成3份,不光可以切分成3份,也可以切分成4份或者5份都可以的,可以根據(jù)自己的喜好,任意的切分.
- cross_val_score值是指交叉驗(yàn)證評(píng)估得到的結(jié)果,
-
from sklearn.metrics import confusion_matrix,recall_score,classification_report
- confusion_matrix是混淆矩陣
在機(jī)器建模的時(shí)候需要做這樣的一件事,要做交叉驗(yàn)證,要把原始的數(shù)據(jù)集切分成幾部分,fold = KFold(len(y_train_data),5,shuffle=False) ,這里將原始數(shù)據(jù)傳進(jìn)來(lái),并切分成了5部分.
在邏輯回歸當(dāng)中,需要有寫參數(shù)傳進(jìn)來(lái),今天的參數(shù)叫做正則化懲罰項(xiàng),什么叫正則化懲罰?
比如有A模型:?1、?2、?3...?10,比如還有B模型:?1、?2、?3...?10,這兩個(gè)模型的recall值都是等于90%。如果兩個(gè)模型的recall值都是等于90%,是不是隨便選一個(gè)都可以呢?
比如A模型的原點(diǎn)浮動(dòng)比較大,具體如截圖:

比如B模型的原點(diǎn)浮動(dòng)比較小,具體如截圖:

雖然兩個(gè)模型的recall值都是等于90%,A模型的浮動(dòng)范圍太大了,都希望模型更加穩(wěn)定一些,不光滿足訓(xùn)練的數(shù)據(jù),還要盡可能的滿足測(cè)試數(shù)據(jù)。因此希望模型的浮動(dòng)差異更小一些,差異小可以使過(guò)度擬合的風(fēng)險(xiǎn)更小一些。
過(guò)度擬合的意思是在訓(xùn)練集表達(dá)效果很好,但是在測(cè)試集表達(dá)效果很差,因此這組模型發(fā)生了過(guò)擬合。過(guò)擬合是非常常見(jiàn)的現(xiàn)象,很大程度上是因?yàn)闄?quán)重參數(shù)浮動(dòng)較大引起的,因此希望得到B模型,因?yàn)锽模型的浮動(dòng)差異比較小。
那么怎么樣能夠得到B模型呢?從而就引入了正則化的東西,懲罰模型的?,因?yàn)槟P偷臄?shù)據(jù)有時(shí)候分布大,有時(shí)候分布小。希望大力度懲罰A模型,小力度懲罰B模型,可不可以呢?
- L2正則化
首先介紹一些L2正則化,對(duì)于目標(biāo)損失函數(shù)來(lái)說(shuō),希望目標(biāo)函數(shù)是越低越好的,在懲罰的過(guò)程中,需要在(loss)損失目標(biāo)函數(shù)中+1/2w*w,即就是如下截圖:

對(duì)于A模型,w值浮動(dòng)比較大,如果計(jì)算w*w的話,這樣的話計(jì)算的目標(biāo)損失函數(shù)的值就會(huì)更大。對(duì)于B模型而言,計(jì)算的目標(biāo)損失函數(shù)的值也是如此。
分別計(jì)算A、B模型中的loss+1/2w*w中的值,哪個(gè)值更加低?
- L1正則化
(loss)損失目標(biāo)函數(shù)中+|w|,去計(jì)算當(dāng)前的懲罰力度是多少?
因此有兩種懲罰函數(shù),一種是L2正則化,一種是L1正則化。
在判斷之前需要設(shè)置好參數(shù),需要設(shè)置當(dāng)前懲罰的力度有多大?可以設(shè)置成0.1懲罰力度比較小,也可以設(shè)置懲罰力度為1,也可以設(shè)置懲罰力度為10。但是懲罰力度等于多少的時(shí)候,效果比較好呢?具體多少也不知道,需要通過(guò)交叉驗(yàn)證,去評(píng)估一下什么樣的參數(shù)達(dá)到更好的效果。
c_param_range = [0.01,0.1,1,10,100]這里就是前面提到的那一章的懲罰力度。需要將這5個(gè)參數(shù)不斷的嘗試。
這一部分內(nèi)容是可視化顯示,具體如下:
results_table = pd.DataFrame(index = range(len(c_param_range),2), columns = ['C_parameter','Mean recall score'])
results_table['C_parameter'] = c_param_range
在循環(huán)里面利用懲罰力度的參數(shù),看一下那個(gè)參數(shù)的取值效果更好.
for c_param in c_param_range:
print('-------------------------------------------')
print('C parameter: ', c_param)
print('-------------------------------------------')
print('')
下面的循環(huán)是對(duì)數(shù)據(jù)進(jìn)行交叉驗(yàn)證,具體如下:
lr = LogisticRegression(C = c_param, penalty = 'l1')首先建立邏輯回歸模型,在邏輯回歸函數(shù),傳進(jìn)C這個(gè)懲罰力度參數(shù).懲罰的方式可以選擇l1懲罰或者l2懲罰.
lr.fit(x_train_data.iloc[indices[0],:],y_train_data.iloc[indices[0],:].values.ravel())這個(gè)語(yǔ)句是對(duì)模型進(jìn)行訓(xùn)練,用交叉驗(yàn)證的方式建立一個(gè)模型.
y_pred_undersample = lr.predict(x_train_data.iloc[indices[1],:].values),建立完模型之后就可以進(jìn)行預(yù)測(cè).
比如在C=0的情況下,它的效果是多少的?并計(jì)算recall的值,
recall_acc = recall_score(y_train_data.iloc[indices[1],:].values,y_pred_undersample)
recall_accs.append(recall_acc)
print('Iteration ', iteration,': recall score = ', recall_acc)
4.邏輯回歸模型
完整的案例代碼如下:
def printing_Kfold_scores(x_train_data,y_train_data):
fold = KFold(len(y_train_data),5,shuffle=False)
# Different C parameters
c_param_range = [0.01,0.1,1,10,100]
results_table = pd.DataFrame(index = range(len(c_param_range),2), columns = ['C_parameter','Mean recall score'])
results_table['C_parameter'] = c_param_range
# the k-fold will give 2 lists: train_indices = indices[0], test_indices = indices[1]
j = 0
for c_param in c_param_range:
print('-------------------------------------------')
print('C parameter: ', c_param)
print('-------------------------------------------')
print('')
recall_accs = []
for iteration, indices in enumerate(fold,start=1):
# Call the logistic regression model with a certain C parameter
lr = LogisticRegression(C = c_param, penalty = 'l1')
# Use the training data to fit the model. In this case, we use the portion of the fold to train the model
# with indices[0]. We then predict on the portion assigned as the 'test cross validation' with indices[1]
lr.fit(x_train_data.iloc[indices[0],:],y_train_data.iloc[indices[0],:].values.ravel())
# Predict values using the test indices in the training data
y_pred_undersample = lr.predict(x_train_data.iloc[indices[1],:].values)
# Calculate the recall score and append it to a list for recall scores representing the current c_parameter
recall_acc = recall_score(y_train_data.iloc[indices[1],:].values,y_pred_undersample)
recall_accs.append(recall_acc)
print('Iteration ', iteration,': recall score = ', recall_acc)
# The mean value of those recall scores is the metric we want to save and get hold of.
results_table.ix[j,'Mean recall score'] = np.mean(recall_accs)
j += 1
print('')
print('Mean recall score ', np.mean(recall_accs))
print('')
best_c = printing_Kfold_scores(X_train_undersample,y_train_undersample)
輸出結(jié)果如下:
-------------------------------------------
C parameter: 0.01
-------------------------------------------
Iteration 1 : recall score = 0.958904109589
Iteration 2 : recall score = 0.917808219178
Iteration 3 : recall score = 1.0
Iteration 4 : recall score = 0.972972972973
Iteration 5 : recall score = 0.954545454545
Mean recall score 0.960846151257
-------------------------------------------
C parameter: 0.1
-------------------------------------------
Iteration 1 : recall score = 0.835616438356
Iteration 2 : recall score = 0.86301369863
Iteration 3 : recall score = 0.915254237288
Iteration 4 : recall score = 0.932432432432
Iteration 5 : recall score = 0.878787878788
Mean recall score 0.885020937099
-------------------------------------------
C parameter: 1
-------------------------------------------
Iteration 1 : recall score = 0.835616438356
Iteration 2 : recall score = 0.86301369863
Iteration 3 : recall score = 0.966101694915
Iteration 4 : recall score = 0.945945945946
Iteration 5 : recall score = 0.893939393939
Mean recall score 0.900923434357
-------------------------------------------
C parameter: 10
-------------------------------------------
Iteration 1 : recall score = 0.849315068493
Iteration 2 : recall score = 0.86301369863
Iteration 3 : recall score = 0.966101694915
Iteration 4 : recall score = 0.959459459459
Iteration 5 : recall score = 0.893939393939
Mean recall score 0.906365863087
-------------------------------------------
C parameter: 100
-------------------------------------------
Iteration 1 : recall score = 0.86301369863
Iteration 2 : recall score = 0.86301369863
Iteration 3 : recall score = 0.966101694915
Iteration 4 : recall score = 0.959459459459
Iteration 5 : recall score = 0.893939393939
Mean recall score 0.909105589115
*********************************************************************************
Best model to choose from cross validation is with C parameter = 0.01
*********************************************************************************
C parameter是懲罰力度參數(shù),從這里可以看出哪些recall值比較低?哪些recall值比較高?希望找出較高模型的參數(shù),這個(gè)數(shù)值是其中一個(gè)5倍交叉驗(yàn)證的結(jié)果值,具體如下:
Iteration 1 : recall score = 0.849315068493
Iteration 2 : recall score = 0.86301369863
Iteration 3 : recall score = 0.966101694915
Iteration 4 : recall score = 0.959459459459
Iteration 5 : recall score = 0.893939393939
通過(guò)結(jié)果可以看出,當(dāng)懲罰參數(shù)是0.01,recall的值最高.