python-如何选择分类分析算法

本文介绍了防止分类模型过拟合的方法,包括使用更多数据、降维、正则化和组合模型如随机森林。选择分类算法时要考虑训练集大小、计算时间、准确率和概率信息需求等。以Python为例,展示了数据准备、模型训练、评估指标计算以及决策树模型的可视化和规则保存过程。文章还提到了混淆矩阵、AUC、准确率、精确度、召回率和F1得分等评估指标,并指出模型效果受过拟合和样本不均衡影响。
摘要由CSDN通过智能技术生成

目录

1.防止分类模型的过拟合问题

2.如何选择分类分析算法

3.python分类分析

4.相关知识点


1.防止分类模型的过拟合问题

过拟合通俗点讲就是在做分类训练时面模型由于过度学习了训练集的特征,使得训练集的准确率非常高,测试集的准确率却很差。因此,避免过拟合是分类模型中的一个重要任务。一般可以通过以下途径避免过度拟合。

(1)使用更多的数据:导致过拟合的根本原因是训练集和测试集的特征存在较大差异,导致原本完美拟合的模型无法对新数据集产生良好的效果;通过增加数据集,可能会增加训练集和测试集的特征相似度,这样会使得分类结果在新数据集上表现更好。

(2)降维:通过维度选择或转换的方式,降低参与分类模型的维度数量,能有效防止原有数据集中的“噪音”,对模型的影响,从而达到避免过拟合的目的。

(3)使用正则化方法:正则化会通过定义不同特征的参数来保证每个特征有一定的效用,不会使某一个特征特别重要。例如SVM有L2正则项参数,可以在目标函数中对模型进行限制,通过最优化过程中尽量追求小的L2值提高泛化能力,也就抑制了过拟合的问题。

(4)使用组合方法:例如,随机森林。adaboost不容易产生过拟合问题

2.如何选择分类分析算法

在面对不同场景时,可参考以下因素:

(1)文本分类时,用到的最多是朴素贝叶斯,例如电子邮件的垃圾邮件识别

(2)如果训练集比较少,那么选择高偏差且低方差的分类算法则效果更好,例如朴素贝叶斯、支持向量机,因为这类算法不容易过拟合。

(3)如果训练集较大,那么不管选择哪种方法,都不会显著影响分类准确度。

(4)如果关注的是算法模型的计算时间和模型易用性,那么选择支持向量机、人工神经网路不是好的选择。

(5)如果重视算法的准确率,那么应选择算法精度较高的方法,例如支持向量机,随机森林。

(6)如果想要得到有关预测结果的概率信息,然后基于预测概率做进一步应用,使用逻辑回归是比较好的选择。

(7)如果担心离群点或数据不可分,并且需要清晰的决策规则,那么选择决策树。

3.python分类分析

1.导入库

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import tree
from sklearn.metrics import accuracy_score,auc,confusion_matrix,f1_score,precision_score,recall_score,roc_curve
import prettytable
import pydotplus
import matplotlib.pyplot as plt

2.数据准备

raw_data=np.loadtxt('F:\\小橙书\\chapter4\\classification.csv',delimiter=',',skiprows=1)
x=raw_data[:,:-1]
y=raw_data[:,-1]
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=0)

3.训练分类模型

model_tree=tree.DecisionTreeClassifier(random_state=420)
model_tree.fit(x_train,y_train)
pre_y=model_tree.predict(x_test)

4.混淆矩阵

confusion_m=confusion_matrix(y_test,pre_y) #获得混淆矩阵
confusion_matrix_table=prettytable.PrettyTable()
confusion_matrix_table.add_row(confusion_m[0,:])
confusion_matrix_table.add_row(confusion_m[1,:])
print(confusion_matrix_table)

5.评估指标

y_score=model_tree.predict_proba(x_test) #获得决策树的预测概率
fpr,tpr,thresholds=roc_curve(y_test,y_score[:,1]) #ROC
auc_s=auc(fpr,tpr) #AUC
accuracy_s=accuracy_score(y_test,pre_y) #准确率
precision_s=precision_score(y_test,pre_y) #精确度
recall_s=recall_score(y_test,pre_y) #召回率
f1_s=f1_score(y_test,pre_y) #F1得分
core_metrics=prettytable.PrettyTable()
core_metrics.field_names=['auc','accuracy','precision','recall','f1']
core_metrics.add_row([auc_s,accuracy_s,precision_s,recall_s,f1_s])
core_metrics
aucaccuracyprecisionrecallf1
0.74622842356132150.90986472108223140.56960.52352941176470590.5455938697318008

6.模型效果可视化

name_list=['age','gender','income','rfm_score']
color_list=['r','c','b','g']
plt.figure(figsize=(15,8))
plt.subplot(1,2,1)
plt.plot(fpr,tpr,label='ROC')
plt.plot([0,1],[0,1],linestyle='--',color='k',label='random chance') #随机状态下的准确率线
plt.title('ROC')
plt.xlabel('false positive rate')
plt.ylabel('true positive rate')
plt.legend(loc=0)

feature_importance=model_tree.feature_importances_
plt.subplot(1,2,2)
plt.bar(np.arange(feature_importance.shape[0]),feature_importance,tick_label=name_list,color=color_list)
plt.title('feature importance')
plt.xlabel('features')
plt.ylabel('importance')
plt.suptitle('classification result')
plt.show()

7.保存决策树规则图

dot_data=tree.export_graphviz(model_tree,out_file=None,max_depth=5,feature_names=name_list,filled=True,rounded=True)
graph=pydotplus.graph_from_dot_data(dot_data)
graph.write_pdf('4,3分类分析-tree.pdf')

4.相关知识点

混淆矩阵:混淆矩阵是作分类算法效果评估的基本方法,它是监督式学习中的一种可视化工具,主要用于比较分类结果和实例的真实信息。矩阵中的4个区域,分别代表了TP、FP、FN、TN。

真正(True Positive,TP):本来是正例,分类成正例。

真负(True Neigative,TN):本来是负例,分类成负例。

假正(False Positive,FP):本来是负例,分类成正例。

假负(False Negative,FN):本来是正例,分类成负例。

AUC:ROC曲线下的面积。ROC曲线一般位于y=x上方,因此AUC的取值范围一般在0.5和1之间。AUC越大,分类效果越好。

准确率(accuracy):分类模型的预测结果中将正例预测为正例,负例预测为负例的比例。公式为:A=(TP+TN)/(TP+FN+FP+TN),取值范围为[0,1],值越大说明分类结果越准确。

精确度(precision):分类模型的预测结果中将正例预测为正例的比例。公式为:P=TP/(TP+FP),取值范围为[0,1],值越大说明分类结果越准确。

召回率(recall):分类模型的预测结果被正确预测为正例占总的比例。公式为:R=TP/(TP+FN),取值范围为[0,1],值越大说明分类结果越准确。

F1得分(F-score):准确度和召回率的调和均值,公式为:F1=2*\frac{P*R}{P+R},取值范围为[0,1],值越大说明分类结果越准确。

从上述指标可以看出整个模型效果一般,一方面,在建立模型时没有对决策树剪枝,这会导致决策树的过拟合问题;另一方面,原始数据中,存在明显样本不均衡问题,也导致了模型效果不是很理想。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值