响应式网站方案网站备案怎么做超链接

张小明 2026/1/10 3:31:02
响应式网站方案,网站备案怎么做超链接,网络运营维护的工作内容,wordpress怎么给栏目添加tdk原文#xff1a;towardsdatascience.com/how-to-handle-imbalanced-datasets-in-machine-learning-projects-a95fa2cd491a 想象一下#xff0c;你已经训练了一个准确率高达 0.9 的预测模型。像精确度、召回率和 f1 分数这样的评估指标也看起来很有希望。但你的经验和直觉告诉…原文towardsdatascience.com/how-to-handle-imbalanced-datasets-in-machine-learning-projects-a95fa2cd491a想象一下你已经训练了一个准确率高达 0.9 的预测模型。像精确度、召回率和 f1 分数这样的评估指标也看起来很有希望。但你的经验和直觉告诉你事情并不对劲所以你进行了进一步的调查并发现了以下情况https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1054c96b3e3bc64e1949fcfe7d69dd68.pngImage_1 – 作者截图模型的看似强大的性能是由其目标变量中的多数类0驱动的。由于多数类和少数类之间明显的不平衡模型在预测多数类0方面表现出色而少数类1的性能则远未令人满意。然而由于类1只代表了目标变量的一小部分其性能对整体评估指标的总体得分影响很小这给你造成了一种模型强大的错觉。这并不是一个罕见的情况。相反数据科学家在现实世界的项目中经常遇到不平衡的数据集。不平衡数据集指的是类别或类别在数据集中没有平等代表的情况。我们不应该忽略数据集中的不平衡因为它可能导致模型性能偏差、泛化能力差和误导性的评估指标问题。本文将讨论解决不平衡数据集带来的挑战的技术。为了演示目的我将继续使用我在另一篇文章中使用过的 UCI 机器学习仓库中的银行营销数据集。你可以在这里检查有关数据集的所有信息并下载数据这里。这个数据集受 Creative Commons Attribution 4.0 International (CC BY 4.0)许可协议的许可允许用于任何目的的共享和改编前提是给予适当的信用。银行营销数据集包含 16 个特征和一个二元目标变量该变量表示客户是否订阅了定期存款。目标变量高度不平衡其多数类0占总数据的 88.3%而少数类1占 11.7%。如果我们不处理数据集中的不平衡我们可以简单地使用下面的脚本训练一个预测模型来预测客户是否会订阅定期存款评估指标在本文开头 Image_1 中展示。# Import librariesimportpandasaspdimportnumpyasnpimportioimportrequestsfromzipfileimportZipFilefromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportOneHotEncoder,StandardScalerfromsklearn.ensembleimportRandomForestClassifierfromsklearn.metricsimportaccuracy_score,classification_report,roc_auc_score,roc_curveimportmatplotlib.pyplotasplt# Download the dataurlhttps://archive.ics.uci.edu/static/public/222/bankmarketing.zipresponserequests.get(url)# Open the datasetwithZipFile(io.BytesIO(response.content))asouter_zip:withouter_zip.open(bank.zip)asinner_zip_file:withZipFile(io.BytesIO(inner_zip_file.read()))asinner_zip:withinner_zip.open(bank-full.csv)ascsv_file:dfpd.read_csv(csv_file,sep;)# Initial EDA:# Check for missing values and basic statsprint(df.isnull().sum())# No missing values in this dataset# Drop columns day and monthdfdf.drop(columns[day,month])# Loop One-Hot Encoding for categorical columnscategorical_columns[job,marital,education,default,housing,loan,contact,poutcome]encoderOneHotEncoder(dropfirst,sparseFalse)forcolumnincategorical_columns:encoded_colsencoder.fit_transform(df[[column]])encoded_dfpd.DataFrame(encoded_cols,columns[f{column}_{cat}forcatinencoder.categories_[0][1:]])dfpd.concat([df.drop(columns[column]),encoded_df],axis1)# Separate features (X) and the target variable (y)Xdf.drop(y,axis1)# y is the target variableydf[y].apply(lambdax:1ifxyeselse0)# Convert target to binary# Split the data into training and testing sets without using SMOTEX_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.3,random_state42)# Standardizing numerical featuresscalerStandardScaler()numerical_columnsX_train.select_dtypes(include[int64,float64]).columnsforcolumninnumerical_columns:X_train[column]scaler.fit_transform(X_train[[column]])X_test[column]scaler.transform(X_test[[column]])# Train the RandomForestClassifier without any method to handle imbalancerfRandomForestClassifier(n_estimators100,random_state42,class_weightNone)rf.fit(X_train,y_train)# Make predictionsy_predrf.predict(X_test)y_pred_probarf.predict_proba(X_test)[:,1]# Evaluation metricsaccuracyaccuracy_score(y_test,y_pred)classification_repclassification_report(y_test,y_pred)roc_aucroc_auc_score(y_test,y_pred_proba)# Print evaluation resultsprint(fAccuracy:{accuracy})print(Classification Report:)print(classification_rep)print(fROC-AUC:{roc_auc})在接下来的章节中我将介绍处理不平衡数据集最常用的方法并将几种合适的技巧应用于这个银行营销数据集。处理不平衡数据集的常用方法随机欠采样随机欠采样是一种从多数类中移除样本以平衡类别分布的方法。它通常在多数类显著较大且开发者可以承受因数据减少而丢失一些信息时使用。优点简单且减少了训练时间。缺点可能会移除重要信息并导致欠拟合。Python 示例fromimblearn.under_samplingimportRandomUnderSamplerfromcollectionsimportCounterfromsklearn.datasetsimportmake_classification# Create a mock imbalanced datasetX,ymake_classification(n_classes2,weights[0.99,0.01],n_samples1000,random_state42)print(Original class distribution:,Counter(y))# Apply random undersamplingrusRandomUnderSampler(random_state42)X_res,y_resrus.fit_resample(X,y)print(Resampled class distribution:,Counter(y_res))随机过采样与随机欠采样相反随机过采样通过复制少数类的样本来平衡数据集。它通常在数据有限开发者希望在解决不平衡的同时保留所有样本时使用。优点保留了所有原始样本。缺点可能会通过重复相同的信息导致过拟合。Python 示例fromimblearn.over_samplingimportRandomOverSampler# Apply random oversamplingrosRandomOverSampler(random_state42)X_res,y_resros.fit_resample(X,y)print(Resampled class distribution:,Counter(y_res))SMOTE合成少数过采样技术SMOTE通过在现有样本之间插值来为少数类生成合成样本。SMOTE 与随机过采样ROS的关键区别在于ROS 只是简单地复制数据点而不引入任何新信息这可能导致过拟合而 SMOTE 生成新的合成样本与随机复制相比降低了过拟合的风险。优点比随机过采样更稳健且不太容易过拟合。缺点如果生成的样本不具有代表性可能会引入噪声。Python 示例fromimblearn.over_samplingimportSMOTE# Apply SMOTEsmoteSMOTE(random_state42)X_smote,y_smotesmote.fit_resample(X,y)print(SMOTE class distribution:,Counter(y_smote))成本敏感学习成本敏感学习是一种通过为每个类别分配不同的成本来直接调整模型的方法而不是引入重采样技术来改变原始数据集。这种方法通常在少数类更重要时使用例如欺诈检测、医疗诊断。优点无需修改数据。缺点需要仔细调整成本参数。Python 示例fromsklearn.treeimportDecisionTreeClassifierfromsklearn.metricsimportclassification_report# Train a cost-sensitive decision treemodelDecisionTreeClassifier(class_weight{0:1,1:10},random_state42)model.fit(X,y)# Evaluate the modely_predmodel.predict(X)print(classification_report(y,y_pred))平衡随机森林平衡随机森林是一种将随机森林与类别的平衡采样相结合的方法。这种方法使开发者能够构建一个稳健的模型并避免欠拟合。优点在平衡数据集的同时保持模型复杂性。缺点计算密集。Python 示例fromimblearn.ensembleimportBalancedRandomForestClassifierfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportaccuracy_score# Split the dataX_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.3,random_state42)# Train a Balanced Random Forest modelbrfBalancedRandomForestClassifier(random_state42)brf.fit(X_train,y_train)# Evaluatey_predbrf.predict(X_test)print(Balanced Random Forest Accuracy:,accuracy_score(y_test,y_pred))解决银行营销数据不平衡问题为了解决本文开头提到的银行营销数据不平衡问题我应用了包括 SMOTE、ADASYN、平衡随机森林BRF和成本敏感学习等技术。然后我选择了 BRF因为它将 f1-score 从 0.45 提高到 0.52并且这种改进在所有方法中是最显著的。此外BRF 是一种集成方法它内部平衡类别这使得该方法适合这个银行营销数据集。通过使用 BRF我们不必过于担心过拟合或欠拟合的问题因为这是一个稳健的方法。# Import librariesimportpandasaspdimportnumpyasnpimportioimportrequestsfromzipfileimportZipFilefromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportOneHotEncoder,StandardScalerfromimblearn.ensembleimportBalancedRandomForestClassifier# Import BRFfromsklearn.feature_selectionimportSelectFromModelimportmatplotlib.pyplotaspltfromsklearn.metricsimportaccuracy_score,roc_auc_score,precision_score,recall_score,f1_score,classification_report# Download the dataurlhttps://archive.ics.uci.edu/static/public/222/bankmarketing.zipresponserequests.get(url)# Open the datasetwithZipFile(io.BytesIO(response.content))asouter_zip:withouter_zip.open(bank.zip)asinner_zip_file:withZipFile(io.BytesIO(inner_zip_file.read()))asinner_zip:withinner_zip.open(bank-full.csv)ascsv_file:dfpd.read_csv(csv_file,sep;)# Initial EDA:# Check for missing values and basic statsprint(df.isnull().sum())# No missing values in this dataset# Drop columns day and monthdfdf.drop(columns[day,month])# Loop One-Hot Encoding for categorical columnscategorical_columns[job,marital,education,default,housing,loan,contact,poutcome]encoderOneHotEncoder(dropfirst,sparse_outputFalse)forcolumnincategorical_columns:encoded_colsencoder.fit_transform(df[[column]])encoded_dfpd.DataFrame(encoded_cols,columns[f{column}_{cat}forcatinencoder.categories_[0][1:]])dfpd.concat([df.drop(columns[column]),encoded_df],axis1)# Separate features (X) and the target variable (y)Xdf.drop(y,axis1)# y is the target variableydf[y].apply(lambdax:1ifxyeselse0)# Convert target to binary# Split the data into training and testing setsX_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.3,random_state42)# Standardizing numerical featuresscalerStandardScaler()numerical_columnsX_train.select_dtypes(include[int64,float64]).columns X_train[numerical_columns]scaler.fit_transform(X_train[numerical_columns])X_test[numerical_columns]scaler.transform(X_test[numerical_columns])# Feature Selection using BalancedRandomForestClassifierselectorBalancedRandomForestClassifier(n_estimators100,random_state42)selector.fit(X_train,y_train)modelSelectFromModel(selector,thresholdmedian,prefitTrue)selected_maskmodel.get_support()selected_columnsX_train.columns[selected_mask]X_train_selectedmodel.transform(X_train)X_test_selectedmodel.transform(X_test)# Visualize feature importance of the selected featuresimportancesselector.feature_importances_ selected_importancesimportances[selected_mask]indicesnp.argsort(selected_importances)[::-1]selected_names_sorted[selected_columns[i]foriinindices]plt.figure(figsize(12,8))plt.title(Feature Importance of Selected Features)plt.barh(range(len(selected_importances)),selected_importances[indices])plt.yticks(range(len(selected_importances)),selected_names_sorted)plt.xlabel(Relative Importance)plt.gca().invert_yaxis()plt.show()# Define parameter grid for BalancedRandomForestn_estimators_options[50,100]max_depth_options[10,20,30]best_f1_score0best_accuracy0best_params{}best_classification_reportbest_brfNone# Nested loop to iterate through hyperparametersforn_estimatorsinn_estimators_options:formax_depthinmax_depth_options:brfBalancedRandomForestClassifier(n_estimatorsn_estimators,max_depthmax_depth,random_state42)brf.fit(X_train_selected,y_train)# Make predictions on the test sety_predbrf.predict(X_test_selected)# Calculate performance metrics for the test setaccuracyaccuracy_score(y_test,y_pred)f1f1_score(y_test,y_pred,averageweighted)# If current model has better F1-score, update best model detailsiff1best_f1_scoreor(f1best_f1_scoreandaccuracybest_accuracy):best_f1_scoref1 best_accuracyaccuracy best_params{n_estimators:n_estimators,max_depth:max_depth}best_classification_reportclassification_report(y_test,y_pred)best_brfbrf# Store the best model# Print the best model performance and hyperparametersprint(fnBest F1 Score:{best_f1_score:.4f})print(fBest Accuracy:{best_accuracy:.4f})print(fBest Parameters:{best_params})# Print the classification report of the best modelprint(nClassification Report for the Best Model:n)print(best_classification_report)# Check for overfittingy_train_predbest_brf.predict(X_train_selected)# Calculate metrics on the training settrain_accuracyaccuracy_score(y_train,y_train_pred)train_f1f1_score(y_train,y_train_pred,averageweighted)print(nTraining Set Performance:)print(fAccuracy:{train_accuracy:.4f})print(fF1 Score:{train_f1:.4f})print(nTest Set Performance:)print(fAccuracy:{best_accuracy:.4f})print(fF1 Score:{best_f1_score:.4f})# Simple overfitting checkiftrain_accuracybest_accuracy0.05:print(nOverfitting Detected: The model performs significantly better on the training set.)else:print(nNo significant overfitting detected.)输出结果https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/82c825f5ee2a26f4d8f5e12f5bf6b3b7.png作者截图结论这个选择是一个完美的解决方案吗尽管 BRF 将少数类的召回率从 0.36 提高到 0.86将 F1 分数从 0.45 提高到 0.52但我们看到了精确度的下降。这意味着解决方案不成功吗不一定。处理不平衡数据集的技术效果取决于以下因素不平衡程度不平衡程度越严重这些方法做出显著改进就越困难。模型适应性如果模型未能捕捉到所有潜在的规律它们可能无法充分利用处理不平衡数据的技巧。评估指标在特定应用中某些指标的微小提升可以被认为是显著的。对于这个银行营销数据集将少数类的 F1 分数从 0.45 提高到 0.52 是一个显著的提升。由于平衡随机森林确保每棵树都能获得数据的平衡视图它提高了模型从少数类学习的能力。尽管增加的误报可能会导致更高的营销成本但显著提高的召回分数可以带来更好的转化机会、提高的营销效率和甚至更大的客户参与度。因此认识到精确度和召回率之间的权衡非常重要在这个特定情况下提高的 F1 分数是有合理依据的。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站建设公司营销话术wordpress 免费注册

