最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

一、概述

1.1 交叉驗證的含義與作用

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

1.2 交叉驗證的分類

1、k折交叉驗證(KFold),將數(shù)據(jù)集劃分為k等份,使用python的sklearn.model_selection庫中的KFold方法實現(xiàn)。
2、p次k折交叉驗證(RepeatedKFold),在實際應用中,只進行以此k折交叉驗證往往不夠,需要進行多次交叉驗證,使用python的sklearn.model_selection庫中RepeatedKFold方法實現(xiàn)。
3、留一法(LeaveOneOut),是對整個數(shù)據(jù)集每次選取一個樣本作為驗證集,其余樣本作為訓練集。它是k折交叉驗證的一種特殊情況,即k=n(n為數(shù)據(jù)集的個數(shù))的情況,使用python的sklearn.model_selection庫中的LeaveOneOut方法實現(xiàn)。
4、留p法(LeavePOut),原理與留一法一樣,只不過是對整個數(shù)據(jù)集每次選取p個樣本作為驗證集,其余樣本作為訓練集。它使用python的sklearn.model_selection庫中的LeavePOut方法實現(xiàn)。
5、隨機分配(ShuffleSplit),隨機把數(shù)據(jù)打亂,然后劃分訓練集與測試集,使用python的sklearn.model_selection庫中的ShuffleSplit方法實現(xiàn)。
另外,針對某些特殊情況,通常采用特殊的交叉驗證方法:
1、對于分類數(shù)據(jù),預測目標可能是不均勻分配的,比如抽煙的煙得肺癌的比率彼不抽的人大,這種情況的數(shù)據(jù)劃分通常采用StratifiedKFold、StratifiedShuffleSplit方法。
2、對于分組數(shù)據(jù)來說,它的劃分方法是不一樣的,主要的方法有 GroupKFold,LeaveOneGroupOut,LeavePGroupOut,GroupShuffleSplit。
3、對于時間關聯(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  #導入鳶尾花數(shù)據(jù)庫
#下面語句導入留一法LeaveOneOut,交叉驗證評價指標cross_val_score評價指標
from sklearn.model_selection import LeaveOneOut, cross_val_score
#下面語句導入邏輯斯特回歸LogisticRegression
from sklearn.linear_model import LogisticRegression
iris = load_iris()	#將鳶尾花數(shù)據(jù)庫中的數(shù)據(jù)放入iris變量中
print('Iris labels:\n{}'.format(iris.target))	#輸出鳶尾花的目標分類,共有三種分別表示為0,1,2
logreg = LogisticRegression()	#邏輯斯特回歸對象logreg
loout = LeaveOneOut()	#留一法對象loout
#下面的語句計算評價指標并輸出到scores對象,采用cress_val_score方法,
#方法參數(shù)含義為,采用邏輯斯特回歸方法logreg擬合數(shù)據(jù):iris.data,iris.target,
#交叉驗證的方法為留一法loout
scores = cross_val_score(logreg,iris.data,iris.target,cv=loout)
#下面語句輸出每個樣本的擬合評價結果
print("leave-one-out cross validation scores:{}".format(scores))
#下面語句輸出整體評價結果,即所有樣本的評價結果平均值
print("Mean score of leave-one-out cross validation:{:.2f}".format(scores.mean()))

輸出結果如下圖所示:

在這里插入圖片描述

2.2 留p法實例

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

#導入訓練集數(shù)據(jù)劃分方法庫train_test_split、留p法庫LevePOut
from sklearn.model_selection import train_test_split, LeavePOut
from sklearn import datasets	#導入數(shù)據(jù)集
from sklearn import svm			#導入支持向量機svm
from sklearn.metrics import accuracy_score	#導入評價指標庫
import numpy as np	#導入數(shù)學分析庫
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ù)進行劃分
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))

輸出結果如下圖所示:

在這里插入圖片描述

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

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

在這里插入圖片描述

這里以python自帶的乳腺癌數(shù)據(jù)為分析對象,采用k折交叉驗證分析擬合模型的準確性,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ù)進行k折交叉驗證,
#注意:cross_val_score的參數(shù)cv沒有設置,默認是3,可以修改cv為5或10,
#則該方法則成為5或10折交叉驗證
scores = cross_val_score(logreg,cancer.data,cancer.target)
#打印分析結果,由于默認cv為3,即3折交叉驗證,所以第一個輸出為三個指標值
print("Cross validation scores:{}".format(scores))
print("Mean cross validation score:{:2f}".format(scores.mean()))

輸出結果如下圖所示:

在這里插入圖片描述

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

使用ShuffleSplit方法,可以隨機的把數(shù)據(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()))

輸出結果如下圖所示:

在這里插入圖片描述

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

