您是否在分类建模中犯了这些错误?
介绍
评估机器学习模型不仅是最后一步,而且是成功的基石。想象一下,建立一个高精度使其眼花azz乱的尖端模型,只是发现它在现实世界的压力下崩溃了。评估不仅仅是滴定指标;这是关于确保您的模型在野外始终如一。在本文中,我们将潜入常见的陷阱,这些陷阱甚至可能是最有希望的分类模型,并揭示可以将您的模型从良好提升到卓越的最佳实践。让我们将您的分类建模任务变成可靠,有效的解决方案。
概述
- 构建分类模型:通过分步指导构建一个固体分类模型。
- 识别频繁的错误:在分类建模中发现并避免常见的陷阱。
- 理解过度拟合:了解过度拟合并学习如何在模型中预防它。
- 提高模型构建技能:通过最佳实践和高级技术来增强您的模型构建技能。
目录
- 介绍
- 分类建模:概述
- 建立基本分类模型
- 1。数据准备
- 2。逻辑回归
- 3。支持向量机(SVM)
- 4。决策树
- 5。带张量的神经网络
- 确定错误
- 使用网格搜索改进逻辑回归的示例
- 带有张量的神经网络
- 了解各种指标的意义
- 模型性能的可视化
- 结论
- 常见问题
分类建模:概述
在分类问题中,我们尝试构建一个模型,该模型使用自变量预测目标变量的标签。当我们处理标记的目标数据时,我们将需要监督的机器学习算法,例如逻辑回归,SVM,决策树等。我们还将研究用于解决分类问题的神经网络模型,确定人们可能犯的常见错误,并确定如何避免它们。
建立基本分类模型
我们将展示使用Kaggle的日期工作数据集创建基本分类模型。关于数据集:目标变量由七种类型的日期水果组成:Barhee,Deglet Nour,Sukkary,Rotab Mozafati,Ruthana,Ruthana,Safawi和Sagai。数据集由898张图像组成,这些图像七个不同的日期水果品种,并通过图像处理技术提取了34个特征。目的是根据其属性对这些水果进行分类。
1。数据准备
导入大熊猫作为pd 来自sklearn.model_selection导入train_test_split 从sklearn.prepercorsing进口标准标准 #加载数据集 data = pd.read_excel('/content/date_fruit_datasets.xlsx') #将数据分为功能和目标 x = data.drop('class',轴= 1) y =数据['class'] #将数据集分为培训和测试集 x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.3,andural_state = 42) #功能缩放 sualer = StandardScaler() x_train = scaler.fit_transform(x_train) x_test = scaler.transform(x_test)
2。逻辑回归
来自sklearn.linear_model导入logisticRegress 来自Sklearn.metrics导入精度_score #逻辑回归模型 log_reg = logisticRegress() log_reg.fit(x_train,y_train) #预测和评估 y_train_pred = log_reg.redict(x_train) y_test_pred = log_reg.redict(x_test) # 准确性 train_acc = efceracy_score(y_train,y_train_pred) test_acc = efceracy_score(y_test,y_test_pred) 打印(f'logistic回归 - 火车准确性:{train_acc},测试准确性:{test_acc}')
结果:
- 逻辑回归 - 火车准确性:0.9538<br><br> - 测试准确性:0.9222
另请阅读:逻辑回归简介
3。支持向量机(SVM)
来自Sklearn.svm导入SVC 来自Sklearn.metrics导入精度_score #svm svm = svc(kernel ='linear',概率= true) svm.fit(x_train,y_train) #预测和评估 y_train_pred = svm.predict(x_train) y_test_pred = svm.predict(x_test) train_accuracy = ecuctacy_score(y_train,y_train_pred) test_accuracy = efcucy_score(y_test,y_test_pred) 打印(f“ svm-火车准确性:{train_accuracy},测试准确性:{test_accuracy}”)
结果:
-SVM-火车准确性:0.9602<br><br> - 测试准确性:0.9074
另请阅读:支持向量机(SVM)算法指南
4。决策树
从Sklearn.Tre Import DecisionTreeTreclalerifier 来自Sklearn.metrics导入精度_score #决策树 tree = dekistionTreeClalsifier(Random_State = 42) tree.fit(x_train,y_train) #预测和评估 y_train_pred = tree.predict(x_train) y_test_pred = tree.predict(x_test) train_accuracy = ecuctacy_score(y_train,y_train_pred) test_accuracy = efcucy_score(y_test,y_test_pred) 打印(f“决策树 - 火车准确性:{train_accuracy},测试准确性:{test_accuracy}”)
结果:
- 决策树 - 火车准确性:1.0000<br><br> - 测试准确性:0.8222
5。带张量的神经网络
导入numpy作为NP 从Sklearn.Preprocessing Import LabElenCoder,StandardardScaler 来自sklearn.model_selection导入train_test_split 从TensorFlow.keras导入模型,层 从TensorFlow.keras.callbacks导入早期踩踏,modelCheckpoint #标签编码目标类 label_encoder = labelencoder() y_encoded = label_encoder.fit_transform(y) #火车测试拆分 x_train,x_test,y_train,y_test = train_test_split(x,y_encoded,test_size = 0.2,andury_state = 42) #功能缩放 sualer = StandardScaler() x_train = scaler.fit_transform(x_train) x_test = scaler.transform(x_test) #神经网络 模型=模型。 layers.dense(64,activation ='relu',input_shape =(x_train.shape [1],)),), layers.dense(32,激活='relu'), layers.dense(len(np.unique(y_encoded))),激活='softmax')#确保输出层大小与类数量 ))) model.compile(优化器='adam',loss ='sparse_categorical_crossentropy',metrics = ['fecicy']) #回调 早期_STOPPING =早期stopping(Monitor ='Val_loss',耐心= 10,Restore_best_weights = true) model_checkpoint = modelCheckpoint('best_model.keras',monitor ='val_loss',save_best_only = true) #训练模型 历史= model.fit(x_train,y_train,epochs = 100,batch_size = 32,validation_data =(x_test,y_test), 回调= [早期_Stopping,model_checkpoint],详细= 1) #评估模型 train_loss,train_accuracy = model.evaluate(x_train,y_train,冗长= 0) test_loss,test_accuracy = model.evaluate(x_test,y_test,冗长= 0) 打印(f“神经网络 - 火车精度:{train_accuracy},测试精度:{test_accuracy}”)
结果:
- 神经网络 - 火车准确性:0.9234<br><br> - 测试准确性:0.9278
另请阅读:使用TensorFlow构建神经网络
确定错误
分类模型可能会遇到一些可能损害其有效性的挑战。必须识别和解决这些问题以建立可靠的模型。以下是要考虑的一些关键方面:
-
过于拟合和不足:
- 交叉验证:避免仅取决于单列火车测试拆分。利用K折的交叉验证来通过对各种数据段进行测试来更好地评估模型的性能。
- 正则化:高度复杂的模型可能会通过捕获数据中的噪声而过度。诸如修剪或正则化之类的正规化方法应用于惩罚复杂性。
- 高参数优化:彻底探索和调整超参数(例如,通过网格或随机搜索)来平衡偏差和方差。
-
合奏技术:
- 模型聚集:诸如随机森林或梯度增强的集合方法结合了多个模型的预测,通常会导致概括。这些技术可以在数据中捕获复杂的模式,同时通过平均单个模型错误来减轻过度拟合的风险。
-
班级失衡:
- 班级不平衡:在许多情况下,一个类可能比其他类别少,导致偏见的预测。必须根据问题使用诸如过采样,底漆或SMOTE之类的方法。
-
数据泄漏:
- 无意的泄漏:数据泄漏发生在训练集外部的信息会影响模型时导致膨胀性能指标时。至关重要的是要确保在培训期间完全看不见测试数据,并且要谨慎管理从目标变量获得的功能。
使用网格搜索改进逻辑回归的示例
来自sklearn.model_selection导入GridSearchCV #实施网格搜索逻辑回归 param_grid = {'c':[0.1,1,10,100],'solver':['lbfgs']} grid_search = GridSearchCV(LogisticRegression(Multi_class ='MultiNomial',max_iter = 1000),param_grid,cv = 5) grid_search.fit(x_train,y_train) #最佳模型 best_model = grid_search.best_estimator_ #评估测试集 test_accuracy = best_model.score(x_test,y_test) 打印(f“最佳逻辑回归 - 测试精度:{test_accuracy}”)
结果:
- 最佳逻辑回归 - 测试准确性:0.9611
带有张量的神经网络
让我们专注于改善以前的神经网络模型,专注于最大程度地减少过度拟合和增强概括的技术。
提早停止和模型检查点
早期停止在模型的验证性能高原时停止训练,从而避免从训练数据噪声中学习过多,从而防止过度适应。
模型检查点可以节省在整个训练中验证集中最佳的模型,从而确保保留最佳模型版本,即使随后的培训导致过度拟合。
导入numpy作为NP 从Sklearn.Preprocessing Import LabElenCoder,StandardardScaler 来自sklearn.model_selection导入train_test_split 从TensorFlow.keras导入模型,层 从TensorFlow.keras.callbacks导入早期踩踏,modelCheckpoint #标签编码目标类 label_encoder = labelencoder() y_encoded = label_encoder.fit_transform(y) #火车测试拆分 x_train,x_test,y_train,y_test = train_test_split(x,y_encoded,test_size = 0.2,andury_state = 42) #功能缩放 sualer = StandardScaler() x_train = scaler.fit_transform(x_train) x_test = scaler.transform(x_test) #神经网络 模型=模型。 layers.dense(64,activation ='relu',input_shape =(x_train.shape [1],)),), layers.dense(32,激活='relu'), layers.dense(len(np.unique(y_encoded))),激活='softmax')#确保输出层大小与类数量 ))) model.compile(优化器='adam',loss ='sparse_categorical_crossentropy',metrics = ['fecicy']) #回调 早期_STOPPING =早期stopping(Monitor ='Val_loss',耐心= 10,Restore_best_weights = true) model_checkpoint = modelCheckpoint('best_model.keras',monitor ='val_loss',save_best_only = true) #训练模型 历史= model.fit(x_train,y_train,epochs = 100,batch_size = 32,validation_data =(x_test,y_test), 回调= [早期_Stopping,model_checkpoint],详细= 1) #评估模型 train_loss,train_accuracy = model.evaluate(x_train,y_train,冗长= 0) test_loss,test_accuracy = model.evaluate(x_test,y_test,冗长= 0) 打印(f“神经网络 - 火车精度:{train_accuracy},测试精度:{test_accuracy}”)
了解各种指标的意义
- 准确性:尽管重要的是,精度可能无法完全捕获模型的性能,尤其是在处理不平衡的班级分布时。
- 损失:损耗函数评估预测值与真实标签的对齐程度;较小的损耗值表示较高的精度。
- 精度,召回和F1得分:精确评估正面预测的正确性,召回衡量该模型在识别所有阳性案例方面的成功,以及F1得分平衡的精度和回忆。
- ROC-AUC :ROC-AUC度量标准量量化了模型区分类别的能力,无论阈值设置如何。
来自sklearn.metrics导入classification_report,roc_auc_score #预测 Y_TEST_PRED_PROBA = model.predict(x_test) y_test_pred = np.argmax(y_test_pred_proba,axis = 1) #分类报告 print(classification_report(y_test,y_test_pred)) #Roc-auc roc_auc = roc_auc_score(y_test,y_test_pred_proba,multi_class ='ovr') 打印(f'Roc-auc得分:{roc_auc}')
模型性能的可视化
通过绘制学习曲线的准确性和损失,可以看到该模型在训练过程中的性能,显示该模型是否过于拟合或不适合。我们使用早期停止来防止过度拟合,这有助于推广到新数据。
导入matplotlib.pyplot作为PLT #情节培训和验证精度值 plt.figure(无花果=(14,5)) plt.subplot(1,2,1) plt.plot(历史学家['准确性']) plt.plot(history.history ['val_accuracy']) plt.title(“模型精度”) plt.xlabel('epoch') plt.ylabel(“准确性”) plt.legend(['train','验证'],loc =“左上”) #情节培训和验证损失值 plt.subplot(1,2,2) plt.plot(历史学家['损失']) plt.plot(历史学家['val_loss']) plt.title(“模型损失”) plt.xlabel('epoch') plt.ylabel(“损失”) plt.legend(['train','验证'],loc =“左上”) plt.show()
结论
细致的评估对于防止过度拟合和不足之类的问题至关重要。建立有效的分类模型不仅涉及选择和培训正确的算法。可以通过实施集合方法,正则化,调整超级计和交叉验证来增强模型一致性和可靠性。尽管我们的小型数据集可能没有经历过过度拟合,但采用这些方法可确保模型坚固且精确,从而在实际应用中更好地决策。
常见问题
Q1。为什么评估机器学习模型超出准确性很重要?Ans。虽然准确性是关键指标,但并不总是给出完整的图片,尤其是在数据集中的情况下。评估一致性,鲁棒性和泛化等其他方面,可确保模型在各种情况下的表现良好,而不仅仅是在受控的测试条件下。
Q2。在建立分类模型时,要避免的常见错误是什么?Ans。常见的错误包括过度拟合,拟合不足,数据泄漏,忽略类失衡以及无法正确验证模型。这些问题可能会导致模型在测试中表现良好,但在现实世界中的应用中失败。
Q3。我如何防止分类模型过度拟合?Ans。通过交叉验证,正则化,早期停止和集合方法可以缓解过度拟合。这些方法有助于平衡模型的复杂性,并确保其良好地推广到新数据。
Q4。我应该用什么指标来评估分类模型的性能?Ans。除了准确性之外,还要考虑诸如精度,召回,F1得分,ROC-AUC和损失之类的指标。这些指标提供了对模型性能的更加细微的理解,尤其是在处理不平衡数据并进行准确的预测方面。
以上是您是否在分类建模中犯了这些错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Meta的Llama 3.2:多模式和移动AI的飞跃 Meta最近公布了Llama 3.2,这是AI的重大进步,具有强大的视觉功能和针对移动设备优化的轻量级文本模型。 以成功为基础

