sklearn KFold()

最近实践过程中遇到需要KFold()记录一下,以便日后查阅KFold()在sklearn中属于model_slection模块fromsklearn.model_selectionimportKFoldKFold(n_splits=’warn’,shuffle=False,random_state=None)参数:n_splits表示划分为几块(至少是2)shuffle…

大家好,又见面了,我是你们的朋友全栈君。

最近实践过程中遇到需要KFold()
记录一下,以便日后查阅
KFold()在sklearn中属于model_slection模块

from sklearn.model_selection import KFold

KFold(n_splits=’warn’, shuffle=False, random_state=None)
参数:
n_splits 表示划分为几块(至少是2)

shuffle 表示是否打乱划分,默认False,即不打乱

random_state 表示是否固定随机起点,Used when shuffle == True.

方法
1,get_n_splits([X, y, groups]) 返回分的块数
2,split(X[,Y,groups]) 返回分类后数据集的index

例子:
1, get_n_splits()

from sklearn.model_selection import KFold
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
y = np.array([1, 2, 3, 4])
kf = KFold(n_splits=2)
print( kf.get_n_splits(X))

输出2

2, split()

for train_index, test_index in kf.split(X):
	print("TRAIN:", train_index, "TEST:", test_index)
	X_train, X_test = X.iloc[train_index], X.iloc[test_index]
	y_train, y_test = y.iloc[train_index], y.iloc[test_index]

TRAIN: [2 3] TEST: [0 1]
TRAIN: [0 1] TEST: [2 3]

for k,(train,test) in enumerate(kf.split(x,y)):
	print (k,(train,test))
	x_train=X.iloc[train]
	x_test=X.iloc[test]
	y_train=Y.iloc[train]
	y_test=Y.iloc[tes]

用KFold()优化逻辑回归参数C
参数C为正则化项的系数gama的倒数(C=1/gama)

def best_C_param (x,y):
    kf=KFold(n_splits=7,shuffle=True,random_state=0)
    C_param=[0.001,0.01,0.1,1,10,100]
    result=[]
    for c_parm in C_param:
        print('C_param',c_parm)
        recall_score_lr_kf=[]
        for k,(train,test) in enumerate(kf.split(x,y)):
            #print(y.iloc[train])
            model = LogisticRegression(C=c_parm,penalty='l2')
            lr_kf=model.fit(x.iloc[train],y.iloc[train].values.ravel())
            pred_lr_kf=lr_kf.predict(x.iloc[test])
            recall_score_lrkf=recall_score(y.iloc[test],pred_lr_kf)
            recall_score_lr_kf.append(recall_score_lrkf)
            print('iteration',k,'recall score',recall_score_lrkf)
        result.append(np.mean(recall_score_lr_kf))
        print(c_parm,np.mean(recall_score_lr_kf))
        print('bets mean recall score',max(result))


print('using whole datasets X and Y')
best_C_param(X,Y)

print('-------------------------')
print('using under sampling data X and Y')
best_C_param(X_underSampling,Y_underSampling)

一点小小的感触:
数据是非平衡数据结构,正样本1在总体数据集中只占有0.17%
欠采样处理后,二分类比例达到1:1
欠采样处理后的数据KFold寻找LR的最佳C:

方法1:不打乱划分,即shuffle=False (默认),其他同上

kf=KFold(n_splits=7)

每个C参数,出现recall score为0 (7块中至少2块为0),导致平均下来每个c_parm的recall均分只有0.5左右。
原因:不打乱的时候,分块中有些没分到正样本

方法2:打乱划分,固定随机种子

kf=KFold(n_splits=7,shuffle=True,random_state=0)

输出:结果对欠采样处理后的数据表现较好

using whole datasets X and Y before under sampling

C_param 0.001

iteration 0 recall score 0.5797101449275363

iteration 1 recall score 0.5223880597014925

iteration 2 recall score 0.5

iteration 3 recall score 0.5571428571428572

iteration 4 recall score 0.6774193548387096

