目录

1.概览
<https://blog.csdn.net/weixin_42660173/article/details/82527730#1.%E6%A6%82%E8%A7%88>

2.代码
<https://blog.csdn.net/weixin_42660173/article/details/82527730#2.%E4%BB%A3%E7%A0%81>

1.概览


当我们要从多个模型中快速选择一个较为合适的模型时,也可以把数据依次放到每个模型中去测试,找到泛化能力较强的那一个。虽然这是一个「笨」办法,但在实验流程上也有一些取巧的步骤。其中之一,就是今天要介绍的
K 折交叉验证(k-fold cross-validation)。

其通过将数据集均分成 K 个子集,并依次将其中的 K-1 个子集作为训练集,剩下的 1 个子集用作测试集。在 K 折交叉验证的过程中,每个子集均会被验证一次。



 

 

2.代码
# -*- coding: utf-8 -*- """ Created on Thu Sep 6 19:54:24 2018 k折交叉验证
数据:(鲍鱼)年龄数据集 challenge-6-abalone.csv
http://labfile.oss.aliyuncs.com/courses/1081/challenge-6-abalone.csv 数据说明:最后 1
列为目标列,统计了鲍鱼的环数(Rings),环数从 1-30 变化,值越大代表鲍鱼的年龄越大。 方法: 1.批量替换df.replace() 指定替换值
df.Sex.replace({'M':0,'F':1,'I':2}) 2.剪切函数
pd.cut(data,bins=[元素箱子],labels=[转成的标签]) 这个data里的数据必须是数值型 可用于从连续变量到分类变量。
pd.cut(df.Rings,bins=[0,10,20,30],labels=['small','middle','large'])
3.dataframe格式 1.获取元素,先用data.index[1]获取行号,然后再用pd.iloc[行号]执行操作
df.iloc[df.index[-1]].values 2.直接通过pd.iloc[:,:]获取目标数据 4.拼接dataframe数据
pd.dataframe(data1,columns=columns_value).append(data2,ignore_index=True)
5.数据类型转换 字符串转换数值 pd.to_numeric(data) 6.dataframe格式数据,重新设置column会自动覆盖原来的column
""" #加载数据集 import pandas as pd df=pd.read_csv('challenge-6-abalone.csv')
"""数据预处理 1.重新确认column 2.连续型字段转换为类别字段 3.字段替换 """
#数据最后一行是字段名,对数据进行整改,如何拼接dataframe columns_name =
df.iloc[df.index[-1]].values#通过df.index[-1]获取索引行号,然后用df.iloc[]来过滤 new_line =
df.columns.values df = df.drop(df.index[-1]) df.columns = columns_name df =
pd.DataFrame([new_line], columns=columns_name).append(df, ignore_index=True)
#本次实验将 1-10 环定义为 small(小鲍鱼), 11-20 环定为 middle(中型鲍鱼), 21-30 定为 large(老鲍鱼)。 #Sex
列出现的 3 个性别种类 M, F, I,我们分别使用数值 0,1,2 进行替换。 #按区间替换是可使用 pd.cut()
df['Rings']=pd.to_numeric(df['Rings'])#将字符串型字段转换为数值型
df['Rings']=pd.cut(df.Rings,bins=[0,10,20,30],labels=['small','middle','large'])
df['Sex']=df.Sex.replace({'M':0,'F':1,'I':2})#批量替换 #print(df.head()) """ k折子集均分
预处理之后的数据集平均划分为 K 个子集 结果需要遍历才能获取具体数据 """ from sklearn.model_selection import
KFold kf=KFold(n_splits=10,shuffle=False,random_state=50) for
train_index,test_index in kf.split(df):
print('train',len(train_index),'test',len(test_index)) """k折交叉验证
使用k近邻模型构建学习分类模型,并进行10折交叉验证 """ from sklearn.neighbors import
KNeighborsClassifier from sklearn.model_selection import cross_val_score
features=df.iloc[:,0:8] target=df['Rings'] model=KNeighborsClassifier()
print(cross_val_score(model,X=features,y=target,cv=10)) """各分类模型 10 折交叉验证函数 使用
10 折交叉验证方法测试鲍鱼数据集在逻辑回归、K 近邻、 支持向量机、人工神经网络、决策树、随机森林、Adaboost 默认参数下的表现结果, 并取 10
折交叉验证结果取平均值。 """ import numpy as np from sklearn.linear_model import
LogisticRegression from sklearn.neighbors import KNeighborsClassifier from
sklearn.svm import SVC from sklearn.neural_network import MLPClassifier from
sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import
RandomForestClassifier from sklearn.ensemble import AdaBoostClassifier def
classifier(): scores=[]
models=[LogisticRegression(),KNeighborsClassifier(),SVC(),MLPClassifier(),DecisionTreeClassifier(),RandomForestClassifier(),AdaBoostClassifier()]
for model in models: score=cross_val_score(model,X=features,y=target,cv=10)
mean_score=np.mean(score) scores.append(mean_score) return scores
a=classifier() print('aaa',a) import matplotlib.pyplot as plt plt.plot([i for i
in range(len(a))],a)
 结果图:



你会发现,当我们使用默认参数时,7
种分类预测模型的表现都还不错,其中支持向量机、人工神经网络、随机森林等表现突出。此时,我们就可以先初选出这几种方法,然后通过调参得到更理想的结果。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信