汉阳网站推广优化,海通建设集团有限公司网站,国家建设工程信息网,动画制作流程图一、简介 前面我详细介绍了关于机器学习的归一化和反归一化以及表格数据在机器学习中的输入格式问题#xff1a; 一文彻底搞懂机器学习中的归一化与反归一化问题 【Python机器学习系列】一文彻底搞懂机器学习中表格数据的输入形式#xff08;理论源码#xff09; 本文将介绍…一、简介 前面我详细介绍了关于机器学习的归一化和反归一化以及表格数据在机器学习中的输入格式问题 一文彻底搞懂机器学习中的归一化与反归一化问题 【Python机器学习系列】一文彻底搞懂机器学习中表格数据的输入形式理论源码 本文将介绍机器系学习中的K折交叉验证的使用方法。 交叉验证Cross-validation是一种在机器学习中常用的模型评估技术用于估计模型在未知数据上的性能。它通过将数据集划分为训练集和验证集并多次重复这个过程来评估模型的性能。 k折交叉验证是将数据分为k份选取其中的k-1份为训练数据剩余的一份为测试数据。k份数据循环做测试集进行测试。此原理适用于数据量小的数据。 使用交叉验证可以实现 寻找单个模型最好的效果时候的数据集划分以及参数 比较多个模型选择最佳模型
二、实现
准备数据
import pandas as pd# 准备数据
data pd.read_csv(rG:\数据杂坛\\UCI Heart Disease Dataset.csv)
df pd.DataFrame(data)# 目标变量和特征变量
target target
features df.columns.drop(target)
X df[features].values
y df[target].values
方法1
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import KFoldkf KFold(n_splits 5, shuffleTrue, random_state0)
score0
for train_index, test_index in kf.split(y):X_train, X_test X[train_index], X[test_index]y_train, y_test y[train_index], y[test_index]clt DecisionTreeClassifier(max_depth5, random_state0).fit(X_train, y_train)curr_score clt.score(X_test, y_test)print(准确率为, curr_score)score score curr_scoreavg_score score / 5
print(平均准确率为, avg_score)
n_splits 5表示进行5折交叉验证分别计算每一次的准确率最后求得平均准确率。使用KFold.split()实现效果如下 方法2
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_scorekf KFold(n_splits5, shuffleTrue, random_state0)
model1 DecisionTreeClassifier(max_depth5, random_state0)
scores_model1 cross_val_score(model1, X, y, cvkf)
print(准确率为, scores_model1)
print(平均准确率为, scores_model1.mean())
直接使用sklearn中的cross_val_score()函数实现效果和第一种方法一样结果如下 三、应用场景
方法1 选择模型效果最好的数据集划分
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import KFoldkf KFold(n_splits 5, shuffleTrue, random_state0)
score0
best_score -float(inf) # 初始化为正无穷大
best_train_index None
best_test_index None
for train_index, test_index in kf.split(y):X_train, X_test X[train_index], X[test_index]y_train, y_test y[train_index], y[test_index]clt DecisionTreeClassifier(max_depth5, random_state0).fit(X_train, y_train)curr_score clt.score(X_test, y_test)print(准确率为, curr_score)score score curr_score# 如果当前数据集划分的性能更好则更新最佳数据集划分if curr_score best_score:best_score curr_scorebest_train_index train_indexbest_test_index test_indexavg_score score / 5
print(平均准确率为, avg_score)
print(Best train indices:, best_train_index)
print(Best test indices:, best_test_index)
X_train, X_test X[best_train_index], X[best_test_index]
y_train, y_test y[best_train_index], y[best_test_index]
KFold的split方法会生成交叉验证的训练集和测试集索引然后你可以使用这些索引将数据集划分为相应的训练集和测试集。通过在每个数据集划分上训练模型并评估性能你可以选择具有最佳性能的数据集划分。最后你可以打印最佳数据集划分的索引以便进一步分析和使用。
方法2 用于比较不同模型的评分选择最优模型
from sklearn.linear_model import LogisticRegressionkf KFold(n_splits5, shuffleTrue, random_state0)
model1 DecisionTreeClassifier(max_depth5, random_state0)
model2 LogisticRegression()
scores_model1 cross_val_score(model1, X, y, cvkf)
scores_model2 cross_val_score(model2, X, y, cvkf)
print(model1准确率为, scores_model1)
print(model1平均准确率为, scores_model1.mean())
print(model2准确率为, scores_model2)
print(model2平均准确率为, scores_model2.mean())
通过比较不同模型的评分你可以选择最佳模型评分较高的模型通常具有更好的性能。 好了本篇内容就到这里需要数据集和源码的小伙伴可以关注我领取 作者简介 读研期间发表6篇SCI数据挖掘相关论文现在某研究院从事数据算法相关科研工作结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创以最简单的方式理解和学习关注我一起交流成长。