iteration 5 recall score 0.5692307692307692

iteration 6 recall score 0.4567901234567901

0.001 0.5518116156140221

bets mean recall score 0.5518116156140221

C_param 0.01

iteration 0 recall score 0.5942028985507246

iteration 1 recall score 0.5671641791044776

iteration 2 recall score 0.5512820512820513

iteration 3 recall score 0.6142857142857143

iteration 4 recall score 0.6774193548387096

iteration 5 recall score 0.6

iteration 6 recall score 0.5185185185185185

0.01 0.5889818166543136

bets mean recall score 0.5889818166543136

C_param 0.1

iteration 0 recall score 0.6231884057971014

iteration 1 recall score 0.6119402985074627

iteration 2 recall score 0.5512820512820513

iteration 3 recall score 0.6142857142857143

iteration 4 recall score 0.6935483870967742

iteration 5 recall score 0.6153846153846154

iteration 6 recall score 0.5555555555555556

0.1 0.6093121468441821

bets mean recall score 0.6093121468441821

C_param 1

iteration 0 recall score 0.6521739130434783

iteration 1 recall score 0.6119402985074627

iteration 2 recall score 0.5512820512820513

iteration 3 recall score 0.6428571428571429

iteration 4 recall score 0.7096774193548387

iteration 5 recall score 0.6153846153846154

iteration 6 recall score 0.5802469135802469

1 0.6233660505728338

bets mean recall score 0.6233660505728338

C_param 10

iteration 0 recall score 0.6521739130434783

iteration 1 recall score 0.6119402985074627

iteration 2 recall score 0.5512820512820513

iteration 3 recall score 0.6428571428571429

iteration 4 recall score 0.7096774193548387

iteration 5 recall score 0.6153846153846154

iteration 6 recall score 0.5802469135802469

10 0.6233660505728338

bets mean recall score 0.6233660505728338

C_param 100

iteration 0 recall score 0.6521739130434783

iteration 1 recall score 0.6119402985074627

iteration 2 recall score 0.5512820512820513

iteration 3 recall score 0.6428571428571429

iteration 4 recall score 0.7096774193548387

iteration 5 recall score 0.6153846153846154

iteration 6 recall score 0.5802469135802469

100 0.6233660505728338

bets mean recall score 0.6233660505728338

 

-------------------------

using under sampling data X and Y

C_param 0.001

iteration 0 recall score 0.9558823529411765

iteration 1 recall score 0.9861111111111112

iteration 2 recall score 0.9473684210526315

iteration 3 recall score 0.9466666666666667

iteration 4 recall score 0.9661016949152542

iteration 5 recall score 0.96

iteration 6 recall score 0.9701492537313433

0.001 0.9617542143454548

bets mean recall score 0.9617542143454548

C_param 0.01

iteration 0 recall score 0.9558823529411765

iteration 1 recall score 0.8888888888888888

iteration 2 recall score 0.881578947368421

iteration 3 recall score 0.8666666666666667

iteration 4 recall score 0.9661016949152542

iteration 5 recall score 0.9466666666666667

iteration 6 recall score 0.9253731343283582

0.01 0.9187369073964903

bets mean recall score 0.9617542143454548

C_param 0.1

iteration 0 recall score 0.9264705882352942

iteration 1 recall score 0.8888888888888888

iteration 2 recall score 0.868421052631579

iteration 3 recall score 0.8666666666666667

iteration 4 recall score 0.9661016949152542

iteration 5 recall score 0.9466666666666667

iteration 6 recall score 0.8955223880597015

0.1 0.9083911351520072

bets mean recall score 0.9617542143454548

C_param 1

iteration 0 recall score 0.9264705882352942

iteration 1 recall score 0.9027777777777778

iteration 2 recall score 0.881578947368421

iteration 3 recall score 0.8933333333333333

iteration 4 recall score 0.9491525423728814

iteration 5 recall score 0.9466666666666667

iteration 6 recall score 0.8955223880597015

1 0.9136431776877252

