python實(shí)現(xiàn)K折交叉驗(yàn)證
本文實(shí)例為大家分享了python實(shí)現(xiàn)K折交叉驗(yàn)證的具體代碼,供大家參考,具體內(nèi)容如下
用KNN算法訓(xùn)練iris數(shù)據(jù),并使用K折交叉驗(yàn)證方法找出最優(yōu)的K值
import numpy as npfrom sklearn import datasetsfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.model_selection import KFold # 主要用于K折交叉驗(yàn)證# 導(dǎo)入iris數(shù)據(jù)集iris = datasets.load_iris()X = iris.datay = iris.targetprint(X.shape,y.shape)# 定義想要搜索的K值,這里定義8個(gè)不同的值ks = [1,3,5,7,9,11,13,15]# 進(jìn)行5折交叉驗(yàn)證,KFold返回的是每一折中訓(xùn)練數(shù)據(jù)和驗(yàn)證數(shù)據(jù)的index# 假設(shè)數(shù)據(jù)樣本為:[1,3,5,6,11,12,43,12,44,2],總共10個(gè)樣本# 則返回的kf的格式為(前面的是訓(xùn)練數(shù)據(jù),后面的驗(yàn)證集):# [0,1,3,5,6,7,8,9],[2,4]# [0,1,2,4,6,7,8,9],[3,5]# [1,2,3,4,5,6,7,8],[0,9]# [0,1,2,3,4,5,7,9],[6,8]# [0,2,3,4,5,6,8,9],[1,7]kf = KFold(n_splits = 5, random_state=2001, shuffle=True)# 保存當(dāng)前最好的k值和對(duì)應(yīng)的準(zhǔn)確率best_k = ks[0]best_score = 0# 循環(huán)每一個(gè)k值for k in ks: curr_score = 0 for train_index,valid_index in kf.split(X):# 每一折的訓(xùn)練以及計(jì)算準(zhǔn)確率clf = KNeighborsClassifier(n_neighbors=k)clf.fit(X[train_index],y[train_index])curr_score = curr_score + clf.score(X[valid_index],y[valid_index]) # 求一下5折的平均準(zhǔn)確率 avg_score = curr_score/5 if avg_score > best_score:best_k = kbest_score = avg_score print('current best score is :%.2f' % best_score,'best k:%d' %best_k) print('after cross validation, the final best k is :%d' %best_k)
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 詳解JSP 內(nèi)置對(duì)象request常見用法2. ASP.NET MVC實(shí)現(xiàn)下拉框多選3. ASP.NET MVC增加一條記錄同時(shí)添加N條集合屬性所對(duì)應(yīng)的個(gè)體4. .NET Framework各版本(.NET2.0 3.0 3.5 4.0)區(qū)別5. 解決request.getParameter取值后的if判斷為NULL的問題6. JSP中param動(dòng)作的實(shí)例詳解7. ASP.NET MVC實(shí)現(xiàn)本地化和全球化8. .Net反向代理組件Yarp用法詳解9. JS中的常見數(shù)組遍歷案例詳解(forEach, map, filter, sort, reduce, every)10. .NET中的MassTransit分布式應(yīng)用框架詳解
