亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python中sklearn實現(xiàn)交叉驗證示例分析

 更新時間:2023年08月19日 10:23:34   作者:嵌入式技術(shù)  
這篇文章主要介紹了Python中sklearn實現(xiàn)交叉驗證,本文python的版本為3.8,各個版本之間函數(shù)名字略有不同,但是原理都是一樣的,集成開發(fā)環(huán)境使用的是Anaconda的Spyder,需要的朋友可以參考下

Python中sklearn實現(xiàn)交叉驗證

一、概述

1.1 交叉驗證的含義與作用

交叉驗證的思想是,將數(shù)據(jù)集分為k等份,其中k-1份作為訓(xùn)練集,單獨留出的一份作為測試集。進(jìn)行模型驗證的目的就是為了確定最合適的模型,對于監(jiān)督學(xué)習(xí)而言,為了使得創(chuàng)建的模型具有很好的泛化能力,通常需要將得到的數(shù)據(jù)預(yù)留出測試數(shù)據(jù)進(jìn)行交叉驗證。因此,交叉驗證的目的主要為了解決建立模型的過擬合問題。交叉驗證的具體過程為,將所有數(shù)據(jù)分為訓(xùn)練集與測試集兩部分,采用訓(xùn)練集對模型進(jìn)行訓(xùn)練。采用測試準(zhǔn)確度指標(biāo),對得到的模型用測試集來衡量模型的預(yù)測能力。

1.2 交叉驗證的分類

1、k折交叉驗證(KFold),將數(shù)據(jù)集劃分為k等份,使用python的sklearn.model_selection庫中的KFold方法實現(xiàn)。
2、p次k折交叉驗證(RepeatedKFold),在實際應(yīng)用中,只進(jìn)行以此k折交叉驗證往往不夠,需要進(jìn)行多次交叉驗證,使用python的sklearn.model_selection庫中RepeatedKFold方法實現(xiàn)。
3、留一法(LeaveOneOut),是對整個數(shù)據(jù)集每次選取一個樣本作為驗證集,其余樣本作為訓(xùn)練集。它是k折交叉驗證的一種特殊情況,即k=n(n為數(shù)據(jù)集的個數(shù))的情況,使用python的sklearn.model_selection庫中的LeaveOneOut方法實現(xiàn)。
4、留p法(LeavePOut),原理與留一法一樣,只不過是對整個數(shù)據(jù)集每次選取p個樣本作為驗證集,其余樣本作為訓(xùn)練集。它使用python的sklearn.model_selection庫中的LeavePOut方法實現(xiàn)。
5、隨機(jī)分配(ShuffleSplit),隨機(jī)把數(shù)據(jù)打亂,然后劃分訓(xùn)練集與測試集,使用python的sklearn.model_selection庫中的ShuffleSplit方法實現(xiàn)。
另外,針對某些特殊情況,通常采用特殊的交叉驗證方法:
1、對于分類數(shù)據(jù),預(yù)測目標(biāo)可能是不均勻分配的,比如抽煙的煙得肺癌的比率彼不抽的人大,這種情況的數(shù)據(jù)劃分通常采用StratifiedKFold、StratifiedShuffleSplit方法。
2、對于分組數(shù)據(jù)來說,它的劃分方法是不一樣的,主要的方法有 GroupKFold,LeaveOneGroupOut,LeavePGroupOut,GroupShuffleSplit。
3、對于時間關(guān)聯(lián)的數(shù)據(jù),方法有TimeSeriesSplit。

二、交叉驗證實例分析

本文python的版本為3.8,各個版本之間函數(shù)名字略有不同,但是原理都是一樣的,集成開發(fā)環(huán)境使用的是Anaconda的Spyder,以下程序都是經(jīng)過編譯后,順利執(zhí)行的,讀者如果有什么疑問,可以留言。

2.1 留一法實例

留一法的python源代碼如下所示:

from sklearn.datasets import load_iris  #導(dǎo)入鳶尾花數(shù)據(jù)庫
#下面語句導(dǎo)入留一法LeaveOneOut,交叉驗證評價指標(biāo)cross_val_score評價指標(biāo)
from sklearn.model_selection import LeaveOneOut, cross_val_score
#下面語句導(dǎo)入邏輯斯特回歸LogisticRegression
from sklearn.linear_model import LogisticRegression
iris = load_iris()	#將鳶尾花數(shù)據(jù)庫中的數(shù)據(jù)放入iris變量中
print('Iris labels:\n{}'.format(iris.target))	#輸出鳶尾花的目標(biāo)分類,共有三種分別表示為0,1,2
logreg = LogisticRegression()	#邏輯斯特回歸對象logreg
loout = LeaveOneOut()	#留一法對象loout
#下面的語句計算評價指標(biāo)并輸出到scores對象,采用cress_val_score方法,
#方法參數(shù)含義為,采用邏輯斯特回歸方法logreg擬合數(shù)據(jù):iris.data,iris.target,
#交叉驗證的方法為留一法loout
scores = cross_val_score(logreg,iris.data,iris.target,cv=loout)
#下面語句輸出每個樣本的擬合評價結(jié)果
print("leave-one-out cross validation scores:{}".format(scores))
#下面語句輸出整體評價結(jié)果,即所有樣本的評價結(jié)果平均值
print("Mean score of leave-one-out cross validation:{:.2f}".format(scores.mean()))

