交叉验证——sklearn.model_selection.KFold

 

 

 

最近使用python进行数据集的划分。使用到了交叉验证(Cross-validation),需要整理sklearn.model_selection.KFold函数的参数设定和使用实例。整理如下:

 

1、Cross-validation 交叉验证 

附注:官方文档链接:https://scikit-learn.org/dev/modules/cross_validation.html#cross-validation

交叉验证的基本思想:把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set or test set),首先用训练集对模型进行训练(可以使用不同的机器学习训练方法),得到相应模型(如模型A)。再利用验证集来测试模型(A)的泛化误差。另外,现实中数据总是有限的,为了对数据形成重用,从而提出k-折叠交叉验证。下图为网上传播较多的5折交叉验证图示。

5折交叉验证-图源网络

对回归问题或者分类问题,经过k折交叉验证之后,计算k次求得的分类率的平均值,作为该模型或者假设函数的真实分类率。Cross-validation能有效的避免过学习以及欠学习状态的发生,结果也比较具有说服性。

#一 # 导入数据 import pandas as pd file_path = r"D:\Jiqixuexi\塑性铰案例\数据.CSV" data = pd.read_csv(file_path, encoding='ISO-8859-1') #二 #查看数据情况 from pandas import set_option #前5行打印 print(data.head()) # 数据维度 print(type(data),data.shape) # 特征属性的字段类型 print(data.dtypes) # 描述性统计信息 set_option('display.precision', 1) print(data.describe()) # 关联关系 设置显示精度并计算皮尔逊相关系数矩阵 set_option('display.precision', 2) print(data.corr(method='pearson')) #三数据可视化 import numpy as np from numpy import arange from matplotlib import pyplot import matplotlib.pyplot as plt from pandas.plotting import scatter_matrix # 单一特征图表 # 直方图 data.hist(sharex=False, sharey=False, xlabelsize=10, ylabelsize=10, figsize=(12,10),layout=(4,4)) pyplot.savefig('1_hist.png') #保存图片 pyplot.show() # 密度图 data.plot(kind='density', subplots=True, layout=(4,4), sharex=False, fontsize=1) pyplot.show() # 箱线图 data.plot(kind='box', subplots=True, layout=(4,4), sharex=False, sharey=False, fontsize=8) pyplot.show() #scatter_matrix() - 散点图矩阵,可以一次性查看多个变量之间的两两关系 scatter_matrix(data) pyplot.show() #分离数据集 from sklearn.model_selection import train_test_split from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score array = data.values X=array[:, 0:7] Y=array[:, 7] validation_size=0.2 # 20%的数据用于评估 seed=7 X_train, X_validation, Y_train, Y_validation = train_test_split(X, Y, test_size=validation_size, random_state=seed) #4.1使用原始数据做模型 # 评估算法——评估标准 num_folds=5 # 10折交叉验证 seed=7 scoring='neg_mean_squared_error' # negative MSE评价结果,不是用MSE,是为了与损失函数的规则保持一致 # 一次使用6种算法做模型 from sklearn.linear_model import LinearRegression from sklearn.linear_model import Lasso from sklearn.linear_model import ElasticNet from sklearn.tree import DecisionTreeRegressor from sklearn.neighbors import KNeighborsRegressor from sklearn.svm import SVR ###### 建模1:用原始数据做分析 # 评估算法- baseline models={} models['LR']=LinearRegression() models['LASSO']=Lasso() models['EN']=ElasticNet() models['KNN']=KNeighborsRegressor() models['CART']=DecisionTreeRegressor() models['SVM']=SVR() # 评估算法 results = [] print("原始数据分析后的结果:") for key in models: kfold = KFold(n_splits=num_folds, shuffle=True, random_state=seed) # 构造交叉验证,必要参数:n_splits交叉验证折数、shuffle是否随机打乱数据、random_state随机数种子 cv_result = cross_val_score(models[key], X_train, Y_train, cv=kfold, scoring=scoring) # 计算交叉验证评分,必要参数:models[key]模型,X_train特征值、Y_train目标变量、cv交叉验证方法、scoring评分结果 results.append(cv_result) print('%s: %f(%f)' % (key, cv_result.mean(), cv_result.std())) # 6组结果,每组10个,查看均值、标准差 print()
10-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值