首页 文章 精选 留言 我的

精选列表

搜索[机器学习系统],共10000篇文章
优秀的个人博客,低调大师

如何在评估机器学习模型时防止数据泄漏

本文讨论了评估模型性能时的数据泄漏问题以及避免数据泄漏的方法。 在模型评估过程中,当训练集的数据进入验证/测试集时,就会发生数据泄漏。这将导致模型对验证/测试集的性能评估存在偏差。让我们用一个使用Scikit-Learn的“波士顿房价”数据集的例子来理解它。数据集没有缺失值,因此随机引入100个缺失值,以便更好地演示数据泄漏。 import numpy as npimport pandas as pdfrom sklearn.datasets import load_bostonfrom sklearn.preprocessing import StandardScalerfrom sklearn.pipeline import Pipelinefrom sklearn.impute import SimpleImputerfrom sklearn.neighbors import KNeighborsRegressorfrom sklearn.model_selection import cross_validate, train_test_splitfrom sklearn.metrics import mean_squared_error#Importing the datasetdata = pd.DataFrame(load_boston()['data'],columns=load_boston()['feature_names'])data['target'] = load_boston()['target']#Split the input and target featuresX = data.iloc[:,:-1].copy()y = data.iloc[:,-1].copy()# Adding 100 random missing valuesnp.random.seed(11)rand_cols = np.random.randint(0,X.shape[1],100)rand_rows = np.random.randint(0,X.shape[0],100)for i,j in zip(rand_rows,rand_cols): X.iloc[i,j] = np.nan #Splitting the data into training and test setsX_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,random_state=11)#Initislizing KNN Regressorknn = KNeighborsRegressor()#Initializing mode imputerimp = SimpleImputer(strategy='most_frequent')#Initializing StandardScalerstandard_scaler = StandardScaler()#Imputing and scaling X_trainX_train_impute = imp.fit_transform(X_train).copy()X_train_scaled = standard_scaler.fit_transform(X_train_impute).copy()#Running 5-fold cross-validationcv = cross_validate(estimator=knn,X=X_train_scaled,y=y_train,cv=5,scoring="neg_root_mean_squared_error",return_train_score=True)#Calculating mean of the training scores of cross-validationprint(f'Training RMSE (with data leakage): {-1 * np.mean(cv["train_score"])}')#Calculating mean of the validation scores of cross-validationprint(f'validation RMSE (with data leakage): {-1 * np.mean(cv["test_score"])}')#fitting the model to the training datalr.fit(X_train_scaled,y_train)#preprocessing the test dataX_test_impute = imp.transform(X_test).copy()X_test_scaled = standard_scaler.transform(X_test_impute).copy()#Predictions and model evaluation on unseen datapred = lr.predict(X_test_scaled)print(f'RMSE on unseen data: {np.sqrt(mean_squared_error(y_test,pred))}') 在上面的代码中,‘X_train’是训练集(k-fold交叉验证),‘X_test’用于对看不见的数据进行模型评估。上面的代码是一个带有数据泄漏的模型评估示例,其中,用于估算缺失值的模式(strategy= ' most_frequent ')在' X_train '上计算。类似地,用于缩放数据的均值和标准偏差也使用' X_train '计算。' X_train的缺失值将被输入,' X_train '在k-fold交叉验证之前进行缩放。 在k-fold交叉验证中,' X_train '被分割成' k '折叠。在每次k-fold交叉验证迭代中,其中一个折用于验证(我们称其为验证部分),其余的折用于训练(我们称其为训练部分)。每次迭代中的训练和验证部分都有已经使用' X_train '计算的模式输入的缺失值。类似地,它们已经使用在' X_train '上计算的平均值和标准偏差进行了缩放。这种估算和缩放操作会导致来自' X_train '的信息泄露到k-fold交叉验证的训练和验证部分。这种信息泄漏可能导致模型在验证部分上的性能估计有偏差。下面的代码展示了一种通过使用管道来避免它的方法。 #Preprocessing and regressor pipelinepipeline = Pipeline(steps=[['imputer',imp],['scaler',standard_scaler],['regressor',knn]])#Running 5-fold cross-validation using pipeline as estimatorcv = cross_validate(estimator=pipeline,X=X_train,y=y_train,cv=5,scoring="neg_root_mean_squared_error",return_train_score=True)#Calculating mean of the training scores of cross-validationprint(f'Training RMSE (without data leakage): {-1 * np.mean(cv["train_score"])}')#Calculating mean of the validation scores of cross-validationprint(f'validation RMSE (without data leakage): {-1 * np.mean(cv["test_score"])}')#fitting the pipeline to the training datapipeline.fit(X_train,y_train) #Predictions and model evaluation on unseen datapred = pipeline.predict(X_test)print(f'RMSE on unseen data: {np.sqrt(mean_squared_error(y_test,pred))}') 在上面的代码中,我们已经在管道中包含了输入器、标量和回归器。在本例中,' X_train '被分割为5个折,在每次迭代中,管道使用训练部分计算用于输入训练和验证部分中缺失值的模式。同样,用于衡量训练和验证部分的平均值和标准偏差也在训练部分上计算。这一过程消除了数据泄漏,因为在每次k-fold交叉验证迭代中,都在训练部分计算归责模式和缩放的均值和标准偏差。在每次k-fold交叉验证迭代中,这些值用于计算和扩展训练和验证部分。 我们可以看到在有数据泄漏和没有数据泄漏的情况下计算的训练和验证rmse的差异。由于数据集很小,我们只能看到它们之间的微小差异。在大数据集的情况下,这个差异可能会很大。对于看不见的数据,验证RMSE(带有数据泄漏)接近RMSE只是偶然的。 因此,使用管道进行k-fold交叉验证可以防止数据泄漏,并更好地评估模型在不可见数据上的性能。 作者:KSV Muralidhar 原文地址:https://ksvmuralidhar.medium.com/how-to-avoid-data-leakage-while-evaluating-the-performance-of-a-machine-learning-model-ac30f2bb8586 deephub翻译组 本文分享自微信公众号 - DeepHub IMBA(deephub-imba)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

优秀的个人博客,低调大师

基于Spark的机器学习实践 (三) - 实战环境搭建

0 相关源码 1 Spark环境安装 ◆ Spark 由scala语言编写,提供多种语言接口,需要JVM ◆ 官方为我们提供了Spark 编译好的版本,可以不必进行手动编译 ◆ Spark安装不难,配置需要注意,并且不一定需要Hadoop环境 下载 解压 tar zxvf spark-2.4.1-bin-hadoop2.7.tgz 2 Spark配置 ◆ 在配置前尽量先阅读官方文档,避免直接从网上找配置教程 ◆ 要为节点设 置好使用的内存,否则可能导致节点利用率低; ◆ 注意spark中IP与端口号的配置,以免UnknownHostException [官网配置]() 应用默认配置 配置文件 复制两份模板,开启自行配置 单机环境配置 本地IP shell进行验证 bin/spark-shell 3 Spark shell ◆ Spark shell是一个bash脚本,在

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册