輸出結(jié)果如下圖所示:

在這里插入圖片描述

2.2 留p法實例

留p法的python源代碼如下所示:

#導(dǎo)入訓(xùn)練集數(shù)據(jù)劃分方法庫train_test_split、留p法庫LevePOut
from sklearn.model_selection import train_test_split, LeavePOut
from sklearn import datasets	#導(dǎo)入數(shù)據(jù)集
from sklearn import svm			#導(dǎo)入支持向量機(jī)svm
from sklearn.metrics import accuracy_score	#導(dǎo)入評價指標(biāo)庫
import numpy as np	#導(dǎo)入數(shù)學(xué)分析庫
iris = datasets.load_iris()		#將鳶尾花數(shù)數(shù)據(jù)放入iris變量中
clf_svc = svm.SVC(kernel='linear')	#線性核函數(shù)svm模型對象為clf_svc
lpo = LeavePOut(p=3)				#留p法對象lpo
lpo.get_n_splits(iris.data)		#對鳶尾花數(shù)據(jù)進(jìn)行劃分
mean_accuracy_score_list = []
for train_index, test_index in lpo.split(iris.data):
	clf_svc.fit(iris.data[train_index], iris.target[train_index])
	prediction = clf_svc.predict(iris.data[test_index])
	mean_accuracy_score_list.append(accuracy_score(iris.target[test_index],prediction))
print(np.average(mean_accuracy_score_list))

輸出結(jié)果如下圖所示:

在這里插入圖片描述

2.3 k折交叉驗證(Standard Cross Validation)實例

在python語言中,該方法需要通過 train_test_split 方法對數(shù)據(jù)集進(jìn)行劃分,然后再不同的數(shù)據(jù)集上進(jìn)行訓(xùn)練、測試評估,進(jìn)而得到評價結(jié)果。k通常取5或者10,如果取10,則表示再原始數(shù)據(jù)集上,進(jìn)行10次劃分,每次劃分都進(jìn)行以此訓(xùn)練、評估,對5次劃分結(jié)果求取平均值作為最終的評價結(jié)果。10折交叉驗證的原理圖如下所示:

在這里插入圖片描述

這里以python自帶的乳腺癌數(shù)據(jù)為分析對象,采用k折交叉驗證分析擬合模型的準(zhǔn)確性,k折交叉驗證的python源代碼如下所示:

#以下幾行代碼,例行公事,載入需要的庫函數(shù)
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
cancer = load_breast_cancer()
logreg = LogisticRegression()
#以下指令中的cross_val_score自動對乳腺癌數(shù)據(jù)進(jìn)行k折交叉驗證,
#注意:cross_val_score的參數(shù)cv沒有設(shè)置,默認(rèn)是3,可以修改cv為5或10,
#則該方法則成為5或10折交叉驗證
scores = cross_val_score(logreg,cancer.data,cancer.target)
#打印分析結(jié)果,由于默認(rèn)cv為3,即3折交叉驗證,所以第一個輸出為三個指標(biāo)值
print("Cross validation scores:{}".format(scores))
print("Mean cross validation score:{:2f}".format(scores.mean()))

輸出結(jié)果如下圖所示:

在這里插入圖片描述

2.4 隨機(jī)分配交叉驗證(Shuffle-split cross-validation)實例

使用ShuffleSplit方法,可以隨機(jī)的把數(shù)據(jù)打亂,然后分為訓(xùn)練集和測試集。隨機(jī)分配交叉驗證的python源代碼如下所示:

from sklearn.datasets import load_iris
from sklearn.model_selection import ShuffleSplit,cross_val_score
from sklearn.linear_model import LogisticRegression
iris = load_iris()
shufspl = ShuffleSplit(train_size=.5,test_size=.4,n_splits=8) #迭代8次;
logreg = LogisticRegression()
scores = cross_val_score(logreg,iris.data,iris.target,cv=shufspl)
print("shuffle split cross validation scores:\n{}".format(scores))
print("Mean score of shuffle split cross validation:{:.2f}".format(scores.mean()))