分層交叉驗證(Stratified k-fold cross validation):首先它屬于交叉驗證類型,分層的意思是說在每一折中都保持著原始數(shù)據(jù)中各個類別的比例關系,比如說:原始數(shù)據(jù)有3類,比例為1:2:1,采用3折分層交叉驗證,那么劃分的3折中,每一折中的數(shù)據(jù)類別保持著1:2:1的比例,這樣的驗證結果更加可信。通常情況下,可以設置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()))

輸出結果如下圖所示:

在這里插入圖片描述

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

相關文章

  • 屬性與 @property 方法讓你的python更高效

    屬性與 @property 方法讓你的python更高效

    這篇文章主要介紹了python 屬性與 @property 方法的相關資料,幫助大家更好的理解和學習python,感興趣的朋友可以了解下
    2020-09-09
  • Python獲取當前文件所在目錄完整路徑的代碼實現(xiàn)

    Python獲取當前文件所在目錄完整路徑的代碼實現(xiàn)

    在Python編程中,有時需要獲取當前文件所在目錄的完整路徑,比如在讀取配置文件、加載數(shù)據(jù)文件時,需要基于當前文件的位置來確定文件的相對路徑,然而,實現(xiàn)這一功能會因Python版本和運行環(huán)境的不同而有所差異,本文小編給大家詳細介紹了獲取方法,需要的朋友可以參考下
    2025-06-06
  • Python實現(xiàn)動態(tài)圖解析、合成與倒放

    Python實現(xiàn)動態(tài)圖解析、合成與倒放

    這篇文章主要為大家詳細介紹了Python實現(xiàn)動態(tài)圖的解析、合成與倒放,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 一文詳解python如何將編寫的模塊打包上傳至pypi

    一文詳解python如何將編寫的模塊打包上傳至pypi

    我們此前花了很大功夫寫了一個極其簡單的web框架myWeb,想要給別人用的時候,需要讓別人拷貝源代碼才行,這太low了,所以本篇文章會介紹如何將自己寫的模塊打包上傳至pypi,以便讓需要的人通過pip進行安裝,感興趣的同學可以參考閱讀
    2023-05-05
  • 一篇超級全面的Python功能圖譜(推薦)

    一篇超級全面的Python功能圖譜(推薦)

    Python作為一種廣受歡迎的高級編程語言,不僅在基本語法上易于學習,還擁有強大的標準庫和活躍的開發(fā)社區(qū),本文詳細介紹了Python從基礎語法到高級應用的全面功能,并通過實際案例和代碼示例展示了其在科學計算、Web開發(fā)、機器學習等多個領域的應用,需要的朋友可以參考下
    2024-09-09
  • 運用TensorFlow進行簡單實現(xiàn)線性回歸、梯度下降示例

    運用TensorFlow進行簡單實現(xiàn)線性回歸、梯度下降示例

    這篇文章主要介紹了運用TensorFlow進行簡單實現(xiàn)線性回歸、梯度下降示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 在Python中輸入一個以空格為間隔的數(shù)組方法

    在Python中輸入一個以空格為間隔的數(shù)組方法

    今天小編就為大家分享一篇在Python中輸入一個以空格為間隔的數(shù)組方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Python簡單過濾字母和數(shù)字的方法小結

    Python簡單過濾字母和數(shù)字的方法小結

    這篇文章主要介紹了Python簡單過濾字母和數(shù)字的方法,涉及Python基于內(nèi)置函數(shù)與正則表達式進行字母和數(shù)字過濾的相關操作技巧,需要的朋友可以參考下
    2019-01-01
  • Django中的用戶身份驗證示例詳解

    Django中的用戶身份驗證示例詳解

    這篇文章主要給大家介紹了關于Django中用戶身份驗證的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用SQL Django具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-08-08
  • 基于Python寫個"點球大戰(zhàn)"小游戲

    基于Python寫個"點球大戰(zhàn)"小游戲

    這篇文章主要為大家詳細介紹了如何利用Python寫個簡單的"點球大戰(zhàn)"小游戲,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-12-12

最新評論

渭南市| 封开县| 凯里市| 祥云县| 灵寿县| 开鲁县| 随州市| 桂阳县| 无极县| 尚义县| 原平市| 漳州市| 普宁市| 全州县| 彭泽县| 涿鹿县| 澄城县| 泉州市| 故城县| 乌兰浩特市| 锦屏县| 金湖县| 宁德市| 大洼县| 吉水县| 丹寨县| 甘德县| 新昌县| 理塘县| 通辽市| 双桥区| 津南区| 桂东县| 皋兰县| 德惠市| 革吉县| 咸丰县| 乐平市| 九寨沟县| 清原| 灵寿县|