分布差异(Distribution Discrepancy)是指两个数据集(通常是训练集和验证集/测试集)之间在某些特征或目标变量上的统计分布不同。这种差异可能导致模型在训练集上表现良好,但在验证集或测试集上表现不佳,从而影响模型的泛化能力。
数据采集方式不同:
样本选择偏差:
数据预处理不同:
时间变化:
可视化:
统计检验:
对抗验证:
重采样:
特征工程:
数据增强:
迁移学习:
假设我们有一个训练集 train_df
和一个验证集 val_df
,我们可以通过以下步骤检测和处理分布差异。
import matplotlib.pyplot as plt import seaborn as sns # 选择一个特征进行可视化 feature = 'X1' plt.figure(figsize=(12, 6)) sns.histplot(train_df[feature], bins=30, kde=True, label='Train', color='blue', alpha=0.5) sns.histplot(val_df[feature], bins=30, kde=True, label='Validation', color='orange', alpha=0.5) plt.legend() plt.title(f'Distribution of {feature} in Train and Validation Sets') plt.show()
from scipy.stats import ks_2samp # 选择一个特征进行统计检验 feature = 'X1' statistic, p_value = ks_2samp(train_df[feature], val_df[feature]) print(f'Kolmogorov-Smirnov Test Statistic: {statistic}, P-value: {p_value}')
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import roc_auc_score # 添加标签 train_df['is_train'] = 0 val_df['is_train'] = 1 combined_df = pd.concat([train_df, val_df], axis=0) # 选择特征 X = combined_df.drop(columns=['is_train', 'y', 'idx', 'is_test']) y = combined_df['is_train'] # 训练二分类模型 X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42) model = LogisticRegression() model.fit(X_train, y_train) # 评估模型 y_pred = model.predict_proba(X_val)[:, 1] auc = roc_auc_score(y_val, y_pred) print(f'ROC AUC Score: {auc}')
标签: 来源:
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。