还在为Unity软件的高昂授权费用而烦恼吗?想要零成本体验完整功能的Unity开发环境吗?UniHacker就是你一直在寻找的完美解决方案!这款跨平台开源工具专为Unity开发者设计,帮助你在Windows、MacOS和Linux系统上轻松绕过授权限制&…

张小明 2026/1/9 11:04:09 网站建设

网站流量数据常见网站建设

Excalidraw与Asana集成:让项目进度“看得见” 在一次产品迭代会议上,团队正围绕一张系统架构草图激烈讨论。突然有人问:“这个模块对应的开发任务在哪?” 会议室瞬间安静——没人记得上次更新的Figma链接藏在哪个Slack频道里。这并…

张小明 2026/1/8 22:42:13 网站建设

旅行社手机网站建设成东莞网上推广平台

摘要 随着互联网技术的快速发展,电子商务平台已成为企业拓展销售渠道的重要手段。白酒行业作为中国传统消费品行业之一,其销售模式逐渐从线下向线上迁移。黔醉酒业作为区域性白酒品牌,亟需构建一个智能化的销售系统,以满足消费者个…

张小明 2026/1/7 16:38:29 网站建设

西安网站开发公司怎么选微信里的小程序怎么删了

创新参数优化:打造专属PEFT扩展方案 【免费下载链接】peft 🤗 PEFT: State-of-the-art Parameter-Efficient Fine-Tuning. 项目地址: https://gitcode.com/gh_mirrors/pe/peft 你是否在大型语言模型微调中遭遇显存瓶颈?想要在不牺牲性…

张小明 2026/1/9 6:33:14 网站建设

武进网站建设价格网红推广

Dify平台的穴位按摩指导生成安全性审查 在智能健康应用快速发展的今天,用户对个性化中医理疗建议的需求持续上升。尤其是像“按哪个穴位能缓解失眠”这类问题,已成为许多养生类App和智能客服的高频查询内容。然而,看似简单的按摩建议背后&…

张小明 2026/1/7 13:35:20 网站建设

网站备案为何要关站百度推广多少钱一天

第一章:Open-AutoGLM开源代码地址Open-AutoGLM 是一个面向自动化自然语言生成与理解任务的开源框架,由深度学习与大模型研究团队联合发布。该项目旨在降低大语言模型在实际业务场景中的应用门槛,支持模型微调、推理优化、任务自动化编排等功能…

张小明 2026/1/7 16:09:47 网站建设