嘿,编码忍者!您当天计划哪些与编码有关的任务?在您进一步研究此博客之前,我希望您考虑所有与编码相关的困境,这是将其列出的。 完毕? - 让&#8217

本周的AI景观:进步,道德考虑和监管辩论的旋风。 OpenAI,Google,Meta和Microsoft等主要参与者已经释放了一系列更新,从开创性的新车型到LE的关键转变

Shopify首席执行官TobiLütke最近的备忘录大胆地宣布AI对每位员工的基本期望是公司内部的重大文化转变。 这不是短暂的趋势。这是整合到P中的新操作范式

介绍 想象一下,穿过美术馆,周围是生动的绘画和雕塑。现在,如果您可以向每一部分提出一个问题并获得有意义的答案,该怎么办?您可能会问:“您在讲什么故事?

介绍 Openai已根据备受期待的“草莓”建筑发布了其新模型。这种称为O1的创新模型增强了推理能力,使其可以通过问题进行思考

斯坦福大学以人为本人工智能研究所发布的《2025年人工智能指数报告》对正在进行的人工智能革命进行了很好的概述。让我们用四个简单的概念来解读它:认知(了解正在发生的事情)、欣赏(看到好处)、接纳(面对挑战)和责任(弄清我们的责任)。 认知:人工智能无处不在,并且发展迅速 我们需要敏锐地意识到人工智能发展和传播的速度有多快。人工智能系统正在不断改进,在数学和复杂思维测试中取得了优异的成绩,而就在一年前,它们还在这些测试中惨败。想象一下,人工智能解决复杂的编码问题或研究生水平的科学问题——自2023年

SQL的Alter表语句:动态地将列添加到数据库 在数据管理中,SQL的适应性至关重要。 需要即时调整数据库结构吗? Alter表语句是您的解决方案。本指南的详细信息添加了Colu