輸出結(jié)果如下圖所示:

在這里插入圖片描述

2.5 分層交叉驗證(Stratified k-fold cross validation)實例

分層交叉驗證(Stratified k-fold cross validation):首先它屬于交叉驗證類型,分層的意思是說在每一折中都保持著原始數(shù)據(jù)中各個類別的比例關(guān)系,比如說:原始數(shù)據(jù)有3類,比例為1:2:1,采用3折分層交叉驗證,那么劃分的3折中,每一折中的數(shù)據(jù)類別保持著1:2:1的比例,這樣的驗證結(jié)果更加可信。通常情況下,可以設(shè)置cv參數(shù)來控制幾折,但是我們希望對其劃分等加以控制,所以出現(xiàn)了KFold,KFold控制劃分折,可以控制劃分折的數(shù)目,是否打亂順序等,可以賦值給cv,用來控制劃分。分層交叉驗證的python源代碼如下所示:

from sklearn.datasets import load_iris
from sklearn.model_selection import ShuffleSplit,cross_val_score
from sklearn.linear_model import LogisticRegression
iris = load_iris()
shufspl = ShuffleSplit(train_size=.5,test_size=.4,n_splits=8) #迭代8次;
logreg = LogisticRegression()
scores = cross_val_score(logreg,iris.data,iris.target,cv=shufspl)
print("shuffle split cross validation scores:\n{}".format(scores))
print("Mean score of shuffle split cross validation:{:.2f}".format(scores.mean()))

輸出結(jié)果如下圖所示:

在這里插入圖片描述

到此這篇關(guān)于Python中sklearn實現(xiàn)交叉驗證的文章就介紹到這了,更多相關(guān)Python sklearn交叉驗證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談python新手中常見的疑惑及解答

    淺談python新手中常見的疑惑及解答

    下面小編就為大家?guī)硪黄獪\談python新手中常見的疑惑及解答。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • python super的使用方法及實例詳解

    python super的使用方法及實例詳解

    這篇文章主要介紹了python super的使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • Python?NumPy矩陣對象詳解及方法

    Python?NumPy矩陣對象詳解及方法

    這篇文章主要介紹了Python?NumPy矩陣對象詳解及方法,文章圍繞主題展開詳細(xì)的內(nèi)容戒殺,具有一定的參考價值,需要的朋友可以參考一下
    2022-09-09
  • Python函數(shù)值傳遞引用傳遞及形式參數(shù)和實際參數(shù)的區(qū)別

    Python函數(shù)值傳遞引用傳遞及形式參數(shù)和實際參數(shù)的區(qū)別

    這篇文章主要介紹了Python函數(shù)值傳遞引用傳遞及形式參數(shù)和實際參數(shù)的區(qū)別,具有一定的參考價值,需要的小伙伴可以參考一下,希望對你的學(xué)習(xí)有所幫助
    2022-05-05
  • Python?pass函數(shù)使用及其應(yīng)用的詳解

    Python?pass函數(shù)使用及其應(yīng)用的詳解

    Python中,pass是一種空語句,即不做任何事情,只起到占位符的作用,本文主要介紹了Python?pass函數(shù)使用及其應(yīng)用的詳解,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Python-Tkinter Text輸入內(nèi)容在界面顯示的實例

    Python-Tkinter Text輸入內(nèi)容在界面顯示的實例

    今天小編就為大家分享一篇Python-Tkinter Text輸入內(nèi)容在界面顯示的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python中Selenium上傳文件的幾種方式

    Python中Selenium上傳文件的幾種方式

    本文主要介紹了Python中Selenium上傳文件的幾種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • pygame實現(xiàn)貪吃蛇游戲(下)

    pygame實現(xiàn)貪吃蛇游戲(下)

    這篇文章主要為大家介紹了pygame實現(xiàn)貪吃蛇游戲的下篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 基于Python制作ASCII碼轉(zhuǎn)換器

    基于Python制作ASCII碼轉(zhuǎn)換器

    ASCII碼是基于拉丁字母的一套電腦編碼系統(tǒng),主要用于顯示現(xiàn)代英語和其他西歐語言。本文將利用Python制作一個ASCII碼轉(zhuǎn)換器,感興趣的可以動手試一試
    2022-02-02
  • Python基礎(chǔ)練習(xí)之用戶登錄實現(xiàn)代碼分享

    Python基礎(chǔ)練習(xí)之用戶登錄實現(xiàn)代碼分享

    這篇文章主要介紹了Python基礎(chǔ)練習(xí)之用戶登錄實現(xiàn)代碼分享,還是比較不錯的,這里分享給大家,供需要的朋友參考。
    2017-11-11

最新評論