作为数据建模开发者,我们期望利用机器学习模型来分析数据和解决商业问题。无论我们是开发一个简单的模型还是一个复杂的模型,模型验证对于衡量我们工作都是至关重要。
在本文中,我将分享三个非常棒的 Python 工具包,它们可以让我们验证机器学习模型时变得更轻松。
1、EvidentlyEvidently 是一个用于分析和监控机器学习模型的开源 python 包。开发该软件包的目的是建立一个易于监控的机器学习仪表盘,并检测数据中的漂移。它是专门为生产而设计的,所以在有数据管道的情况下使用它会更好。然而,即使在开发阶段,您仍然可以使用它。
让我们试着用它来验证我们的机器学习模型开发。在现实环境中,我们会有一个参考数据集和生产数据集,但对于我们现在的情况,让我们使用训练和测试数据。
作为初学者,我们需要安装软件包
pip install evidently
安装包后,我们可以尝试检测数据集中发生的数据漂移。数据漂移是指参考数据或之前时间线中的数据与当前数据在统计上存在差异的现象。
import pandas as pd train = pd.read_csv('churn-bigml-80.csv' ) test = pd.read_csv('churn-bigml-20.csv' )
数据集需要预处理,我现在只想使用数字数据
train.drop(['State' , 'International plan' , 'Voice mail plan' ], axis =1 ,inplace = True ) test.drop(['State' , 'International plan' , 'Voice mail plan' ], axis =1 , inplace = True ) train['Churn' ] = train['Churn' ].apply(lambda x: 1 if x == True else 0 ) test['Churn' ] = test['Churn' ].apply(lambda x: 1 if x == True else 0 )
数据准备好后,我们将构建仪表板来检测任何漂移。显然需要我们独立导入每个标签;对于数据漂移,我们将使用 DataFloftTab。
from evidently.dashboard import Dashboardfrom evidently.tabs import DataDriftTab data_drift_report = Dashboard(tabs=[DataDriftTab()]) data_drift_report.calculate(train, test, column_mapping = None ) data_drift_report.save("reports/my_report.html" )
我们将数据保存在 HTML 报告中,并在另一个选项卡中打开它。
正如你在上面看到的,有一个监视器仪表板。我们可以在这个仪表板中看到每个特征分布和数据漂移的统计测试。在我们的样本中,训练数据和测试数据之间没有显示任何漂移,这意味着所有数据分布都是相似的。
它也可以用来创建一个机器学习分类仪表板来监控机器学习的健康状况。例如,让我们使用之前的数据训练一个分类模型。
from sklearn.neighbors import X_train = train.drop('Churn' , axis =1 ) X_test = test.drop('Churn' , axis =1 ) y_train = train['Churn' ] y_test = test['Churn' ] model = KNeighborsClassifier(n_neighbors=5 ) model.fit(X_train, y_train)
在拟合模型之后,我们需要实际结果和预测结果。我们还需要训练和测试数据集完好无损。
train_predictions = model.predict(X_train) test_predictions = model.predict(X_test) X_train['target' ] = y_train X_train['prediction' ] = train_predictions X_test['target' ] = y_test X_test['prediction' ] = test_predictions
监视器还需要我们映射我们使用的列。在本例中,我们将使用中的 ColumnMapping 进行设置。
from evidently.pipeline.column_mapping import ColumnMapping churn_column_mapping = ColumnMapping() churn_column_mapping.target = 'target' churn_column_mapping.prediction = 'prediction' churn_column_mapping.numerical_features =train.drop('Churn' , axis =1 ).columns
所有准备工作完成后,让我们设置分类器监视器仪表板。
from evidently.tabs.base_tab import Verbosefrom evidently.tabs import ClassificationPerformanceTab churn_model_performance_dashboard = Dashboard(tabs=[ClassificationPerformanceTab(verbose_level=Verbose.FULL)]) churn_model_performance_dashboard.calculate(X_train, X_test, column_mapping = churn_column_mapping) churn_model_performance_dashboard.save("reports/classification_churn.html" )
图如下
如上面所示,我们可以监控机器学习模型指标和每个特征的预测,可以知道在接收新数据时是否存在差异。
官方文档:`https://docs.evidentlyai.com/
2、DeepchecksDeepchecks 是一个 python 工具包,只需用几行代码就可以验证我们的机器学习模型。许多 API 可用于检测数据漂移、标签漂移、列车测试比较、评估模型等。Deepchecks 非常适合在研究阶段和模型投产前使用。
首先,让我们安装 Deepchecks 包。
pip install deepchecks
安装完成后,我们需要准备训练数据集和机器学习模型。对于我们的示例,我将使用 deepchecks 中的 Iris 数据集。
import pandas as pdfrom deepchecks.datasets.classification import irisfrom sklearn.ensemble import RandomForestClassifier# Load Data iris_df = iris.load_data(data_format='Dataframe' , as_train_test=False )
加载数据后,我们需要拆分训练、测试数据并加载机器学习模型。你可以用模型来拟合数据,我使用现成的模型。
df_train, df_test = iris.load_data(data_format='Dataframe' , as_train_test=True ) label_col = "target" rf_clf = iris.load_fitted_model()
如果 Deepchecks 将 Pandas 数据帧转换为 Deepchecks 数据集对象,那么数据会更好处理。
from deepchecks import Dataset ds_train = Dataset(df_train, label=label_col, cat_features=[]) ds_test = Dataset(df_test, label=label_col, cat_features=[])
一切都准备好了。我们只需要在 Jupyter notebook 上运行即可。
from deepchecks.suites import full_suite suite = full_suite() suite.run(train_dataset=ds_train, test_dataset=ds_test, model=rf_clf)
如下图
完整报告包含许多信息,例如混淆矩阵、简单模型比较、混合数据类型、数据漂移等。检查机器学习模型所需的所有信息都可以在单个代码运行中获得。 3、TFDVTFDV(TensorFlow Data Validation) 是 TensorFlow 开发人员开发的用于管理数据质量问题的 python 包。它用于自动描述数据统计、推断数据模式以及检测传入数据中的任何异常。
让我们尝试安装软件包
pip install tensorflow-data-validation
首先,我们需要导入包并从 CSV 数据生成统计对象。我使用我们之前使用的数据集作为参考数据集。
import tensorflow_data_validation as tfdv stats = tfdv.generate_statistics_from_csv(data_location='churn-bigml-80.csv' )
可以将统计对象的统计信息可视化。
tfdv.visualize_statistics(stats)
如图所示
TFDV 包不仅限于生成统计可视化,还有助于检测传入数据中的任何变化。为此,我们需要推断原始或参考数据模式。
schema = tfdv.infer_schema(stats) tfdv.display_schema(schema)
该模式将用于针对任何传入数据进行验证,如果传入数据没有在模式中推断出任何列或类别,那么 TFDV 将通知异常的存在。我们将使用以下代码和测试数据来实现这一点。
new_csv_stats = tfdv.generate_statistics_from_csv(data_location='churn-bigml-20.csv' ) anomalies = tfdv.validate_statistics(statistics=new_csv_stats, schema=schema) tfdv.display_anomalies(anomalies)
结论
机器学习模型项目不是一次性的,它是一个持续的过程。如果存在任何异常,则需要对生产中的模型进行持续监控。今天分享了三个 python 工具包,我希望这对你有帮助!
(完)