bets mean recall score 0.9617542143454548

C_param 10

iteration 0 recall score 0.9264705882352942

iteration 1 recall score 0.8888888888888888

iteration 2 recall score 0.8947368421052632

iteration 3 recall score 0.9066666666666666

iteration 4 recall score 0.9491525423728814

iteration 5 recall score 0.9466666666666667

iteration 6 recall score 0.8955223880597015

10 0.9154435118564803

bets mean recall score 0.9617542143454548

C_param 100

iteration 0 recall score 0.9264705882352942

iteration 1 recall score 0.9027777777777778

iteration 2 recall score 0.881578947368421

iteration 3 recall score 0.9066666666666666

iteration 4 recall score 0.9661016949152542

iteration 5 recall score 0.96

iteration 6 recall score 0.8805970149253731

100 0.9177418128412552

bets mean recall score 0.9617542143454548

 

Process finished with exit code 0


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125349.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月5日 下午2:35
下一篇 2022年4月5日 下午2:35


相关推荐

  • DataGridView修改HeaderText

    dataGridView_htList为一个DataGridView(ht为HoverTree的缩写)方法一:dataGridView_htList.Columns["HtAddTime&

    2021年12月24日
    54
  • 微积分(六)——一元函数微分学[通俗易懂]

    微积分(六)——一元函数微分学[通俗易懂]前言这一章的特点是出题点较多且杂,其实考察的知识就是大纲上的那些。或者说出题的角度灵活比较合适。除了掌握大纲中的要求,还要多做练习题找到题中经常出现的坑,大都是对定义的精确考察,我也遇到的都记录在这里。(一)一元函数微分学基础这一部分只会讨论什么是导数与微分,以及它们的计算。也是一元函数微分学最基础的部分。1)讨论导数与微分的概念给出函数判断导数是否存在:利用导数的定义判断在某一点导数是否存在,注意可导必定连续。如果函数是分段函数,要保证左右导数都存在且相等才存在导数。如果函数是绝对值函

    2025年7月4日
    4
  • vdbench数据校验翻译

    vdbench数据校验翻译本文翻译自vdbench的使用手册中的数据校验章节,如有纰漏,还请不吝赐教。vdbench源码下载地址:https://www.oracle.com/downloads/server-storage/vdbench-source-downloads.html数据校验在性能测试的时候不应该被使用,处理器开销可能影响性能测试的结果。在我开始之前,我想问一个想了很多次的问题:“为什么我使用vdbench去检查数据冲突?我也可以写一个大文件,计算校验和,然后重新读这个文件并比较校验和。”当然,你可.

    2022年5月12日
    54
  • 排列组合公式/排列组合计算公式

    排列组合公式/排列组合计算公式排列组合公式 排列组合计算公式公式 P 是指排列 从 N 个元素取 M 个进行排列 公式 C 是指组合 从 N 个元素取 M 个进行组合 不进行排列 N 元素的总个数 M 参与选择的元素个数 阶乘 如 9 9 8 7 6 5 4 3 2 1 从 N 到数 M 个 表达式应该为 n n 1 n 2 n m 1 因为从 n 到 n m 1 个数为 n n m 1 m 举例 Q1 有从

    2026年3月26日
    3
  • Delphi7与Delphi2007

    Delphi7与Delphi2007CodeGear FromBorland 公司发布了最新的 Delphi2007Fo 版本 作为一个 Delphi 的使用者 第一时间下载 安装并进行了体验 现将一些使用感受记录如下 注 以下的对比主要是针对 Delphi7 与 Delphi2007 以下列出的部分功能可能在 Delphi8 2005 2006 中已存在 1 下载可在 CodeGear 官方网站下载试用版

    2026年3月18日
    1
  • clang忽略警告

    clang忽略警告使用 clang 的时候 出现这样的警告 warningLNK42 本地定义的符号 std terminate 在函数 int public staticunsign int64 cdeclstd char traitschar length charconst const 1 dtor 2 dtor 2 0 length char

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号